
シェア:
マークは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
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.
This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.
必要条件
以下のように、いくつかの いくつかセットアップやインストールに必要なものがいくつかありますが、私を信じてください。
フリー 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 ドキュメント
