https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-record-audio-from-phone-call-node-js-dr/voice-record-call-node.png

Cómo grabar audio de llamadas entrantes con Node.js

Publicado el May 17, 2021

Tiempo de lectura: 4 minutos

Este es el tercer tutorial de la serie "Primeros pasos con Nexmo y Node.js", que siguió a nuestra serie Primeros pasos sobre SMS API. Ver enlaces a tutoriales anteriores en estas series en la parte inferior del post.

En el tutorial anterior, creaste una aplicación de voz y aprendiste a recibir una llamada de texto a voz utilizando la Voice API de Nexmo y la librería cliente de Node.js. En este tutorial, extenderás la aplicación para grabar un mensaje de una persona que llama.

Ver el código fuente grabar-llamada.js GitHub

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Definición de un objeto de control de llamadas Nexmo para grabar llamadas entrantes

En el tutorial anterior se explicaba cómo crear URL de punto final de webhook y asociarlas a una aplicación de voz para recibir llamadas entrantes. En este tutorial, modificará el archivo NCCO para grabar audio. Si aún no ha completado el tutorial anterior, siga ese primero.

Para empezar, ejecute ngrok:

ngrok http 4002

Usted va a utilizar las URLs de reenvío, que se ven como https://db95720f.ngrok.iocomo puntos finales de webhook temporales durante el desarrollo.

Actualice su aplicación Nexmo con las URL ngrok. (Puede omitir esta parte si reanuda utilizando el mismo ngrok o la URL de su servidor):

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

Ahora, vamos a modificar el código de tu webhook.

Editar la OCNC en la ruta HTTP GET para manejar las solicitudes de /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 el eventUrl en la OCN. Aquí es donde se envía la información sobre la grabación. Puede reutilizar la ruta genérica /event que ha creado para la aplicación, o crear otra ruta POST:

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

Ejecute el script e intente llamar a su número de teléfono Nexmo. Si todo funciona correctamente, debería escuchar un saludo de "Jennifer" seguido de un pitido. Deje un mensaje y pulse # en el teclado.

Por defecto, el audio grabado se guarda en formato MP3 y Nexmo lo almacena durante 30 días.

Cuando finaliza una grabación, el evento devuelve la información, incluida la URL del archivo de audio, 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' }

A continuación, recuperará la grabación del archivo recording_url.

Recuperar el mensaje del buzón de voz

Modifiquemos la /record para descargar el archivo de audio en cuanto finalice la grabación.

Instala la librería Nexmo Node.js vía npm. Usted necesitará la versión 1.2.0 de la biblioteca para poder utilizar el save así que actualízala si usas una versión anterior.

Incluya el módulo nexmo e inicialícelo con sus credenciales, el ID de la aplicación y la clave privada que generó con la herramienta CLI del tutorial anterior. el 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
});

Como se ha explicado anteriormente, cuando se graba un mensaje de voz, se activa el webhook especificado y éste devuelve la información con la etiqueta recording_url. Puedes obtener el archivo de audio MP3 desde esta URL. Tenga en cuenta que el ID del archivo grabado no es el mismo que otros uuid¡s!

Modifiquemos la /record y utilicemos el método files.save para descargar el archivo en el 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();
});

¡Ejecute el script y llame a su número de teléfono Nexmo para grabar su mensaje! Después de la llamada, ¡verás un archivo de audio descargado en el mismo directorio! ¡Ya está!

Nexmo Voice API - audio file download

Más información

Aquí tienes algunos recursos que puedes utilizar para profundizar en las API Nexmo y Node.js.

Referencias y herramientas API

Guía de inicio de Nexmo para Node.js

Compartir:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Tomomi ImuraAntiguos alumnos de Vonage

Web abierta y tecnología ? HTML5, JavaScript, Node.js. Cat hacks ?, e Internet of Blings ✨ (que poco más que LED parpadea ?). Ex Developer Advocate en Vonage, San Francisco.