
Teilen Sie:
Offenes Web und Technologie ? HTML5, JavaScript, Node.js. Cat hacks ?, und Internet of Blings ✨ (das ist etwas mehr als LED blinkt ?). Ehemaliger Developer Advocate bei Vonage, San Francisco.
Wie man mit Node.js Audio von eingehenden Anrufen aufnimmt
Lesedauer: 4 Minuten
Dies ist das dritte Tutorial in der Reihe "Erste Schritte mit Nexmo und Node.js", die auf unsere Reihe "Erste Schritte" zu SMS APIs folgte. Links zu früheren Tutorials dieser Serie finden Sie am Ende des Beitrags.
Im vorigen Tutorial haben Sie eine Sprachanwendung erstellt und gelernt, wie man mit der Nexmo Voice API und der Node.js-Client-Bibliothek einen Text-to-Voice-Anruf empfängt. In diesem Tutorial werden Sie die App erweitern, um eine Nachricht von einem Anrufer aufzunehmen.
Den Quellcode ansehen rekord-aufruf.js GitHub
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Definition eines Nexmo Call Control Objekts zur Aufzeichnung eingehender Anrufe
Im vorherigen Tutorial wurde das Erstellen von Webhook-Endpunkt-URLs und deren Verknüpfung mit einer Sprachanwendung erläutert, um eingehende Anrufe zu empfangen. In diesem Lernprogramm werden Sie die NCCO um Audio aufzuzeichnen. Wenn Sie das vorherige Lernprogramm noch nicht abgeschlossen haben, sollten Sie dieses zuerst lesen.
Um zu beginnen, führen Sie ngrok:
Sie werden die Weiterleitungs-URLs, die wie folgt aussehen https://db95720f.ngrok.ioaussehen, als temporäre Webhook-Endpunkte während der Entwicklung.
Aktualisieren Sie Ihre Nexmo-Anwendung mit den ngrok-URLs. (Sie können diesen Teil überspringen, wenn Sie dieselbe ngrok- oder Ihre Server-URL weiter verwenden):
Ändern Sie nun Ihren Webhook-Code.
Bearbeiten Sie den NCCO in der HTTP-GET-Route, um die Anfragen für /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);
});Beachten Sie die eventUrl in der NCCO. Hier werden die Informationen über die Aufzeichnung gesendet. Sie können die generische /event Route wiederverwenden, die Sie für die Anwendung erstellt haben, oder eine andere POST-Route erstellen:
app.post('/record', (req, res) => {
console.log(req.body);
res.status(204).end();
});
Führen Sie das Skript aus, und versuchen Sie, Ihre Nexmo-Telefonnummer anzurufen. Wenn alles funktioniert, sollten Sie eine Ansage von "Jennifer" hören, gefolgt von einem Piepton. Hinterlassen Sie eine Nachricht und drücken Sie # auf Ihrer Tastatur.
Standardmäßig werden die aufgezeichneten Audiodaten im MP3-Format gespeichert und von Nexmo für 30 Tage aufbewahrt.
Wenn eine Aufnahme abgeschlossen ist, gibt das Ereignis die Informationen zurück, einschließlich der URL der Audiodatei, 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' }Als Nächstes rufen Sie die Aufnahme aus der Datei recording_url.
Abrufen der Voicemail-Nachricht
Ändern wir die /record Route so, dass die Audiodatei heruntergeladen wird, sobald die Aufzeichnung abgeschlossen ist.
Installieren Sie die Nexmo Node.js-Bibliothek über npm. Sie benötigen die Version 1.2.0 der Bibliothek, um die save Funktion zu nutzen, aktualisieren Sie also, wenn Sie eine ältere Version verwenden.
Binden Sie das nexmo ein und initialisieren Sie es dann mit Ihren Anmeldeinformationen, der App-ID und dem privaten Schlüssel, den Sie mit dem CLI-Tool für des vorherigen Tutorials erzeugt haben:
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
});Wie bereits erläutert, wird der angegebene Webhook ausgelöst, wenn eine Sprachnachricht aufgezeichnet wird, und gibt die Informationen mit dem recording_url. Sie können die MP3-Audiodatei von dieser URL abrufen. Bitte beachten Sie, dass die ID der aufgenommenen Datei nicht die gleiche ist wie die anderer uuids!
Ändern wir die /record Route und verwenden die files.save Methode, um die Datei auf Ihre Festplatte herunterzuladen:
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();
});
Führen Sie das Skript aus und rufen Sie Ihre Nexmo-Telefonnummer an, um Ihre Nachricht aufzunehmen! Nach dem Anruf wird eine Audiodatei in dasselbe Verzeichnis heruntergeladen! Juhu!

Mehr erfahren
Hier sind einige Ressourcen, die Sie nutzen können, um tiefer in Nexmo APIs und Node.js einzutauchen.
