
Como gravar áudio de chamadas recebidas com Node.js
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:
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):
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!

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