
シェア:
元Vonage開発者エデュケーター。PHPのバックグラウンドを持つが、一つの言語に縛られることはない。熱心なゲーマーでRaspberry pi愛好家。屋内クライミング施設でボルダリングをしていることが多い。
Goで音声ファイルを音声通話に再生する
所要時間:4 分
過去のチュートリアルでは チュートリアルではそして 受信を学びました。
このチュートリアルでは、音声通話を受信し、音声ファイルを再生するまでのプロセスを、Goと Voice API を使用します。.
着信時にVonageが送信するウェブフック・エンドポイントに応答するサーバーを作成する。次に、着信した音声通話を宛先にルーティングする音声機能付きのVonageアプリケーションを作成する。最後に、音声ファイルをアクティブな通話にストリーミングするようにAPIに指示する。
前提条件
このチュートリアルに従うには、以下のものが必要です:
電話番号
コードを書く
Vonageはバーチャル番号への音声コールを受信すると、音声コールをルーティングするためにWebhookを設定したかどうかを確認します。この設定は、チュートリアルの後半で作成および設定するアプリケーションに固有のものです。
このウェブフックへのリクエストを処理するコードを書いてみよう。という名前のファイルを作成し play-an-audio-stream-into-a-call.goという名前のファイルを作成し、このファイルに以下をコピーします:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/joho/godotenv"
"github.com/vonage/vonage-go-sdk"
"github.com/vonage/vonage-go-sdk/ncco"
)
func answer(w http.ResponseWriter, req *http.Request) {
uuid, _ := req.URL.Query()["uuid"]
from, _ := req.URL.Query()["from"]
MyNcco := ncco.Ncco{}
talk := ncco.TalkAction{Text: "Thank you for calling."}
MyNcco.AddAction(talk)
conversation := ncco.ConversationAction{Name: from[0], StartOnEnter: "false"}
MyNcco.AddAction(conversation)
fmt.Println("uuid is :" + uuid[0])
data, _ := json.Marshal(MyNcco)
w.Header().Set("Content-Type", "application/json")
w.Write(data)
}
func main() {
http.HandleFunc("/webhooks/answer", answer)
http.ListenAndServe(":3000", nil)
}まず、単一のウェブフックURLで新しいGoアプリケーションを作成しました、 /webhooks/answerを持つ新しいGoアプリケーションを作成しました。また、このアプリケーションは、サーバとして http.ListenAndServe(":3000", nil)という行を通してサーバーとしても実行されます。
この answer関数は2つのコール・コントロール・オブジェクト(NCCO)を作成する。最初のものは TalkActionで、あらかじめ決められた文字列を電話の相手にリレーする。2つ目のオブジェクトは、コールレグを会議通話に追加するもので、回線を維持し、オーディオストリームを通話に渡すことができます。
次に、アクティブな通話にオーディオファイルを再生する機能を追加する必要がある。これは /play-audio.そのため、上記の func main() {に以下のコードを追加します:
func playAudio(w http.ResponseWriter, req *http.Request) {
godotenv.Load("../.env")
uuid, _ := req.URL.Query()["uuid"]
privateKey, _ := ioutil.ReadFile(os.Getenv("VONAGE_APPLICATION_PRIVATE_KEY_PATH"))
auth, _ := vonage.CreateAuthFromAppPrivateKey(os.Getenv("VONAGE_APPLICATION_ID"), privateKey)
client := vonage.NewVoiceClient(auth)
result, _, _ := client.PlayAudioStream(uuid[0],
"https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3",
vonage.PlayAudioOpts{},
)
// or to stop the audio
// result, _, _:= client.StopAudioStream(os.Getenv(uuid[0]))
fmt.Println("Update message: " + result.Message)
}以下 http.HandleFunc("/webhooks/answer", answer)以下を追加する:
http.HandleFunc("/play-audio", playAudio)Vonageバーチャル番号に着信した電話に応答するためのWebhookを作成しました。応答すると、ターミナルにコール uuidが表示されます。テストする前に、プロジェクトをインターネットに公開し、ダッシュボードでアカウントを設定する必要があります。それでは、プロジェクトをインターネットに公開しましょう。
プロジェクトをインターネットに公開する
電話がかかってくると、Vonage は事前に設定したウェブフック URL に HTTP リクエストを送信します。このリクエストを受信するには、Goアプリケーションがインターネットにアクセスできる必要があります。 を使用することをお勧めします。.
以下のコマンドでNgrokを起動する:
後で必要になるので、ngrokが使用するHTTPS URLをコピーしてください。下の例のようになります:
注無料プランをご利用の場合、このURLはコマンドを実行するたびに異なります。そのため、アプリケーションの ダッシュボードでアプリケーションを更新する必要があります。
設定を行う
アプリケーションを作成する ダッシュボードでアプリケーションを作成します。新しいアプリケーションに名前を付け、"Generate public and private key"(公開鍵と秘密鍵を生成)を選択します。 private.keyファイルをダウンロードします。このファイルを作成したコードと一緒に移動します。
アプリケーションに Voice 機能を追加し、先ほどコピーした Ngrok URL を使用して URL を設定します。Answer URL には [paste ngrok url]/webhooks/answerイベントURLには [paste ngrok url]/webhooks/event.
次に Linkボタンをクリックして、新しいアプリケーションを電話番号にリンクします。
集めた新しい情報をすべて使って、プロジェクト・ディレクトリ内に .envファイルを作成し、以下の変数を追加する:
上記の変数を正しい値に更新する。例えば、最初の変数には private.keyが必要で、2 番目の変数には application IDが必要です。
Vonageバーチャル番号を購入し、Vonageアプリケーションを作成し、Webhookイベントを処理するコードを書きました。プロジェクトをテストする時が来ました!
テストの時間
Vonageアプリケーションと電話番号を設定し、着信音声コールを処理する方法を知りました。また play-an-audio-stream-into-a-call.goを作成しました。最後に、指定された通話に音声ファイルを再生するために手動でトリガーされる別のエンドポイントを追加しました。
さて、いよいよこのアプリケーションをテストしてみよう。以下のコマンドを実行すると、このWebhookがリクエストをリッスンしているWebサーバーが起動します。以下のコマンドを実行して、新しいアプリケーションのテストを始めましょう:
バーチャル・ナンバーに電話をかけると、「お電話ありがとうございました。通話が続いている以外は、何も起こっていないように見えます。
ブラウザを開き、次のように入力します: http://localhost:3000/play-audio?uuid=[paste your uuid here]を [paste your uuid here]を uuidに置き換えてください。このURLを入力すると、通話で再生されるオーディオストリームが聞こえます。終了したら、通話を終了します。
あなたは今、Vonageアプリケーションを作成し、仮想電話番号をレンタルし、この新しい番号へのWebhookコールを処理するためにいくつかのコードを書きました。あなたがこの番号に電話をかけると、あなたのコードは音声合成メッセージを通話に追加し、あなたが聞くことができるようにします。その後、イベントをトリガーして音声ファイルを通話に再生し、携帯電話で聞くことができます!
さらに読む
このチュートリアルで示したコードは Goコードスニペットリポジトリ.
以下は、Goを使ったサービスの使い方について書いた他のチュートリアルです:
コミュニティで共有したい質問、アドバイス、アイデアなどがありましたら、お気軽に私たちの コミュニティSlackワークスペース.このチュートリアルを実施した方、あなたのプロジェクトがどのように機能しているか、ぜひお返事ください。