
シェア:
スティーブは、かつてVonageチームの一員でした。彼はVonageで.NET開発者アドボケートを務め、フルスタックかつ多言語対応のソフトウェアエンジニアであり、AI/MLの専門家でもありました。
ASP.NET Coreで電話の受話器入力(DTMF)を処理する方法
所要時間:6 分
対話型音声応答(IVR)システムの基本的な構成要素は、入力の処理です。公衆交換電話網(PSTN)からプログラムで入力できるものは、一般的に2種類あり、Vonageではどちらもサポートしています:
デュアル・トーン・マルチ周波数 (DTMF)-ユーザーの携帯電話から収集された入力イベントです。例:「セールスは1を、カスタマーサービスは2を押してください。
自動音声認識(ASR)-ユーザーの声を入力とする音声認識イベントです。
このチュートリアルでは Voice API を使用します。を使用して、ASP.NET コアアプリケーションに前者 (DTMF) をすばやくスナップする方法を学びます。PSTN 通話でユーザーから DTMF を収集するには、次のようにします:
設定 Vonage API Accountの設定アカウントをお持ちでない場合
CLIを使用したVonageアプリケーションの作成 CLIを使った.
C#のコードを書いてください。
アプリをウェブに接続する。
コードへジャンプ
このチュートリアルをスキップして動作するサンプルを取り込みたい場合は、このサンプルを GitHub.
前提条件
Vonage CLI。お持ちでない場合は、次の方法でインストールできます。
npm install @vonage/cli -g最新の .NET Core SDK
Visual StudioまたはVisual Studio Code。私はVisual Studio 2019を使うつもりだ。
ngrokをテストする。必要なのは無料版だけです。
Vonage API アカウント
このチュートリアルを完了するには Vonage APIアカウント.まだお持ちでない方は 今すぐサインアップをクリックし、無料のクレジットを使用して構築を開始することができます。アカウントを取得すると、APIキーとAPIシークレットが Vonage APIダッシュボード
ングロックをスピンアップ
ngrok を使用して、ローカルで実行中の ASP.NET Core アプリケーションをインターネットに公開します。ngrok をインストールしたら、コンソールでコマンド ngrok http 5000を実行するだけだ。以下のようなものが表示される:
ngrok
注:このチュートリアルでは Kestralを使用しています。代わりに IIS Express を使用したい場合は、こちらの 説明を参照してください。
ここで注意しなければならないのは、転送先URLである。 http://34332d9dca30.ngrok.io.Vonage番号に電話がかかってくると、VonageはアプリケーションにWebHookと呼ばれるものを送信します。これは単なるHTTP GETリクエストで、コール・コントロール・オブジェクト(NCCO)と呼ばれるものを要求します。アプリケーションは /webhooks/answerでリッスンするので、必要なURLはすべて http://34332d9dca30.ngrok.io/webhooks/answer.
CLIの設定
Vonage CLIをまだセットアップしていない場合は、次のコマンドを実行してください。 vonage config:set <api_key> <api_secret>ここでAPIキーとシークレットは、アカウントの設定ページにある アカウントの設定ページ
背番号の購入とアプリケーションの作成
CLIがセットアップされたので、番号を購入し、Vonageアプリケーションを作成し、そのアプリケーションに番号をリンクします。
番号を買う
番号を購入するには、次のコマンドを使用します(あなたの国IDを US)
を入力する。 confirm購入した番号が出力されます。
アプリケーションの作成
次にアプリケーションを作成します。create applicationコマンドは2つのURLを取ります。answer URLはVonageが着信コールを送る先の番号で、event URLはVonageがあなたの番号から発生したイベントを送るURLです。忘れずに 34332d9dca30をngrok URLのランダムハッシュに置き換えることを忘れないでください:
この操作により、アプリケーションIDと秘密鍵が返される。これら両方の値を保存してください。このチュートリアルではアプリIDのみを使用しますが、秘密鍵はアプリケーションリクエストを認証するために使用します。
アプリケーションをリンクする
次に、新しく購入した番号をアプリケーションにリンクさせる必要があります。番号をリンクすることで、Vonageはその番号で受信したすべてのコールをアプリケーションのWebhook URLに送信するようになります。これを行うには、アプリの作成リクエストで受け取ったアプリケーションID(次のようになります)が必要です。 e7a25242-77a1-42cd-a32e-09febcb375f4そして、次のようなコマンドを実行します:
アプリを作る
あとはアプリを作るだけだ!
アプリの作成
コンソールで、通常コードを置くディレクトリに移動する。これから Web APIASP.NET Coreアプリケーションを作成します。ここでは httpsを設定しない。以下のdotnet CLIコマンドを使えば、簡単に雛形が作れます:
Vonage SDKをインストールする
cdコマンドを実行して、自分自身を VonageDtmfプロジェクトフォルダに移動し、次のコマンドを実行して Vonage Server SDKをプロジェクトに追加します。
ヴォイス・コントローラーの作成
作成されたディレクトリに移動し、お好きなIDEでcsprojファイルを開いてください。その中の Controllersという新しい空のAPI Controllerを追加します。 VoiceController.を追加します。 VoiceControllerという新しい空の API Controller を追加します。 System.Threading.Tasks, Vonage.Utility, Vonage.Voice.EventWebhooksと Vonage.Voice.Nccos.その後、コントローラは次のようになる。
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Vonage.Utility;
using Vonage.Voice.EventWebhooks;
using Vonage.Voice.Nccos;
namespace VonageDtmf.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class VoiceController : ControllerBase
{
}
} 回答を処理する
これから /webhooks/answer.VonageはサーバーからNCCOを取得するので、このルートはGETリクエストになる。このメソッドは、2つのアクション(通話の指示)を持つNCCOを構築する。アクション1はトークアクションで、ユーザーに桁を入力するように指示する。次に、2番目のアクションはMultiInputアクションである。このアクションは、ユーザーから入力を収集する。このアクションで、DTMFおよび/または音声入力を収集するかどうかを指定できます。アクションに DtmfSettingsオブジェクトをアクションに追加し、最大桁数を 1.のサーバーのベースURLとなるイベントURLを渡します。 /webhooks/dtmf(最後に、これらのアクションをNCCOに変換し、そのアクションからのJSONをVonageに返します。
[Route("/webhooks/answer")]
[HttpGet]
public ActionResult Answer()
{
var responseUrl = $"{Request.Scheme}://{Request.Host}/webhooks/dtmf";
var talkAction = new TalkAction
{
Text = "Hello please enter a digit.",
BargeIn = "true"
};
var inputAction = new MultiInputAction
{
Dtmf = new DtmfSettings { MaxDigits = 1 },
EventUrl = new[] { responseUrl },
EventMethod = "POST"
};
var ncco = new Ncco(talkAction, inputAction);
return Ok(ncco.ToString());
} DTMF入力の処理
ユーザーが携帯電話で数字を入力すると、私たちのアプリはVonageからユーザー入力数字を含む別のウェブフックを受け取ります。そのリクエストから MultiInput構造を取り出します。次に、その構造体内の Dtmfオブジェクトに埋め込まれた数字を使用して、新しいトークアクションを作成し、ユーザーに入力内容を伝えます。
[Route("/webhooks/dtmf")]
[HttpPost]
public async Task<ActionResult> Dtmf()
{
var input = await WebhookParser.ParseWebhookAsync<MultiInput>
(Request.Body, Request.ContentType);
var talkAction = new TalkAction
{
Text = $"Thank you for inputting: {input.Dtmf.Digits}"
};
var ncco = new Ncco(talkAction);
return Ok(ncco.ToString());
} アプリのテスト
あとはアプリケーションをテストするだけだ。アプリケーションを実行するには、以下のコマンドを使用する:
注:IIS Expressで実行することを選択した場合は、次の記事を必ずお読みください。 ngrokでIIS Expressを使用する.回答方法において、Request Host ではなく、x-original-host を使用してホスト名を形成していることを確認してください。
これでアプリケーションは実行され、Vonage番号にダイヤルすることができます!ユーザーからのDTMF入力を受信できます。
次はどうする?
ユーザーからのDTMF入力を管理し、PSTN回線を介して応答することで、音声とのあらゆる種類の強力な統合を構築することができます。当社の 対話型音声応答(IVR)ガイド.
また、音声と.NETのクールな統合についてお話ししたことがありますので、こちらもご覧ください:
リソース
このブログ記事で作成したプロジェクトのコピーは、次の場所にあります。 GitHub.