
Compartilhar:
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.
Como reproduzir áudio para quem está ligando no ASP.NET Core
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 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 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 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 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:
O primeiro nos permitirá criar um fluxo NCCO.
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 VonageDentro 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:
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.