
シェア:
スティーブは、かつてVonageチームの一員でした。彼はVonageで.NET開発者アドボケートを務め、フルスタックかつ多言語対応のソフトウェアエンジニアであり、AI/MLの専門家でもありました。
ASP.NET Coreでボイスメールアプリを構築する方法
所要時間:5 分
Vonage Voice APIを使えば、非常にパワフルで柔軟なコンタクトセンター・ソリューションを構築できます。しかし、電話に出る人がいない場合はどうなるのだろう?まあ、単に電話を鳴らすか、後でかけ直すようにメッセージを再生すればいいのだろう。私を含め、おそらくほとんどの人がすることは、ボイスメールの形で顧客のメッセージを受け取ることだろう。しかし Vonage Voice APIとと私たちの .NET SDKを使えば、これは ASP.NET Core!
概要
Vonage Voice API を使って通話を録音するには複数の方法があります。このチュートリアルでは、アンサーウェブフックを使用します。アンサーウェブフックは、Vonage に通話を録音するように指示するアクションを含む Nexmo Call Control Object(NCCO)を返し、通話が終了したときに録音した URL をサーバーにポストバックします。Webhookとは、Vonageが通話を受けたときに指示を出す、一般に利用可能なHTTPエンドポイントのことです。
コードへジャンプ
このチュートリアルを飛ばしてコードだけを見たい場合は、このチュートリアルのすべてのコードを GitHub.
前提条件
これを ngrok.その指示に従ってセットアップしてください。
必要なのは npmが必要だ。
最新の.NET Core SDKが必要だ。このチュートリアルではバージョン3.1を使っている。
このチュートリアルではVisual Studioを使用します。もちろん、Visual Studio CodeやVisual Studio for Macでも使えます。セットアップと実行の手順が若干異なるだけかもしれません。
Nexmo CLIのセットアップ
npmがインストールされたので、Nexmo CLIをインストールして設定します:
これを実行すると、Nexmo CLIがセットアップされ、実行できるようになります。
ラン・ングロック
...私はすべてを投げるつもりだ localhost:5000.ngrokを実行することで、公にアクセスできるようになる。 localhost:5000.
ngrokが実行されているURLをメモしておこう。私の場合は http://7ca005ad1287.ngrok.io.このURLは、今後私のウェブフックのベースURLになる。
Vonageアプリケーションの作成
Vonageアプリケーションは、NumbersとWebhooksを簡単にリンクさせることができます。アプリケーションは Vonage ダッシュボードで作成することもできますし、CLIを使って今すぐ作成することもできます。
これらのコマンドはVonageアプリケーションを作成します。そして、そのアプリケーションに着信するすべてのコールをアンサーURLにリンクします: http://7ca005ad1287.ngrok.io/webhooks/answerにルーティングし、そのアプリケーションで発生するすべてのコールイベントを http://7ca005ad1287.ngrok.io/webhooks/events.このコマンドは2つのことを出力します:
あなたのアプリケーションID。アプリケーション ID は Vonageダッシュボード
アプリケーションの秘密鍵。これをファイルに保存してください。
private.key
Vonage番号をアプリケーションにリンクする
アカウントを作成すると、Vonage番号が割り当てられます。ダッシュボードの ダッシュボードのNumbersセクションで確認できます。または、コンソールで nexmo number:listを実行することもできます。Vonage番号とアプリケーションIDを入力して、以下を実行してください:
これで、通話はあなたのURLにうまくルーティングされるようになる。
プロジェクトの作成
プロジェクトを作成する:
ビジュアルスタジオを開く
新規プロジェクトの作成」をクリック
ASP.NET Core Webアプリケーションを選択
次へ」をクリック
プロジェクト名 VonageVoicemail
作成をクリック
APIを選択
作成をクリック
依存関係のインストール
唯一の依存関係は VonageNuGetパッケージだ。お好きな方法でパッケージを入手してください。私の場合は VonageVoicemail.csprojディレクトリに移動して実行します:
コントローラーの作成
怠け者の気分なら、あらかじめ生成されている WeatherForecastControllerを利用することもできる。しかし、ここでは新しいコントローラーを作成することにします。 Controllersフォルダを右クリック -> Add -> Controller -> Select API Controller - Empty-> をクリックし、追加をクリックします。 VoiceController.
これらの手順で、空のAPIコントローラを作成します。
依存性インジェクトの設定
そのためには、アプリの設定にアクセスする必要があります。VoiceController で IConfiguration オブジェクトを宣言し、コントローラのコンストラクタに IConfiguration をインジェクトします。
private readonly IConfiguration _config;
public VoiceController(IConfiguration config)
{
_config = config;
} アンサー・ルートの追加
APIコントローラができたので、アンサールートを追加しましょう。このルートの最後に Answerメソッドを追加して、2つのアクションを持つNCCOを作成します:
これはユーザーに話しかけ、あなたが現在体調不良であることを伝える。
3秒間の無音の後に終了し、録音を開始する前にビープ音を鳴らし、通話終了時に録音情報を含むPOSTリクエストを引き出す録音アクション。
[HttpGet]
[Route("webhooks/answer")]
public async Task<string> Answer()
{
var host = Request.Host.ToString();
//remove the next line if using ngrok without --host-header option
host = Request.Headers["X-Original-Host"];
var sitebase = $"{Request.Scheme}://{host}";
var talkAction = new TalkAction
{
Text = "Hello, you have reached Steve's number," +
" he cannot come to the phone right now. " +
"Please leave a message after the tone.",
VoiceName = "Joey"
};
var recordAction = new RecordAction
{
EndOnSilence = "3",
BeepStart = "true",
EventUrl = new[] { $"{sitebase}/webhooks/recording" },
EventMethod = "POST"
};
var ncco = new Ncco(talkAction, recordAction);
return ncco.ToString();
}重要:
host = Request.Headers["X-Original-Host"];オプションでngrokを使用する場合、適切なコールバックURLを取得することができます。-host-headerオプションを使うときに適切なコールバックURLを取得できます。使わない場合は削除してください。
アフレコ・ルートの追加
通話を録音した後、Vonageはお客様からいただいたメールアドレスに返信します。 EventUrlに返信します。そのPOSTリクエストから、録音URLを抽出します。次に、認証情報からVoiceクライアントを作成し、コンフィギュレーションに保存します。ボイスクライアントで録音を取得し、ディスク上のmp3ファイルに保存します。
[HttpPost]
[Route("webhooks/recording")]
public IActionResult Recording()
{
Record record;
var appId = _config["APP_ID"];
var privateKeyPath = _config["PRIVATE_KEY_PATH"];
var credentials = Credentials.FromAppIdAndPrivateKeyPath(appId, privateKeyPath);
var voiceClient = new VoiceClient(credentials);
using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
{
record = JsonConvert.DeserializeObject<Record>(reader.ReadToEndAsync().Result);
var recording = voiceClient.GetRecording(record.RecordingUrl);
System.IO.File.WriteAllBytes("your_recording.mp3", recording.ResultStream);
}
Console.WriteLine($"Record event received on webhook - URL: {record?.RecordingUrl}");
return StatusCode(204);
}これで、必要なC#コードは全部です。次に、アプリを設定しましょう!
アプリの設定
コンフィギュレーションには2種類ある。
APP_IDとPRIVATE_KEY_PATHのコンフィギュレーション・キーをappsettings.jsonファイルに追加する。
launchsettings.jsonのコンフィギュレーション設定を更新し、kestrel/IIS expressが以下をリッスンするようにします。
http://localhost:5000
設定キーの追加
開く appsettings.jsonキーを追加する APP_IDと PRIVATE_KEY_PATHを追加する。先ほどCLIで生成したアプリケーションIDと秘密鍵を利用する。JSONのキーは以下のようになる:
"APP_ID": "7h15-w111-83-y0u2-4pp-1d",
"PRIVATE_KEY_PATH": "C:\\path\\to\\your\\private.key" launchSettings.jsonを更新する
ここで、起動設定ファイルを更新して、IIS Express または Kestrel が、次の場所でリッスンするようにする必要があります。 http://localhost:5000.オープン properties/launchSettings.jsonIIS Express を使用している場合は、iisSettings オブジェクトのアプリケーション URL を http://localhost:5000に変更し、SSL を無効にするために sslPort を 0 に設定します。Kestrel を使用している場合は https://localhost:5001エンドポイントを削除して http://localhost:5000エンドポイントを削除します。
テスト
アプリを実行する前に必要なことは以上だ。Visual StudioからF5キーを押してアプリを実行するか、コマンドラインから dotnet run.Vonage API番号に電話をかけると、発信メッセージが再生され、ビープ音の後に発信者が録音され、通話が終わると通話録音がディスクに保存されます。
リソース
このチュートリアルのコードは GitHub.