https://a.storyblok.com/f/270183/35661/86aa47e474/blog_asp-net_voicemail_1200x600.png

ASP.NET Coreでボイスメールアプリを構築する方法

最終更新日 May 5, 2021

所要時間: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をインストールして設定します:

npm install nexmo-cli -g nexmo setup API_KEY API_SECRET

これを実行すると、Nexmo CLIがセットアップされ、実行できるようになります。

ラン・ングロック

...私はすべてを投げるつもりだ localhost:5000.ngrokを実行することで、公にアクセスできるようになる。 localhost:5000.

ngrok http --host-header=localhost:5000 5000

ngrokが実行されているURLをメモしておこう。私の場合は http://7ca005ad1287.ngrok.io.このURLは、今後私のウェブフックのベースURLになる。

Vonageアプリケーションの作成

Vonageアプリケーションは、NumbersとWebhooksを簡単にリンクさせることができます。アプリケーションは Vonage ダッシュボードで作成することもできますし、CLIを使って今すぐ作成することもできます。

nexmo app:create "AspNetTestApp" http://7ca005ad1287.ngrok.io/webhooks/answer http://7ca005ad1287.ngrok.io/webhooks/events

これらのコマンドはVonageアプリケーションを作成します。そして、そのアプリケーションに着信するすべてのコールをアンサーURLにリンクします: http://7ca005ad1287.ngrok.io/webhooks/answerにルーティングし、そのアプリケーションで発生するすべてのコールイベントを http://7ca005ad1287.ngrok.io/webhooks/events.このコマンドは2つのことを出力します:

  1. あなたのアプリケーションID。アプリケーション ID は Vonageダッシュボード

  2. アプリケーションの秘密鍵。これをファイルに保存してください。 private.key

Vonage番号をアプリケーションにリンクする

アカウントを作成すると、Vonage番号が割り当てられます。ダッシュボードの ダッシュボードのNumbersセクションで確認できます。または、コンソールで nexmo number:listを実行することもできます。Vonage番号とアプリケーションIDを入力して、以下を実行してください:

nexmo link:app VONAGE_NUMBER APPLICATION_ID

これで、通話はあなたのURLにうまくルーティングされるようになる。

プロジェクトの作成

プロジェクトを作成する:

  • ビジュアルスタジオを開く

  • 新規プロジェクトの作成」をクリック

  • ASP.NET Core Webアプリケーションを選択

  • 次へ」をクリック

  • プロジェクト名 VonageVoicemail

  • 作成をクリック

  • APIを選択

  • 作成をクリック

依存関係のインストール

唯一の依存関係は VonageNuGetパッケージだ。お好きな方法でパッケージを入手してください。私の場合は VonageVoicemail.csprojディレクトリに移動して実行します:

dotnet add package Vonage

コントローラーの作成

怠け者の気分なら、あらかじめ生成されている 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を作成します:

  1. これはユーザーに話しかけ、あなたが現在体調不良であることを伝える。

  2. 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種類ある。

  1. APP_IDとPRIVATE_KEY_PATHのコンフィギュレーション・キーをappsettings.jsonファイルに追加する。

  2. launchsettings.jsonのコンフィギュレーション設定を更新し、kestrel/IIS expressが以下をリッスンするようにします。 http://localhost:5000

設定キーの追加

開く appsettings.jsonキーを追加する APP_IDPRIVATE_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.

シェア:

https://a.storyblok.com/f/270183/384x384/73d57fd8eb/stevelorello.png
Steve Lorelloヴォネージの卒業生

スティーブは、かつてVonageチームの一員でした。彼はVonageで.NET開発者アドボケートを務め、フルスタックかつ多言語対応のソフトウェアエンジニアであり、AI/MLの専門家でもありました。