https://a.storyblok.com/f/270183/35295/bcd3f710e5/go_audioincall1200x600.png

Goで音声ファイルを音声通話に再生する

最終更新日 January 14, 2021

所要時間: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 http 3000

後で必要になるので、ngrokが使用するHTTPS URLをコピーしてください。下の例のようになります:

https://abc1234.ngrok.io -> http://localhost:8080

無料プランをご利用の場合、この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ファイルを作成し、以下の変数を追加する:

VONAGE_APPLICATION_PRIVATE_KEY_PATH= VONAGE_APPLICATION_ID=

上記の変数を正しい値に更新する。例えば、最初の変数には private.keyが必要で、2 番目の変数には application IDが必要です。

Vonageバーチャル番号を購入し、Vonageアプリケーションを作成し、Webhookイベントを処理するコードを書きました。プロジェクトをテストする時が来ました!

テストの時間

Vonageアプリケーションと電話番号を設定し、着信音声コールを処理する方法を知りました。また play-an-audio-stream-into-a-call.goを作成しました。最後に、指定された通話に音声ファイルを再生するために手動でトリガーされる別のエンドポイントを追加しました。

さて、いよいよこのアプリケーションをテストしてみよう。以下のコマンドを実行すると、このWebhookがリクエストをリッスンしているWebサーバーが起動します。以下のコマンドを実行して、新しいアプリケーションのテストを始めましょう:

go run play-an-audio-stream-into-a-call.go

バーチャル・ナンバーに電話をかけると、「お電話ありがとうございました。通話が続いている以外は、何も起こっていないように見えます。

ブラウザを開き、次のように入力します: http://localhost:3000/play-audio?uuid=[paste your uuid here][paste your uuid here]uuidに置き換えてください。このURLを入力すると、通話で再生されるオーディオストリームが聞こえます。終了したら、通話を終了します。

あなたは今、Vonageアプリケーションを作成し、仮想電話番号をレンタルし、この新しい番号へのWebhookコールを処理するためにいくつかのコードを書きました。あなたがこの番号に電話をかけると、あなたのコードは音声合成メッセージを通話に追加し、あなたが聞くことができるようにします。その後、イベントをトリガーして音声ファイルを通話に再生し、携帯電話で聞くことができます!

さらに読む

このチュートリアルで示したコードは Goコードスニペットリポジトリ.

以下は、Goを使ったサービスの使い方について書いた他のチュートリアルです:

コミュニティで共有したい質問、アドバイス、アイデアなどがありましたら、お気軽に私たちの コミュニティSlackワークスペース.このチュートリアルを実施した方、あなたのプロジェクトがどのように機能しているか、ぜひお返事ください。

シェア:

https://a.storyblok.com/f/270183/250x250/b052219541/greg-holmes.png
Greg Holmesヴォネージの卒業生

元Vonage開発者エデュケーター。PHPのバックグラウンドを持つが、一つの言語に縛られることはない。熱心なゲーマーでRaspberry pi愛好家。屋内クライミング施設でボルダリングをしていることが多い。