https://a.storyblok.com/f/270183/104244/18949d762e/play-audio-asp-net-core.png

ASP.NET Coreで発信者に音声を再生する方法

最終更新日 May 12, 2021

所要時間:1 分

チュートリアルASP.NETでVoice APIを使う方法 シリーズにようこそ。他のチュートリアルをご覧になりたい方はもっと学ぶ セクションをご覧ください。

前回の記事では、次の方法を学びました。 ASP.NETウェブアプリケーションで音声合成電話をかける.この投稿では、発信者に音声を再生する方法を学びます。楽しそうでしょう?でも、それだけではありません。コード内でVonage Call Control Objects (NCCO)を動的に作成し、アプリ内で使用する方法も紹介します。おまけ:このデモではASP.NET Coreプロジェクトを使用します。

始めよう!

are you ready gifare you ready gif

ASP.NETでVonage Voice APIを使用するための前提条件

  • ビジュアルスタジオ2017

  • このチュートリアル・シリーズのためにセットアップされたプロジェクトは、以下のサイトにあります。 Github

  • オプションです: Vonage CLI

構成

このシリーズの最初のチュートリアルを読んだかもしれないし、読んでいないかもしれないので、コードに入る前に必要なことを説明しよう。

使用するには Vonage Voice APIを使用するためにはを使用するには、設定データを保存し、公開鍵と秘密鍵のペアを生成する音声アプリケーションが必要です。

どうすればいいのか?ご心配なく。その Vonage Voice API with ASP.NETです:始める前にの投稿に、必要な設定手順の概要があります。

プロジェクトのappsettings.jsonファイルで、作成したばかりのApp IDと秘密鍵だけでなく、API認証情報でVonageを初期化してください。

では、コードを書いてみよう!

wonder woman gifwonder woman gif

ストリームNCCOの作成

この投稿の冒頭で述べたように、ユーザーが電話に出ると、音声ファイルを再生したいと思います。answer_urlで利用可能なNCCOファイルには、この情報が含まれています。このアクションを実行するには、NCCOが有効で、正しいアクションを持っている必要があります。 通話または会話にオーディオファイルを送信するために必要なアクションは、ストリームです。.

このデモでは、streamUrlを指定するだけでよい。streamUrlは、オーディオ・ファイルを含む配列である。後者はmp3かwavでなければなりません。サンプルの ストリームNCCOを提供しているので、それを使ってこのデモを試すことができる。しかし、実際のシナリオでは、自分で作成した方がよいでしょう。

NexmoVoiceASPNetCoreQuickstarts の下に Helpers という新しいフォルダを追加し、このフォルダに新しいクラス NCCOHelpers.cs を追加します。このフォルダに必要な NCCO をすべて作成します。簡単にするために、NCCOファイルを直接wwwrootの下に保存します。

ncco helpersncco helpers

設定ステップで説明したように、Startup.csのConfigureメソッドに以下の行を追加することで、NCCO jsonファイルを提供できるようになる。

app.UseStaticFiles();

のようなツールを使えば ngrok を使うと、Vonage API でアクセスできるようになります。.

ngrok statusngrok status

NCCOHelpers.cs内にCreateStreamNCCOというメソッドを追加し、ストリームNCCOを表すJObjectを動的に作成します。

public void CreateStreamNCCO(string rootpath, string[] streamUrl, int level, bool bargeIn, int loopTimes)
{
   dynamic StreamNCCO = new JObject();
   StreamNCCO.action = "stream";
   StreamNCCO.streamUrl = new JArray { streamUrl };
   StreamNCCO.level = level;
   StreamNCCO.bargeIn = bargeIn;
   StreamNCCO.loop = loopTimes;

   SaveFile(rootpath, "StreamNCCO.json", StreamNCCO);
}

そして、そのオブジェクトをwwwrootの下にJSONファイルとして保存する。

private void SaveFile(string rootpath, string filename, dynamic StreamNCCO)
{
   var pathToFile = Path.Combine(rootpath, filename);
   using (StreamWriter s = File.CreateText(pathToFile))
     {
        s.Write(StreamNCCO.ToString());
     }
}

後日、CreateStreamNCCOを使って、ユーザーがウェブサイト経由で自分のストリームNCCOを作成できるようにする予定です。

通話中のオーディオ再生

NexmoVoiceAspNetCoreQuickstartsの下に というコントローラを作成しました。を作成します。 というアクションメソッドを作成します。.

メソッドの上にHttpGetAttributeを追加し、ユーザーが対応するビューに移動できるようにします。

[HttpGet]
public ActionResult PlayAudioToCaller()
{
  return View();
}

Voice Views フォルダの下に、新しいビューを作成します。 PlayAudioToCaller.cshtml.このビューで このビュー内に、2つのフォームを追加します:

  1. 1つ目は、ストリームNCCOを作ることだ。

  2. もうひとつは電話をかけるときに使う。

VoiceControllerに戻る。ファイルの先頭に次の `using` ステートメントがあることを確認してください。

using Vonage

コンストラクタの内部では、NCCOファイルを保存するルート・パスを指定するために使われるホスティング環境を渡す。NCCOヘルパー・クラスもインスタンス化する。

private readonly IHostingEnvironment _hostingEnvironment;
private NCCOHelpers _nccohelper;

public VoiceController(IHostingEnvironment hostingEnvironment)
{
  _hostingEnvironment = hostingEnvironment;
  _nccohelper = new NCCOHelpers(); 
}

を追加する。 アクション・メソッドを追加します。という名前のアクション・メソッドを追加します:

  • string[] streamUrl : ストリーミングするオーディオファイルのURLを1つ含む配列。

  • int level=0 : オーディオ・レベル。デフォルトは0。

  • bool bargeIN デフォルトは false。

  • int loop =1なので、音声は1回だけ繰り返される。このメソッドの中で、NCCOヘルパー・クラスのCreateStreamNCCOメソッドを呼び出します。

[HttpPost]
public ActionResult CreateStreamNCCO(string\[] streamUrl, int level=0, bool bargeIN = false, int loop =1)
{
  _nccohelper.CreateStreamNCCO(_hostingEnvironment.WebRootPath, streamUrl, level, bargeIN,    loop); 
   ViewData\["NCCOButtonText"] = "NCCO Created";
  return View("PlayAudioToCaller");
}

別の アクションメソッドを追加する。という名前のアクションメソッドを追加します: to.このメソッド内で、パラメータを to..番号 fromnumber はあなたの Nexmo バーチャル番号(appsettings.json から取得)、answer_url はストリーム NCCO で、前述の Nexmo のコミュニティ NCCO の例を使うか、あなたが作成して ngrok 経由で到達可能にした NCCO を使います。

public ActionResult PlayAudioToCaller(string to)
{
   var NEXMO_FROM_NUMBER = Configuration.Instance.Settings\["appsettings:NEXMO_FROM_NUMBER"];
   var NEXMO_TO_NUMBER = to;
   var NEXMO_CALL_ANSWER_URL = "https://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/first_call_speech.json";

   var results = Call.Do(new Call.CallCommand
            {
                to = new\[]
                {
                    new Call.Endpoint {
                        type = "phone",
                        number = NEXMO_TO_NUMBER
                    }
                },
                from = new Call.Endpoint
                {
                    type = "phone",
                    number = NEXMO_FROM_NUMBER
                },
                answer_url = new\[]
                {
                    NEXMO_CALL_ANSWER_URL
                }
            });
            
     return RedirectToAction("Index", "Home");
}

では、アプリを起動して電話をかけてみよう。

成功すると NCCOを取得し、音声が再生され、通話が終了します。

さらに詳しく

APIリファレンスとツール

ASP.NET用Vonageスタートガイド

シェア:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Rabeb Othmaniヴォネージの卒業生

RabebはNexmoのデベロッパー・アドボケイトとして、クラウド通信APIに焦点を当て、開発者がアプリを構築する際に可能な限り最高のエクスペリエンスを得られるよう支援していた。生活のためにコードを書く以外に、ラベブはより多くの女性やマイノリティを技術に取り込むことを提唱しており、Women Who Codeやさまざまな技術コミュニティに参加している。彼女はブリストルのWomen Who Code Networkを率いている。