
シェア:
マークはNexmoのクライアント・ライブラリの名目上の責任者である(ただし、彼が書いているのはPythonとJavaのライブラリだけである)。もともとはJavaの開発者だったが、18年間Pythonの開発者であり、最近はGoやRustにも手を出している。プログラミング言語の限界に挑戦し、そのテクニックを他のプログラマーに教えるのが好きだ。バイキングの帽子をかぶっているがバイキングではない。
PythonでAzure Functionsを使う方法
所要時間:12 分
Vonageでは、APIをできるだけシンプルに使えるように努めています。しかし、1つ厄介なことがあります。 Vonage Voice APIのように、私たちのAPIの多くは、通話中にあなたのアプリに何をするかを尋ねる必要があります。つまり、独自の サーバー.それとも?
Azure Functionsでサーバーレスを実現する
マイクロソフトが提供する Azure Functionsのサポートを提供している!多くのサポートが提供されており、すぐに使い始めることができます。 requirements.txt.Pythonで小さなスタンドアロン関数を書いて、それをAzureクラウドに簡単にデプロイできる。
無料ティアには 百万関数の実行を月100万回無料で提供する。小規模なデモアプリや小規模な本番アプリには十分だろう!
機能的になろう
Azure Functionsでホストされた2つのWebhookを使って、シンプルなVonageアプリを構築する方法を紹介しよう。ユーザーがVonageの電話番号に電話をかけると(これが最初のWebhookのトリガーとなる)、ロボットの声で挨拶されるというものだ。ユーザーは自分の気分を入力するよう求められる。ハッピー」なら1、「アンハッピー」なら2、その他好きなオプションを入力する。この時点で、2番目のエンドポイントが入力とともに呼び出され、適切なレスポンスが生成される。
必要なコードとコンフィギュレーションを作成するすべてのステップを説明するが、最終的な結果をご覧になりたい場合は、コードはホスティングされている GitHub
必要条件
以下のように、いくつかの いくつかセットアップやインストールに必要なものがいくつかありますが、私を信じてください。
フリー Azureアカウントで、Azure Functionsを公開できます。
インストール Vonage CLIツールそして この短いブログ記事をお読みください。
これにより
vonageこのコマンドを使うと、Vonage Voice Applicationsを作成したり、バーチャルナンバーを購入したり、この2つをリンクさせたりすることができます。インストール ングロック
コンソールで
ngrokコマンドを実行すると、開発マシンにリクエストがトンネルされ、Vonage が開発サーバにウェブフックを送信できるようになります。インストール Azure Functionsコアツール
これにより、コンソールで
funcこのコマンドを使うと、Azure Functions プロジェクトをブートストラップし、ローカルで実行することができます。インストール Azure CLI.
これで
azコマンドを使えるようになる。これで、Azure内に様々なオブジェクトを作成したり、Azure関数を公開したりできるようになる!
最初の関数を作成する
上記の要件をすべてインストールしたら、コンソールを開いてください。Azureファンクションのビルドを開始するために、いくつかの定型コードを作成します。
まず、Azure Functions Core Toolsコマンドを使って、新しいAzure Functionsプロジェクトを作成しましょう、 func.を実行します。 func initを実行して、空の Azure Functions プロジェクトを作成します:
新しいプロジェクト・ディレクトリにcdして func newを使って、着信コールに応答するための新しいAzure関数を作成する。作成する関数のタイプを聞かれるので、'5' の HTTP trigger を選択する。これは、HTTPリクエストに応答するAzure関数のタイプです。ファンクションの呼び出し名を聞かれたら、次のように入力します。 answer_inboundと入力する。これは、エンドポイントがインバウンドコールに応答するために使用されるからだ。
上の出力から funcがPythonファイル __init__.pyと設定ファイルが作成されていることがわかります、 function.json.
編集する function.jsonを編集し、"authlevel "を "anonymous "に設定する。これでVonageは余計な認証なしで呼び出せるようになる。
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...Pythonの定型関数を実行する。 func hostコマンドを使って実行する:
ブラウザを URL でロードすると http://localhost:7071/api/answer_inbound?name=bobでブラウザをロードすると、"Hello bob!" と表示されるはずです!あなたは最初のAzure Functionを "書きました"!
Azure関数から電話へ
誰かがあなたの番号にダイヤルしたときにVonageが何をすべきかを知るために、あなたの関数にNCCOアクションを出力させたいでしょう。そのためには、関数コードを以下のように置き換える必要があります:
def main(req: func.HttpRequest) -> func.HttpResponse:
return func.HttpResponse(json.dumps([
{
'action': 'talk',
'text': 'Welcome to the mood reporting hotline. Please enter 1 if you are happy, or 2 if you are unhappy.',
'bargeIn': True,
},
{
'action': 'input',
'eventUrl': [ f'https://{req.headers["host"]}/api/mood_feedback' ],
'maxDigits': 1,
'timeOut': 10,
},
]), mimetype='application/json')
上記のコードは、2つのNCCOアクションを含むJSONレスポンスを返す。NCCOアクションとは、Vonageに対する命令で、電話の処理方法を指示するものである。この場合、2つのアクションがある:
この
talkアクションは、発信者にメッセージを読み上げるようVonageに指示します。この
inputアクションはVonageに、ユーザーが数字を入力するよう指示します。eventURL
なぜなら bargeInを trueアクションで talkアクションで inputに設定しているので、アクションが開始される前に発信者が数字を入力すると、Vonageは単にせっかちなだけだと判断し、次の命令を実行する。 input命令を実行する。
もう一度 func host startを再度実行すると http://localhost:7071/api/answer_inbound?name=bobでブラウザーをロードすると、上記のアクションを含むJSONの束が表示されるはずだ。
開発サーバーへのトンネル
まだ開発中ですが、Vonageがあなたの関数にアクセスできるようにしたいでしょう。私の同僚である アーロン・バセットが書いた Ngrok トンネルを使ってローカルの開発サーバーを Vonage API に接続する。.
Ngrokがどのように機能するかはお分かりいただけたと思う。 別のを実行する:
別のコンソールウィンドウで func host startもう一つのコンソールウィンドウで、出力されたNgrok URLをロードし、その後に続く /api/answer_inbound.のように表示されるはずです。 https://r4nd0m.ngrok.io/api/answer_inbound(ただし、r4nd0mではなく、あなた自身のランダムなプレフィックスを付けてください!)。
それがうまくいったら、今度はVonageに開発サーバーとの連絡方法を伝える番だ!
Vonageを開発サーバーに接続する
まだの場合は、インストール後、Vonage CLIにapiキーとシークレットを設定する必要があります。
を実行して新しいVonage Voice Applicationsを作成します。 vonage apps:createを実行し、プロンプトが表示されたら "Enter Your Mood "と名前を付けます。残りのコマンドラインプロンプトに従ってアプリケーションを作成します。
これにより、Vonage API Dashboardに "Enter Your Mood "というアプリが作成されます。このアプリにリンクされた電話番号への着信が検出されると、このアプリは以下のWebhookを呼び出します。 https://r4nd0m.ngrok.io/api/answer_inboundを呼び出し、着信コールの詳細を投稿する。このエンドポイントのAzure Functionは、NCCO Actionsで応答することが期待されている。秘密鍵も保存されている。今は使わないが、"private.key "というファイルに保存されている。
バーチャル番号を購入し、Vonageアプリにリンクする必要があります。そこで、先ほど作成されたアプリケーションID(ここでは「4f33ff5e-dbbc-11e9-8656-6bdabe7b8258」)を控えておく。
バーチャルナンバーをまだ持っていない場合は、購入する。購入するには Vonage APIダッシュボードでも でもVonageのCLIツールを使って番号を検索し、購入することもできます。番号を入手したら、以下のコマンドでアプリとリンクさせる。電話番号は購入したもの、アプリケーションIDは上記で説明したものに置き換える:
あなたの携帯電話で、先ほどリンクした番号に電話をかけてください。
何が起こるか:Voiceが応答し、上記のメッセージが表示されます。携帯電話の番号パッドに番号を入力すると、おそらくビープ音が鳴った後、通話が切れます。それは 2番目ののURLは /api/mood_feedbackはまだ存在しないからだ!
入力処理
この場合は、上記と同様の手順を踏む:
実行する
func newを選択しHTTP triggerを選択し、関数名に "mood_feedback "と入力してください。ファイルを修正する。
function.jsonファイルを修正しauthLevelをanonymous.
次に __init__.pyを開き、関数コードを次のように置き換える:
def main(req: func.HttpRequest) -> func.HttpResponse:
try:
req_body = req.get_json()
return func.HttpResponse(json.dumps([
{
'action': 'talk',
'text': 'Thank you for telling us how you feel.',
},
]), mimetype='application/json')
except ValueError:
return func.HttpResponse(
"Could not parse request body.",
status_code=400
)
ここには、電話から送信されたデータを抽出するためのコードが少し追加されている。 今度は通話中に番号を入力すると、"Thank you for telling us how you feel. "というメッセージが聞こえるはずだ。
レスポンスをダイナミックにする
これがうまくいったら、呼び出しに対する反応がもう少し共感的になるようにしてみよう。関数の上に、以下のグローバル変数を追加する:
RESPONSES = {
"1": "It's great that you're so happy!",
"2": "I'm sorry that you're unhappy.",
}
UNEXPECTED_RESPONSE = "I'm sorry, I don't understand that feedback."さて、返すNCCOの中で、文字列を次のように置き換える。 RESPONSES.get(req_body['dtmf'], UNEXPECTED_RESPONSE).この式はリクエスト(req_body['dtmf'])からDTMFコードを抽出し、関連する応答を RESPONSESで関連する応答を探そうとする。 UNEXPECTED_RESPONSE.あなたの番号に電話して試してみてください!
Azureでファンクションアプリを作成する
あなたがこれまでやってきたことは 素晴らしい- 開発マシンの電源が入っていて、コンソールウィンドウが開いていて func host& ngrok.しかし、それは現実的ではない。そこで今回は、書いたコードをAzure Functionsにデプロイして、Microsoftがホストしてくれる方法を紹介しよう!
Azureのサーバーとやりとりするには、Azure CLIコマンドを使う、 az.
まず、Azureアカウントにログインする必要があります。 az login.ブラウザが起動し、Azureアカウントにログインするよう求められます。まだAzureアカウントにサインアップしていない場合は、今すぐサインアップしてください。
では、以下の3つの azそれぞれのコマンドにコメントをつけているので、何をするのかがわかるだろう。変更する必要があるのは MYVONAGEFUNCTIONSTOREをグローバルにユニークなものに置き換えることだ。実際の名前は重要ではありません - 実行中の関数のデータを保存する場所であり、ユーザーに見られることはありません。また moodfeedbackappをグローバルにユニークなものに変更する必要があります。
関数をAzureに公開する
関数が正常にデプロイされているかどうかは、次のページで確認できます。 https://moodfeedback.azurewebsites.net/api/answer_inbound(にアクセスし、NCCO JSON出力が生成されていることを確認してください。
Vonageアプリのアップデート
Vonageは、誰かがあなたのバーチャル番号に電話したとき、あなたの開発サーバーを呼び出すべきだとまだ考えています!これを修正するには、新しいURLを指すようにVonageアプリを更新してください。次のコマンドを実行し、アプリケーションIDをあなた自身のものに置き換え、"moodfeedbackapp "をあなた自身の機能アプリ名に置き換えてください。
次のステップ
このチュートリアルの目的は、Azure Functionsを使ってVonage Voice API呼び出し用のWebhookハンドラを構築する方法を紹介することでした。この例でできることはそれほど多くはありませんが、Azureストレージやその他のAPIを使えば、もっと面白く実用的な例を構築できるでしょう。
アプリに面白い機能を組み込みたいなら、そうすればいい:
フィードバック結果をVonage SMS API経由でリサーチャーに送信。
音声入力APIを統合し、数値コードの代わりに音声入力を扱う。
各通話者のフィードバックをデータベースに保存し、長期的な傾向を分析する。
その他のリソース
をチェックしてください。 NCCOリファレンスドキュメントを参照してください。
次の方法を学ぶ PythonでAzure Functionを書く
リファレンス Azure Functionsリファレンスは非常に便利だ。
と同様に Azure Python ドキュメント