https://a.storyblok.com/f/270183/122247/aa9799a211/voice-record-call-node.png

Como gravar áudio de chamadas recebidas com Node.js

Publicado em May 17, 2021

Tempo de leitura: 4 minutos

Este é o terceiro tutorial da série “Introdução ao Nexmo e ao Node.js”, que dá continuidade à nossa série “Introdução às SMS API”. Confira os links para os tutoriais anteriores dessas séries no final desta postagem.

No tutorial anterior, você criou um aplicativo de voz e aprendeu a receber uma chamada de conversão de texto em voz usando a Voice API e a biblioteca cliente do Node.js. Neste tutorial, você vai ampliar o aplicativo para gravar uma mensagem do chamador.

Visualizar o código-fonte record-call.js GitHub

Definindo um objeto de controle de chamadas da Nexmo para gravar chamadas recebidas

O tutorial anterior explicou como criar URLs de endpoints de webhook e associá-las a um aplicativo de Voice para receber chamadas recebidas. Neste tutorial, você modificará o NCCO para gravar áudio. Se você ainda não concluiu o tutorial anterior, siga-o primeiro.

Para começar, execute o ngrok:

ngrok http 4002

Você vai usar as URLs de redirecionamento, que têm o seguinte formato https://db95720f.ngrok.io, como seus endpoints temporários de webhook durante o desenvolvimento.

Atualize seu aplicativo Nexmo com as URLs do ngrok. (Você pode pular esta parte se continuar usando o mesmo ngrok ou a URL do seu servidor):

nexmo app:update YOUR_NEXMO_APPLICATION_ID "My Voice App" https://db95720f.ngrok.io/answer https://db95720f.ngrok.io/event

Agora, vamos modificar o código do seu webhook.

Edite o NCCO na rota HTTP GET para processar as solicitações para /answer:

app.get('/answer', function (req, res) {

const ncco = [
{
'action': 'talk',
'voiceName': 'Jennifer',
'text': 'Please leave your name and quick message after the tone, then press #.'
},
{
'action': 'record',
'eventUrl': ['https://db95720f.ngrok.io/record'],
'endOnSilence': '3',
'endOnKey' : '#',
'beepStart': 'true'
},
{
'action': 'talk',
'voiceName': 'Jennifer',
'text': 'Thank you for your message. Ciao!'
}
];
res.json(ncco);
});

Observe o eventUrl no NCCO. É para lá que as informações sobre a gravação são enviadas. Você pode reutilizar a /event que você criou para o aplicativo ou criar outra rota POST:

app.post('/record', (req, res) => {
console.log(req.body);
res.status(204).end();
});

Execute o script e tente ligar para o seu número de telefone da Nexmo. Se tudo estiver funcionando, você deverá ouvir uma saudação da “Jennifer”, seguida de um bipe. Deixe uma mensagem e pressione # no teclado.

Por padrão, o áudio gravado é salvo no formato MP3 e armazenado pela Nexmo por 30 dias.

Quando uma gravação é concluída, o evento retorna as informações, incluindo a URL do arquivo de áudio, recording_uuid:

{ start_time: '2017-01-19T00:34:48Z',
recording_url: 'https://api.nexmo.com/v1/files/486fadc7-2abb-4f56-985e-fb83102acb82',
size: 19181,
recording_uuid: '33e0c756-5405-44d9-b869-197e55e780f0',
end_time: '2017-01-19T00:34:53Z',
conversation_uuid: 'de783420-379c-409e-8c73-1ea1e6b2a38e' }

Em seguida, você irá recuperar a gravação do recording_url.

Como acessar a mensagem do correio de voz

Vamos modificar o /record rotina para baixar o arquivo de áudio assim que a gravação for concluída.

Instale a biblioteca Nexmo para Node.js via npm. Você precisará da versão 1.2.0 da biblioteca para poder usar o save recurso; portanto, atualize se estiver usando uma versão mais antiga.

Inclua o nexmo módulo e, em seguida, inicialize-o com suas credenciais, o ID do aplicativo e a chave privada que você gerou com a ferramenta CLI para tutorial anterior:

const Nexmo = require('nexmo');
const appId = 'c6b78717-db0c-4b8b-9723-ee91400137cf'; // Use your own App ID!
const privateKey = require('fs').readFileSync(__dirname + '/private.key');

const nexmo = new Nexmo({
apiKey: NEXMO_API_KEY,
apiSecret: NEXMO_API_SECRET,
applicationId: appId,
privateKey: privateKey
});

Conforme explicado anteriormente, quando uma mensagem de voz é gravada, o webhook especificado é acionado e retorna a informação com o recording_url. Você pode baixar o arquivo de áudio MP3 a partir dessa URL. Observe que o ID do arquivo gravado é não o mesmo que o de outros uuid!

Vamos modificar a /record rota e usar o files.save método para baixar o arquivo para o seu disco:

app.post('/record', (req, res) => {
let audioURL = req.body.recording_url;
let audioFile = audioURL.split('/').pop() + '.mp3';

nexmo.files.save(audioURL, audioFile, (err, response) => {
if(response) {console.log('The audio is downloaded successfully!');}
});
res.status(204).end();
});

Execute o script e ligue para o seu número de telefone da Nexmo para gravar sua mensagem! Após a ligação, você verá um arquivo de áudio baixado no mesmo diretório! Uhuuu!

Nexmo Voice API - audio file download

Saiba mais

Aqui estão alguns recursos que você pode usar para se aprofundar nas APIs da Nexmo e no Node.js.

Referências e ferramentas da API

Guia de Introdução ao Nexmo para Node.js

Compartilhar:

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

Tomomi é uma ex-integrante da equipe da Vonage