
シェア:
Vonageのデベロッパー・アドボケイト、作家、ストーリーテラー。AI/ML、ユニファイド・コミュニケーション、教育技術、クラウド技術、オープンソースに関心を持つ。
PythonとVonageを使って、音声ストリームを通話に流し込む
所要時間:8 分
通話中にオーディオストリームを再生したい理由はたくさんあります。日常的な利用例としては、開発者が発信者を保留状態にしてリラックスしてもらおうとする場合があり、その際にストレスレベルを下げる音楽を流すことができます。
シナリオの例をいくつか挙げよう:
保留中の着信者向け音楽を再生する
電話会議:定足数が揃うまで、電話会議中に音楽を流す
事前録音されたメッセージ:Vonageのテキスト読み上げエンジンがお使いの言語に対応していない場合に便利です
ボイスメール:電話をかけてメッセージを残すと、その音声メッセージは、その後の通話で再生することができます。
以下では、シナリオ1と2の実装方法について説明します。その他のシナリオについては、 他のブログ記事で解説しています。
また、通話中にオーディオストリームを再生するには、2つの方法があります:
呼制御オブジェクト(NCCO)の使用
Voice API の使用
シナリオ1には方法1を、シナリオ2には方法2を使用する。
Vonage を使って通話中に音声をストリーミングする方法
呼制御オブジェクト(NCCO)は、着信呼を制御する便利な方法を提供する。NCCOは、呼の処理方法を記述するJSONコンフィギュレーションで構成される。詳細な NCCOに関する詳細なリファレンスガイドに詳細なリファレンスガイドがあり、実行可能な多くのアクションが説明されている。私たちのシナリオで関心のあるアクションは1つだけである、 stream.アクションには同期と非同期の2つの使い方がある。 stream同期と非同期である。非同期とは、発信者が電話のキーパッドを使って音声を中断できることを意味します。 streamを中断できることを意味します。興味のあるストリームアクションオプションがいくつかあります:
構文 | 説明 |
|---|---|
| 通話または会話にストリーミングするMP3またはWAV(16ビット)オーディオファイルへのURLを1つ含む配列。 |
| ストリームのオーディオレベルを、 |
| これを |
| 通話が終了するまでに音声が再生される回数。デフォルト値は 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ベースのオペレーティングシステムの設定、よく使用されるポートの転送、環境変数の設定などを行うことができます。また、 スターターアプリケーション を編集して試すことも可能です。
前提条件
Python 3.x
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 が必要です。
「 Vonage Developer Dashboard のメニューで、「公開鍵と秘密鍵を生成」ボタンをクリックしてください。これによりファイルがダウンロードされます。このファイルは安全に保管し、他人に知られないようにしてください!
Codespace内で、
.envという名前のファイルを作成し、.env.templateをそのファイルにコピーして貼り付けてください。VONAGE_APPLICATION_IDを、ご自身のアプリケーション ID に置き換えてください。Codespace内で、
private.keyという名前のファイルを作成してください。ダウンロードしたprivate.keyファイルの内容をこのファイルにコピーして貼り付け、VONAGE_PRIVATE_KEYを.envファイル内ののプレースホルダー値を更新し、新しく作成した秘密鍵ファイルを指すようにしてください。
Codespaceのターミナルで、次のコマンドを実行してください:
そして、次のコマンドを実行してください:
これらのコマンドの実行結果をコピーして、 回答URL および イベントURL に、Vonage Applications設定の各フィールドに合わせて貼り付けてください。
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 でコードを実行できます。
依存関係をインストールします:
次のコマンドでアプリを起動してください:
ターミナルで Portタブを開く。タブの Privateをクリックして Visibility列をクリックし Public.
Change the port visibility to Public so Vonage can reach your local webhook.このシナリオにおける一連の出来事は以下の通りです:
Vonageの電話番号をダイヤルしてください
Vonageが通話を受信する
指定した
answer指定したWebhook URLで生成されますApplicationsはコールバックを受け取り、NCCOを返して応答します
通話中に音楽が流れます
Voice API を使用して通話に音声をストリーミングする
このシナリオでは、Vonageの番号に電話をかけると、会議(この場合は「Soothing Conference」)に参加することになります。その後、 /stream URLにアクセスして、会議へのストリーミングを開始できます。その後、Voice APIを使用して、会議内で音楽が再生されます。
試してみる
以下の手順に従って、Codespaces でコードを実行できます。
依存関係をインストールします:
次のコマンドでアプリを起動してください:
ターミナルで Portタブを開く。タブの Privateをクリックして Visibility列をクリックし Public.
Change the port visibility to Public so Vonage can reach your local webhook.これで、オーディオのストリーミングを始める準備が整いました!
余計なことはするな:
Vonageの電話番号をダイヤルしてください
新しいターミナルウィンドウで次のコマンドを実行し
echo "https://${CODESPACE_NAME}-9000.preview.app.github.dev/stream"その後、リンク先へ移動してください(ローカルマシンで実行している場合は、localhost:9000/stream)、会議で音楽が再生されます
以下のアクションが起こる:
Vonageが通話を受信する
コールバックは、
answer指定したWebhook URLで生成されますApplicationsはコールバックを受け取り、NCCOを返して応答します
電話参加者が会議に参加しました
会議で演奏された音楽
まとめ
おめでとうございます!このワークフローと用意されたコードサンプルを活用すれば、通話中に関連する音声をストリーミングしたり、発信者が保留状態のときに関連する音楽を再生したりすることができます。
その他の資料
ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。
登録する 開発者ニュースレター
フォローする X(旧ツイッター)最新情報
Videoの方がいいですか? 当社の YouTubeチャンネルでチュートリアルをご覧ください
LinkedInの LinkedIn の Vonage デベロッパーページ
開発者体験の向上にご協力ください。以下の 「開発者の声」フィードバックにご協力ください
最新の開発者向けニュース、ヒント、イベント情報をお届けします。