
シェア:
元Vonage開発者エデュケーター。PHPのバックグラウンドを持つが、一つの言語に縛られることはない。熱心なゲーマーでRaspberry pi愛好家。屋内クライミング施設でボルダリングをしていることが多い。
Goで音声ファイルを音声通話に再生する
所要時間:4 分
過去のチュートリアルでは チュートリアルではそして 受信を学びました。
このチュートリアルでは、音声通話を受信し、音声ファイルを再生するまでのプロセスを、Goと Voice API を使用します。.
着信時にVonageが送信するウェブフック・エンドポイントに応答するサーバーを作成する。次に、着信した音声通話を宛先にルーティングする音声機能付きのVonageアプリケーションを作成する。最後に、音声ファイルをアクティブな通話にストリーミングするようにAPIに指示する。
前提条件
このチュートリアルに従うには、以下のものが必要です:
電話番号
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
コードを書く
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ワークスペース.このチュートリアルを実施した方、あなたのプロジェクトがどのように機能しているか、ぜひお返事ください。
