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

Como reproduzir áudio para quem está ligando no ASP.NET Core

Publicado em May 12, 2021

Tempo de leitura: 4 minutos

Bem-vindo ao segundo tutorial da nossa série série “Como usar Voice APIs com ASP.NET” . Para conferir outros tutoriais, acesse a seção “Saiba mais” no final desta postagem.

No post anterior, aprendemos como fazer uma chamada com conversão de texto em fala em um aplicativo web ASP.NET. Neste post, vamos aprender a reproduzir áudio para quem está ligando. Parece divertido, né? Mas não é só isso. Também vamos descobrir como criar dinamicamente Objetos de Controle de Chamadas da Vonage (NCCOs) no código e usá-los em nosso aplicativo. Bônus: vamos usar um projeto ASP.NET Core para esta demonstração.

Vamos começar!

are you ready gifare you ready gif

Pré-requisitos para usar a Voice API da Vonage com o ASP.NET

  • Visual Studio 2017

  • Um projeto criado para esta série de tutoriais, que você pode encontrar no Github

  • Opcional: O CLI da Vonage

Configuração

Como você pode ou não ter lido o primeiro tutorial desta série — o que, aliás, você deveria fazer —, vamos ver o que precisamos antes de mergulharmos no código.

Para poder usar da Voice API da Vonage, você precisará de um aplicativo de voz para armazenar dados de configuração e gerar um par de chaves pública/privada.

Como fazer isso? Não se preocupe, eu te ajudo. A Voice API da Vonage com ASP.NET: Antes de começar apresenta um ótimo resumo de todas as etapas de configuração necessárias.

No seu projeto, no arquivo appsettings.json, certifique-se de inicializar o Vonage com suas credenciais de API, bem como com o ID do aplicativo e a chave privada que você acabou de criar.

Agora, vamos escrever um pouco de código!

wonder woman gifwonder woman gif

Criação de um fluxo NCCO

Conforme mencionado no início desta postagem, quando o usuário atender a chamada, queremos reproduzir um arquivo de áudio para ele. O arquivo NCCO disponível em nosso answer_url contém essas informações. Para executar essa ação, o NCCO deve ser válido e conter a ação correta. A ação necessária para enviar o arquivo de áudio para uma chamada ou conversa é stream.

Para esta demonstração, precisaremos apenas especificar o `streamUrl`, que é a matriz que contém o arquivo de áudio. Este deve estar no formato mp3 ou wav. Nós fornecemos um exemplo de stream NCCO; você pode usá-lo para testar esta demonstração. Mas, em situações reais, talvez seja melhor criar o seu próprio.

Na pasta NexmoVoiceASPNetCoreQuickstarts, adicione uma nova pasta chamada Helpers e, em seguida, adicione uma nova classe, NCCOHelpers.cs, a essa pasta. Criaremos todos os NCCOs de que precisamos nessa pasta. Para simplificar, salvaremos nossos arquivos NCCO diretamente na pasta wwwroot.

ncco helpersncco helpers

Conforme explicado nas etapas de configuração, adicionar a seguinte linha ao método Configure no arquivo Startup.cs nos permitirá disponibilizar o arquivo JSON do NCCO.

app.UseStaticFiles();

Usando ferramentas como o ngrok, ela ficará acessível pela API da Vonage.

ngrok statusngrok status

No arquivo NCCOHelpers.cs, vamos adicionar um método chamado CreateStreamNCCO, no qual criaremos dinamicamente um JObject que representa o fluxo NCCO.

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);
}

Em seguida, salvamos esse objeto como um arquivo JSON na pasta wwwroot.

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());
     }
}

Mais adiante, utilizaremos o CreateStreamNCCO para permitir que os usuários criem seu próprio stream NCCO pelo site.

Reprodução de áudio durante a chamada

Na pasta NexmoVoiceAspNetCoreQuickstarts, criamos um controlador chamado VoiceController.cs no qual vamos criar um método de ação chamado PlayAudioToCaller.

Acima do método, adicione um HttpGetAttribute para permitir que o usuário acesse a visualização correspondente.

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

Na pasta “Voice Views”, crie uma nova visualização PlayAudioToCaller.cshtml. Dentro essa visualização, vamos adicionar dois formulários:

  1. O primeiro nos permitirá criar um fluxo NCCO.

  2. O segundo será usado para fazer a ligação.

De volta ao VoiceController. Certifique-se de que a seguinte instrução `using` esteja no início do arquivo.

using Vonage

Dentro do construtor, passaremos o ambiente de hospedagem, que será usado para especificar o caminho raiz onde salvaremos o arquivo NCCO. Também instanciaremos a classe de auxiliares do NCCO.

private readonly IHostingEnvironment _hostingEnvironment;
private NCCOHelpers _nccohelper;

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

Adicione um método de ação chamado CreateStreamNCCO com os seguintes parâmetros:

  • string[] streamUrl: uma matriz contendo uma única URL para o arquivo de áudio a ser transmitido.

  • int level=0: o nível de áudio. O valor padrão é zero.

  • A variável `bool bargeIN` tem o valor padrão `false`.

  • int loop = 1, para que o áudio seja repetido apenas uma vez. Dentro desse método, chamaremos o método CreateStreamNCCO da classe de auxiliares NCCO.

[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");
}

Adicione outro método de ação chamado PlayAudioToCaller com um parâmetro do tipo string: to. Dentro desse método, você fará uma chamada usando o parâmetro como to. O from é o seu número virtual da Nexmo (obtido do arquivo appsettings.json), e o answer_url é o NCCO do stream, seja o exemplo de NCCO da comunidade da Nexmo mencionado acima, seja o NCCO que você criou e tornou acessível via ngrok.

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");
}

Agora, vamos executar o aplicativo e fazer uma ligação.

Quando a operação é bem-sucedida, ela recupera o NCCO do seu webhook, o áudio será reproduzido e, em seguida, a chamada será encerrada.

Saiba mais

Referências e ferramentas de API

Guia de Introdução ao Vonage para ASP.NET

Compartilhar:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Rabeb OthmaniEx-funcionários da Vonage

Rabeb era Developer Advocate na Nexmo, com foco em APIs de comunicação em nuvem e em ajudar desenvolvedores a terem a melhor experiência possível ao criarem seus aplicativos. Além de ganhar a vida escrevendo código, Rabeb defende a inclusão de mais mulheres e minorias no setor de tecnologia, daí seu envolvimento com a Women Who Code e com diversas comunidades tecnológicas. Ela lidera a rede Women Who Code em Bristol.