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

Comment enregistrer l'audio des appels entrants avec Node.js

Publié le May 17, 2021

Temps de lecture : 4 minutes

Il s'agit du troisième tutoriel de la série "Premiers pas avec Nexmo et Node.js", qui fait suite à notre série "Premiers pas" sur les API SMS. Les liens vers les tutoriels précédents de cette série se trouvent au bas de l'article.

Dans le tutoriel précédent, vous avez créé une application vocale et appris à recevoir un appel texte-voix à l'aide de l'API Voice de Nexmo et de la bibliothèque client Node.js. Dans ce tutoriel, vous allez étendre l'application pour enregistrer un message d'un appelant.

Voir le code source record-call.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.

Définition d'un objet Nexmo Call Control pour enregistrer les appels entrants

Le tutoriel précédent portait sur la création d'URL de points de terminaison webhook et leur association à une application vocale pour recevoir des appels entrants. Dans ce tutoriel, vous modifierez le fichier NCCO pour enregistrer de l'audio. Si vous n'avez pas encore terminé le tutoriel précédent, suivez-le d'abord.

Pour commencer, lancez ngrok:

ngrok http 4002

Vous allez utiliser les URL de transfert, qui ressemblent à https://db95720f.ngrok.iocomme points de terminaison temporaires pour les webhooks pendant le développement.

Mettez à jour votre application Nexmo avec les URLs ngrok. (Vous pouvez sauter cette partie si vous reprenez le même ngrok ou l'URL de votre serveur) :

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

Modifions maintenant le code de votre webhook.

Modifiez le NCCO dans la route HTTP GET pour traiter les demandes 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);
});

Remarquez les eventUrl dans le NCCO. C'est là que les informations relatives à l'enregistrement sont envoyées. Vous pouvez réutiliser la route générique /event que vous avez créée pour l'application, ou créer une autre route POST :

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

Exécutez le script et essayez d'appeler votre numéro de téléphone Numbers. Si tout fonctionne, vous devriez entendre un message d'accueil de "Jennifer" suivi d'un bip. Laissez un message et appuyez sur la touche # de votre clavier.

Par défaut, l'audio enregistré est sauvegardé au format MP3 et stocké par Nexmo pendant 30 jours.

Lorsqu'un enregistrement est terminé, l'événement renvoie les informations, y compris l'URL du fichier 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' }

Ensuite, vous récupérerez l'enregistrement dans la base de données recording_url.

Récupération du message vocal

Modifions la route /record pour télécharger le fichier audio dès que l'enregistrement est terminé.

Installez la bibliothèque Nexmo Node.js via npm. Vous aurez besoin de la version 1.2.0 de la bibliothèque pour pouvoir utiliser cette fonctionnalité. save donc mettez à jour si vous utilisez une version plus ancienne.

Incluez le module nexmo puis initialisez avec vos identifiants, l'App ID, et la clé privée que vous avez générée avec l'outil CLI du le tutoriel précédent:

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

Comme expliqué précédemment, lorsqu'un message vocal est enregistré, le webhook spécifié est déclenché et renvoie les informations avec l'attribut recording_url. Vous pouvez récupérer le fichier audio MP3 à partir de cette URL. Veuillez noter que l'ID du fichier enregistré n'est pas pas identique à d'autres uuids !

Modifions l'itinéraire /record et utilisons la méthode files.save pour télécharger le fichier sur votre disque :

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

Exécutez le script et appelez votre numéro de téléphone Numbers pour enregistrer votre message ! Après l'appel, vous verrez un fichier audio téléchargé dans le même répertoire ! C'est génial !

Nexmo Voice API - audio file download

En savoir plus

Voici quelques ressources que vous pouvez utiliser pour approfondir les API Nexmo et Node.js.

Références et outils API

Guide de démarrage Nexmo pour Node.js

Partager:

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

Web ouvert et technologie ? HTML5, JavaScript, Node.js. Cat hacks ?, et Internet of Blings ✨ (un peu plus que des clignotements de LED ?). Ancien Developer Advocate chez Vonage, San Francisco.