https://a.storyblok.com/f/270183/1368x665/5a90dba70f/26sep_blg_apintw_devrel_update_existing_imgs_audio_stream_python-1.jpg

PythonとVonageを使って、音声ストリームを通話に流し込む

最終更新日 March 13, 2023

所要時間:8 分

通話中にオーディオストリームを再生したい理由はたくさんあります。日常的な利用例としては、開発者が発信者を保留状態にしてリラックスしてもらおうとする場合があり、その際にストレスレベルを下げる音楽を流すことができます。

シナリオの例をいくつか挙げよう:

  • 保留中の着信者向け音楽を再生する

  • 電話会議:定足数が揃うまで、電話会議中に音楽を流す

  • 事前録音されたメッセージ:Vonageのテキスト読み上げエンジンがお使いの言語に対応していない場合に便利です

  • ボイスメール:電話をかけてメッセージを残すと、その音声メッセージは、その後の通話で再生することができます。

以下では、シナリオ1と2の実装方法について説明します。その他のシナリオについては、 他のブログ記事で解説しています。

また、通話中にオーディオストリームを再生するには、2つの方法があります:

  1. 呼制御オブジェクト(NCCO)の使用

  2. Voice API の使用

シナリオ1には方法1を、シナリオ2には方法2を使用する。

Vonage を使って通話中に音声をストリーミングする方法

呼制御オブジェクト(NCCO)は、着信呼を制御する便利な方法を提供する。NCCOは、呼の処理方法を記述するJSONコンフィギュレーションで構成される。詳細な NCCOに関する詳細なリファレンスガイドに詳細なリファレンスガイドがあり、実行可能な多くのアクションが説明されている。私たちのシナリオで関心のあるアクションは1つだけである、 stream.アクションには同期と非同期の2つの使い方がある。 stream同期と非同期である。非同期とは、発信者が電話のキーパッドを使って音声を中断できることを意味します。 streamを中断できることを意味します。興味のあるストリームアクションオプションがいくつかあります:

構文

説明

streamUrl

通話または会話にストリーミングするMP3またはWAV(16ビット)オーディオファイルへのURLを1つ含む配列。

level

ストリームのオーディオレベルを、 -1 >=level<=1 の範囲内で、0.1単位の精度で設定します。デフォルト値は 0 です。

bargeIn

これを trueインタラクティブ音声応答(IVR)システムにおいて、ユーザーがメッセージ全体を最後まで聞くことなく、オプションを選択できるようになります。この機能を使用すると、ユーザーがキーパッドのボタンを押した時点でこのアクションが終了します。 bargeIn を true に設定すると、NCCOスタック内の次のアクションは入力アクションでなければなりません。デフォルト値は falseです。

loop

通話が終了するまでに音声が再生される回数。デフォルト値は 1 です。無限ループにする場合は 0 に設定してください。

以下の ドキュメントを参照してください を参照して、Streamのオプションについて詳しくご確認ください。

以下は、 Vonage Python SDK を使用して、 answer Webhookを定義して、通話中に音声を再生するスニペットの例です:

@app.route("/webhooks/answer", methods=["POST"])
def answer_call():
    """
    Answer a call to your Vonage virtual number by playing music
    """
    ncco: list[NccoAction] = [
        Stream(streamUrl=[STREAM_URL]),
    ]

    return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]

対応オーディオファイル形式はMP3と16ビットWAV。

すでに、2つのシナリオを用いて着信を受け付け、通話中に音楽を再生するVonageのスターターアプリケーションを開発しました。このスターターアプリケーションを使用するには、 .env ファイルに認証情報を追加し、GitHub Codespaces を使用してアプリをデプロイする必要があります。Codespace とは、GitHub クラウド上でホストされる開発環境のことです。 GitHub Codespaces はプロジェクトごとにカスタマイズ可能で、ユーザーは使用するLinuxベースのオペレーティングシステムの設定、よく使用されるポートの転送、環境変数の設定などを行うことができます。また、 スターターアプリケーション を編集して試すことも可能です。

前提条件

Vonage API Account に登録する

新しいVonageアプリケーションを作成する

  • アプリケーションを作成するには アプリケーションの作成ページでアプリケーションの名前を定義します。

  • Webhooksを使用するAPIを使用する場合は、秘密鍵が必要です。Generate public and private key "をクリックすると、自動的にダウンロードが始まります。この鍵は紛失すると再ダウンロードできません。この鍵は紛失しても再ダウンロードできません。 private_<あなたのアプリID>.key.この鍵はAPIコールの認証に使用できます。 注意:アプリケーションを保存するまで、キーは機能しません。

  • 必要な機能(Voice、Messages、RTCなど)を選択し、必要なWebhook(イベントURL、応答URL、受信メッセージURLなど)を提供します。これらはチュートリアルで説明します。

  • 保存してデプロイするには、"Generate new application "をクリックして設定を確定します。これでアプリケーションはVonage APIで使用する準備が整いました。

環境のセットアップ

フォーク このリポジトリを。「mainブランチでCodespaceを作成」をクリックして、Codespacesで開きます。あるいは、 Python と ngrokを使用してアプリをデプロイすることも可能ですを使用してアプリをデプロイすることもできます。その方法に関する手順は、リポジトリの READMEに記載されています。

シークレットの取得と設定

このサンプルアプリケーションを動作させるには、VonageのアプリケーションIDと private.key が必要です。

  1. 「 Vonage Developer Dashboard のメニューで、「公開鍵と秘密鍵を生成」ボタンをクリックしてください。これによりファイルがダウンロードされます。このファイルは安全に保管し、他人に知られないようにしてください!

  2. Codespace内で、 .env という名前のファイルを作成し、 .env.template をそのファイルにコピーして貼り付けてください。 VONAGE_APPLICATION_ID を、ご自身のアプリケーション ID に置き換えてください。

  3. Codespace内で、 private.keyという名前のファイルを作成してください。ダウンロードした private.key ファイルの内容をこのファイルにコピーして貼り付け、 VONAGE_PRIVATE_KEY を .env ファイル内ののプレースホルダー値を更新し、新しく作成した秘密鍵ファイルを指すようにしてください。

Codespaceのターミナルで、次のコマンドを実行してください:

echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/webhooks/answer"

そして、次のコマンドを実行してください:

echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/webhooks/event"

これらのコマンドの実行結果をコピーして、 回答URL および イベントURL に、Vonage Applications設定の各フィールドに合わせて貼り付けてください。

Terminal output in GitHub Codespaces showing the generated Answer URL and Event URL for the Vonage webhook configuration.Copy the generated URLs and paste them into the Answer URL and Event URL fields in your Vonage Application settings.NCCO を使用して通話に音声をストリーミングする

このシナリオでは、ユーザーがVonageの番号に電話をかけると、NCCOを使用して通話中に音楽がストリーミング再生されます。 stream アクションを通じて通話中に音楽がストリーミングされます。以下の scenario-1.py ファイルを使用します:

from dotenv import load_dotenv
from flask import Flask, request, jsonify
from vonage_voice import NccoAction, Stream

from os import environ as env

# Load environment variables from a .env file:
load_dotenv(".env")

# Load in configuration from environment variables:
STREAM_URL = env["STREAM_URL"]


app = Flask(__name__)


@app.route("/webhooks/answer", methods=["POST"])
def answer_call():
    """
    Answer a call to your Vonage virtual number by playing music
    """
    ncco: list[NccoAction] = [
        Stream(streamUrl=[STREAM_URL]),
    ]

    return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]


@app.route("/webhooks/event", methods=["POST"])
def events():
    return "200"


if __name__ == "__main__":
    app.run(host="localhost", port=9000)

試してみる

以下の手順に従って、Codespaces でコードを実行できます。

依存関係をインストールします:

pip install -r requirements.txt

次のコマンドでアプリを起動してください:

python3 scenario-1.py

ターミナルで Portタブを開く。タブの Privateをクリックして Visibility列をクリックし Public.

The GitHub Codespaces Ports tab showing the Visibility column being changed from Private to Public for port 9000.Change the port visibility to Public so Vonage can reach your local webhook.このシナリオにおける一連の出来事は以下の通りです:

  1. Vonageの電話番号をダイヤルしてください

  2. Vonageが通話を受信する

  3. 指定した answer 指定したWebhook URLで生成されます

  4. Applicationsはコールバックを受け取り、NCCOを返して応答します

  5. 通話中に音楽が流れます

Voice API を使用して通話に音声をストリーミングする

このシナリオでは、Vonageの番号に電話をかけると、会議(この場合は「Soothing Conference」)に参加することになります。その後、 /stream URLにアクセスして、会議へのストリーミングを開始できます。その後、Voice APIを使用して、会議内で音楽が再生されます。

試してみる

以下の手順に従って、Codespaces でコードを実行できます。

依存関係をインストールします:

pip install -r requirements.txt

次のコマンドでアプリを起動してください:

python3 scenario-2.py

ターミナルで Portタブを開く。タブの Privateをクリックして Visibility列をクリックし Public.

The GitHub Codespaces Ports tab showing the Visibility column being changed from Private to Public for port 9000.Change the port visibility to Public so Vonage can reach your local webhook.これで、オーディオのストリーミングを始める準備が整いました!

余計なことはするな:

  1. Vonageの電話番号をダイヤルしてください

  2. 新しいターミナルウィンドウで次のコマンドを実行し echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream" その後、リンク先へ移動してください(ローカルマシンで実行している場合は、 localhost:9000/stream)、会議で音楽が再生されます

以下のアクションが起こる:

  1. Vonageが通話を受信する

  2. コールバックは、 answer 指定したWebhook URLで生成されます

  3. Applicationsはコールバックを受け取り、NCCOを返して応答します

  4. 電話参加者が会議に参加しました

  5. 会議で演奏された音楽

まとめ

おめでとうございます!このワークフローと用意されたコードサンプルを活用すれば、通話中に関連する音声をストリーミングしたり、発信者が保留状態のときに関連する音楽を再生したりすることができます。

その他の資料

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

シェア:

https://a.storyblok.com/f/270183/400x409/b965ab37c0/oleksii-borysenko.png
Oleksii Borysenkoヴォネージの卒業生

Vonageのデベロッパー・アドボケイト、作家、ストーリーテラー。AI/ML、ユニファイド・コミュニケーション、教育技術、クラウド技術、オープンソースに関心を持つ。