
シェア:
Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.
Pythonでインバウンドの電話を処理する
所要時間:18 分
はじめに
はじめに
企業は、電話による顧客サポートを可能にすることで、顧客体験を向上させることができる。Voiceアプリケーションによって、企業はエンドユーザーに最適なカスタム電話回線を作成することができます。この記事では、Python Flaskアプリケーションを使用して、着信電話を受信する音声アプリケーションを開発する方法を学びます。Flaskアプリケーション内で電話を受けるために構築できるいくつかの異なるシナリオを探ります!
Vonage Call Control Objectsについて
Vonage音声アプリケーションは、Vonage Call Control Objects (NCCOs)のコンセプトに基づいています。コール・コントロール・オブジェクトは、着信コールを制御するアクションのJSON配列で構成されます。NCCOは3つのことを伝えます:
アクション:通話中に何をすべきかを指示する
オプションを使用します:アクションを変更する方法
タイプ:は、例えばオプションについて記述します、
type=phoneエンドポイントオプションの場合
NCCOに記載されているアクションは、先入れ先出し(FIFO)で実行される。この記事で使用する3つのアクションは以下の通り:
第1ステージアクション talk.
第2ステージアクション connect.
第3ステージ- アクション talkそして stream.次に、エージェントが(RESTコールを介して)コール転送を受け、発信者を接続することができます。
通話録音や録音した通話のダウンロードなど、ここでは説明しない他の操作も可能です。詳しくは こちら.
前提条件
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.
Python3のインストール
Python3のインストール方法はこちら ここで.
ングロックをインストールする
Ngrok:は、ウェブアプリケーションを迅速かつ簡単にテストするためのウェブサーバーの実行を支援します。Ngrokのインストールは、公式ウェブサイト ウェブサイト.インストール後、以下のコマンドでngrokを実行できる:
実行中の ngrok インスタンスは、localhost サーバーをトンネリングする URL を生成します。Ngrok が生成する URL は以下のようになります:
Ngrok が生成してくれる URL に注意してください。このチュートリアルの後半で、アプリケーションの機能を設定するために必要になります。
ターミナルで新しいタブを開く。バックグラウンドで ngrok を実行したままにしておくので、以降のターミナル・コマンドはすべて新しいターミナル・タブで実行します。
Flaskのインストール
Vonage Voiceアプリケーションの設定方法
Vonage CLIのセットアップ
Vonage CLI Vonage CLIは、Vonageアカウント管理と管理タスクのための素晴らしいツールです。アプリケーションの作成やバーチャル電話番号の購入など、VonageダッシュボードUIの代わりに使用することができます。これをインストールするには npmパッケージマネージャーでインストールできます。ターミナルで以下のコマンドを使用してください:
アカウントが必要です API keyおよび API Secretが必要です。Vonageアカウントにログインし、API 開発者ダッシュボードにログインすると、ページの上部に両方の値が表示されます。
次に、次のコードのようにターミナルで2つの値を設定する:
Vonage Python SDKのインストール
Vonage Python SDK:これは、PythonアプリケーションをビルドしながらVonageで作業することを容易にする素晴らしいCLIツールキットです。pipパッケージマネージャでインストールできます。
Vonageボイスアプリケーションの作成
Vonage CLI を使用して新しい Vonage アプリを作成します。新しいディレクトリを作成し、Vonage CLI を使用して次のターミナルコマンドで示すように Vonage アプリを作成します。
という名前の新しいディレクトリを作成する。 project:
新しいVonageアプリケーションを作成するには
次のような出力が得られるはずだ:
2 注意すべきこと
その
APPLICATION_IDが返された場合、後でこのガイドに従う際に必要になります。プロジェクトで作成したprivate.keyファイル
アプリケーション機能の設定
Ngrok はトンネルを作成し、アプリケーションを公開かつ安全にアクセスできるようにします。ただし、実行中の Python スクリプトを、この記事の最初の方でターミナルから作成した Vonage アプリケーションに接続する必要があります。
起動手順 VoiceVonageアプリケーションで音声機能を有効にする手順。
ダッシュボードの Applicationsセクションに移動し、作成したアプリケーションを選択します。
をクリックします。 編集ボタンをクリックして、アプリケーション設定ページを開きます。
設定ページで 機能セクションまでスクロールして Voice機能カードをご覧ください。
のトグルボタンをクリックする。 Voice機能カードのトグルボタンをクリックします。これにより、機能カードが展開され、必要なURLのフィールドが表示されます。
アンサーとイベントのURLをそれぞれの欄に入力してください。
回答URL アンサーURLは、Vonage番号でかかってきた電話をVonageが中継する場所です。
イベント イベントURLは、コールに関するイベント情報が入ってくる場所です。イベントを使用して、コールリクエストを監視または確認できます。
URLは以下のようになります:
回答URLhttps://3eab-197-210-8-199.ngrok.io/webhooks/answer
イベントのURLhttps://3eab-197-210-8-199.ngrok.io/webhooks/event
ページをスクロールダウンして 変更を保存ボタンをクリックします。
Vonageバーチャル番号の購入とリンク
Vonageのバーチャル番号を購入する前に検索する必要があります。次のターミナルコマンドを使用して番号を検索します。
上記のコマンドの [COUNTRY_CODE]を alpha-2で置き換えることができる。これは次のbashコマンドで実証されている:
ターミナル出力は以下のようになるはずだ:
適当な番号を選び、以下のターミナル・コマンドで購入する:
一例を挙げよう:
次のような出力が得られる:
Vonageアプリケーションに番号をリンクする
次のコマンドを使用して、新しく購入した番号を先ほど作成したVonageアプリケーションに割り当てます。
以下のようなbash出力が得られるはずだ:
Python Flask音声アプリケーションの実装方法
シナリオ1:音声合成メッセージの再生
インバウンドコールを受信すると、発信者に音声合成メッセージを再生することができる。このシナリオでは、実装のためのコードを書くことになる。
プロジェクト・ディレクトリ内に新しいファイルを作成し、名前を scenario-1.py.その中に以下のコードを追加する:
from flask import Flask, request, jsonify
app = Flask(__name__)
ncco = [
{
"action": "talk",
"text": "Hello, our office hours are Monday to Friday nine until five-thirty. Please call back then.",
"language": "en-GB"
}
]
@app.route("/webhooks/answer")
def answer_call():
return jsonify(ncco)
@app.route("/webhooks/event")
def events():
return ("200")
if __name__ == '__main__':
app.run(host="localhost", port=9000)上記のコードでは
Vonage番号がコールを受信したときにコールバックが生成されるAnswer webhook URLを指定しました。NCCOが応答として返されます。
NCCOは
actionNCCOは、音声合成メッセージを通話中に再生することで通話を制御する。NCCOは発信者が聞くメッセージで構成され、Vonageはメッセージの終了時に通話を終了します。また、イベントをリッスンするためのWebhookイベントもあります。
コードのテスト実行
ngrokトンネルとは別のタブで、以下のターミナル・コマンドを使ってコードを実行する。
python scenario-1.py試してみてください:
Vonageのバーチャル番号に電話をかけると、メッセージが聞こえるはずです。
シナリオ2:発信者をエージェントに接続する
このシナリオでは、新しいNCCOアクションを含める、 connectを追加します。 talkに接続する。
新規ファイルを作成し scenario-2.py.以下のコードを追加し、ファイルを保存する。
from flask import Flask, request, jsonify
VONAGE_NUMBER = "1**********" # Replace with your virtual Vonage number
YOUR_SECOND_NUMBER = "1**********" #Replace with your number
app = Flask(__name__)
ncco = [
{
"action": "talk",
"text": "Hello, one moment please, your call is being forwarded to our agent."
},
{
"action": "connect",
"from": VONAGE_NUMBER,
"endpoint": [{
"type": 'phone',
"number": YOUR_SECOND_NUMBER
}]
}
]
@app.route("/webhooks/answer")
def answer_call():
return jsonify(ncco)
@app.route("/webhooks/event")
def events():
return ("200")
if __name__ == '__main__':
app.run(host="localhost", port=9000)上記のコードでは
Vonageはバーチャル番号でコールを受信し、アンサーウェブフックURLにコールバックを生成します。
通話を制御するNCCOは、まず音声合成メッセージを通話に再生する。これが最初の動作である、
talk.アクションが完了すると
talkアクションが完了するとconnectアクションが呼び出され、通話中のエージェントである別の番号に、どちらかが電話を切るまで通話が転送されます。
お試しください:
Vonage番号に電話をかけます。メッセージが聞こえ、指定した2番目の番号に電話が転送されます。
シナリオ3保留音楽の再生
ここでの実装では、エージェントの手が空くまで、発呼者は保留状態になる(音楽を聴く)。その後、通話はエージェントに転送される。
実装は次のような手順で行われる:
電話がかかってきて、音声合成メッセージが再生される
エージェントが不在のため、通話には音楽が流れます。
エージェントが利用可能になると(30秒のシミュレーションの後)、通話は新しいNCCOに転送される、
ncco2転送された
ncco2転送されたコールを受信すると、メッセージを再生し、現在応答可能なエージェントにコールを転送する。
という新しいファイルを作成し scenario-3.pyという新しいファイルを作成し、そこに以下のコードを追加する:
from flask import Flask, request, jsonify
from threading import Timer
import vonage
UUID = ""
APPLICATION_ID = "YOUR_APP_ID"
PRIVATE_KEY = "voice_app.key"
TIMEOUT = 30 # Agent becomes available after this period
VONAGE_NUMBER = "1**********" # Replace with your virtual number
YOUR_SECOND_NUMBER = "1**********" #Replace with your number
# audio_url = "https://your_domain.com/your_music.mp3"
audio_url = "https://download.samplelib.com/mp3/sample-12s.mp3"
ncco_url = "https://1234abcd.ngrok.io/ncco"
ncco = [
{
"action": "talk",
"text": "Hello, I'm sorry, but all our agents are helping customers right now. Please hold, and we will put you through as soon as possible."
},
{
"action": "stream",
"streamUrl": [audio_url],
"loop": 0
}
]
ncco2 = [
{
"action": "talk",
"text": "Now connecting you. Thanks for waiting."
},
{
"action": "connect",
"from": VONAGE_NUMBER,
"endpoint": [{"type": 'phone',"number": YOUR_SECOND_NUMBER}]
}
]
def transfer_call ():
print ("Transferring call...")
client = vonage.Client(application_id = APPLICATION_ID, private_key=PRIVATE_KEY)
dest = {"type": "ncco", "url": [ncco_url]}
response = client.update_call(UUID, action="transfer", destination=dest)
def register_timer_callback():
t = Timer(TIMEOUT, transfer_call)
t.start()
register_timer_callback()
app = Flask(__name__)
@app.route("/webhooks/answer")
def answer_call():
global UUID
UUID = request.args['uuid']
print("UUID:====> %s" % UUID)
return (jsonify(ncco))
@app.route("/webhooks/event", methods=['POST'])
def events():
return ("200")
@app.route("/ncco")
def build_ncco():
return jsonify(ncco2)
if __name__ == '__main__':
app.run(host="localhost", port=9000)
Vonage Python ライブラリでは、REST API 呼び出しに update_call関数で呼び出すことができます。REST APIコールは transferアクションを使用して、一意の ID UUIDで識別される呼を、指定された宛先NCCOに転送する。
ここでは静的なNCCOを指定する代わりに、エンドポイントを呼び出す、 build_nccoを呼び出し、新しい制御NCCOをJSON形式で返します。
その後、新しいNCCOは connectアクションを実行し、現在癒しの音楽を聴いている発信者をエージェントに接続する。
試してみるVonage番号に電話をかけます。メッセージが聞こえ、音楽が流れます。しばらくすると、エージェントにつながりますというメッセージが聞こえます。その後、エージェントとの通話につながります。
概要
Vonageの助けを借りてPythonの音声アプリケーションを作る方法を見てきた。音声合成メッセージを流したり、別の番号に電話を転送したり、さらには待ち続ける発信者に音声を流したりする方法を使いました。また、新しいNCCOに制御を移す方法も見た。この基礎があれば、もっと複雑なPythonアプリケーションをプログラムすることができます。
次のような高度なアクションを追加することもできます。 通話録音などを追加できます。
その他のリソース
をチェックしてください。 Voice APIリファレンスVoiceアプリケーションに組み込めるものの詳細なリストについては、Voice APIリファレンスを参照してください。
NCCOのアクションについては、公式ガイドの ガイド.
質問やフィードバックがある場合は Vonage デベロッパ Slackに参加するか Vonageにメッセージをお送りください!
シェア:
Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.



