
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でも使えます。セットアップと実行の手順が若干異なるだけかもしれません。
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.
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.
