
Anrufe mit der Voice API von Vonage und Node.js verbinden
Lesedauer: 5 Minuten
Einführung
In diesem Tutorial werden wir einen Anruf zwischen zwei Telefonnummern aufbauen und eine weitere Telefonnummer mit dem aktuellen Anruf verbinden, indem wir die Vonage Voice API mit Hilfe der NCCOs.
Wir werden ein NCCO-Element im Zielobjekt angeben, um den Aufruf durch Angabe einer URL zu steuern. Wir verwenden das 'Verbinden' und 'sprechen' NCCO Aktionen.
Sie finden den vollständige GitHub Repo Code hier.
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.
Voraussetzungen
Vergewissern Sie sich, bevor Sie mit dem Bau des Projekts beginnen, dass Sie alles haben:
Node.js Version 20+ und npm auf Ihrem Rechner installiert sein.
Ngrok für die Erstellung eines sicheren Tunnels zu Ihrem localhost.
Ein Texteditor und Grundkenntnisse in JavaScript.
Einrichten der Vonage-Anwendung
Erstellen einer Vonage Voice-Applikation
Erstellen Sie eine neue Applikation: Gehen Sie zu Ihre Applications im Dashboard und schalten Sie die Voice-Funktion ein.
Ein Video, das erklärt, wie man eine Vonage Anwendung erstellt.
Virtuelle Rufnummer erwerben und verknüpfen
Erwerben Sie eine virtuelle Nummer für Ihre Anwendung.
Um eine virtuelle Rufnummer zu kaufen, gehen Sie zu Ihrem API-Dashboard und befolgen Sie die unten aufgeführten Schritte.
Purchase a phone number
Gehen Sie zu Ihrem API-Dashboard
Navigieren Sie zu BUILD & MANAGE > Numbers > Buy Numbers.
Wählen Sie die gewünschten Attribute und klicken Sie dann auf Suchen
Klicken Sie auf die Schaltfläche Kaufen neben der gewünschten Nummer und bestätigen Sie Ihren Kauf.
Um zu bestätigen, dass Sie die virtuelle Nummer erworben haben, gehen Sie im linken Navigationsmenü unter BUILD & MANAGE auf Numbers und dann auf Your Numbers
Verknüpfen Sie eine virtuelle Nummer mit Ihrer Anwendung.
Voice API-Fähigkeit
Starten Sie eine ngrok Tunelling-Instanz
Ngrok ist ein Tool, mit dem Sie Ihre Anwendung dem Internet aussetzen können. Sie benötigen es, um Event-Webhooks von der Vonage Voice API einzulesen. Wenn Sie Ngrok noch nicht verwendet haben, können Sie hier beginnen. Ich habe die Schritte zum Ausführen einer Instanz unterhalb des Bildes hinzugefügt.
Führen Sie den folgenden Befehl aus, um eine ngrok-Tunneling-Instanz zu starten.
ngrok http 3000ngrok (Ctrl+C to quit)
👋 Goodbye tunnels, hello Agent Endpoints: https://ngrok.com/r/aep
Session Status online
Account plan name
Version 3.22.0
Region Europe (eu)
Latency 31ms
Web Interface http://127.0.0.1:4040
Forwarding https://xyz.ngrok.app -> http://localhost:8000
Connections ttl opn rt1 rt5 p50 p90
14 0 0.03 0.03 6.10 7.79 Konfigurieren Sie die Webhooks
Zurück im Vonage API Dashboard, unter Ihren Apps, schalten Sie die Option Voice und setzen Sie die öffentliche URL Ihres Servers von ngrok als Endpunkt für eingehende Nachrichten und Ereignisse. Sie sollte wie folgt aussehen: https://xyz.ngrok.com/answer für eingehende Nachrichten und https://xyz.ngrok.com/webhooks/status für den Status. Wenn Sie mehr über Webhooks erfahren möchten, finden Sie in unserer Vonage Dokumentation.
Installieren Sie die Abhängigkeiten
Es ist an der Zeit, unseren Texteditor zu öffnen, ein neues Projekt zu erstellen und die erforderlichen Abhängigkeiten zu installieren. Wir verwenden das Vonage Voice SDK für Node.js, Vonage JWT SDK für Node.js, Express, und Dotenv.
Installieren Sie alle Pakete in einem Rutschund führen Sie den folgenden Befehl aus, um diese Pakete automatisch zu Ihrer package.json Datei und Ihrem Projekt node_modules Verzeichnis hinzuzufügen.
npm install @vonage/voice @vonage/jwt express dotenv Implementierung des serverseitigen Codes
In Ihrer src/server.js-Dateistarten Sie das Projekt, indem Sie die erforderlichen Module importieren. Sie richten ein Express ein, um eingehende HTTP-Anfragen zu verarbeiten.
// src/server.js
// Import dependencies
require("dotenv").config();
const express = require("express");
const { NCCOBuilder, Talk, Connect } = require("@vonage/voice");
const { verifySignature } = require("@vonage/jwt");
// Create Express app
const app = express();
// Parse request body
app.use(express.json());
app.use(express.urlencoded({ extended: false }));); Umgebungsvariablen
Erstellen wir eine .env Datei die alle Umgebungsvariablen enthält, die wir für diese Webanwendung verwenden werden. Ich habe sie unten aufgelistet und erklärt. Sie können mehr erfahren über Verwendung von Umgebungsvariablen in Node.js erfahren.
# .env
VONAGE_API_SIGNATURE_SECRET= this is the secret used to sign the request that corresponds to the signature secret associated with the API key included in the JWT claims. You can identify your signature secret on the Dashboard settings.
SECOND_PHONE_NUMBER= The phone number that will receive the control of the call
VONAGE_VIRTUAL_NUMBER= Your Vonage virtual number linked to the Vonage Application> HINWEIS: Verwenden Sie bei der Eingabe einer Telefonnummer kein führendes + oder 00, sondern beginnen Sie mit der Landesvorwahl, z. B. 16600700000.
Erstellen Sie die JWT-Überprüfungsfunktion
Erstellen Sie eine JWT-Funktion, um zu verifizieren, ob der eingehende Anruf tatsächlich von Vonage stammt. Erfahren Sie mehr über die Verifizierung der Anfrage.
// src/server.js
const verifyJWT = (req) => {
// Verify if the incoming call came from Vonage
const jwtToken = req.headers.authorization.split(" ")[1];
if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {
console.error("Unauthorized request");
throw new Error('Not a voice API request');
}
console.log('JWT verified');
} Erstellen des Endpunkts für die Bearbeitung eingehender Anrufe
Wir erstellen einen /answer Endpunkt, dem wir die URL auf dem Vonage Dashboard hinzugefügt haben. Sobald ein Anruf an das von uns erworbene und mit der Anwendung verknüpfte virtuelle Vonage-Telefon getätigt wird, verifizieren wir das JWT und fügen eine Talk-Aktion hinzu: "Hallo, dies ist ein Testanruf. Der Anruf wird in Kürze weitergeleitet."
// src/server.js
// Endpoint to handle inbound calls
app.all("/answer", (req, res) => {
console.log("Received inbound call...");
verifyJWT(req);
// Build the NCCO for handling the call
const builder = new NCCOBuilder();
// Add the Talk action to greet the caller
builder.addAction(
new Talk("Hello, this is a test call. The call will be forwarded shortly.")
); Den aktuellen Anruf mit einer anderen Nummer verbinden
Anschließend fügen wir eine NCCO-Aktion hinzu, die eine andere Telefonnummer mit dem Anruf verbindet, so dass ein Anruf an eine andere Telefonnummer getätigt wird, die dann mit diesem bestehenden Anruf verbunden wird.
// src/server.js
// Add the Connect action to forward the call to another number
builder.addAction(
new Connect(
{
type: "phone",
number: process.env.SECOND_PHONE_NUMBER,
},
process.env.VONAGE_VIRTUAL_NUMBER
)
);
let ncco = builder.build(); // Build the NCCO
// Respond with the NCCO to control the call
res.json(ncco);
}); Vonage-Anrufereignisse behandeln
Ähnlich wie bei /answer haben wir auch hier eine /webhooks/event URL unter den Voice-Funktionen auf dem Vonage-Dashboard hinzugefügt; wir können Informationen zu den Ereignissen protokollieren, um z. B. zu prüfen, ob der Anruf abgelehnt wurde, den Anrufstatus, seine UUID, usw.
// src/server.js
app.all("/webhooks/event", (req, res) => {
console.log("Received Event:", req.body);
const { status } = req.body;
if (status === "rejected") {
console.error("Call rejected. Check error code and message.");
}
// Ensure response is in JSON format
res.status(200).json({ success: true }); // This should be a valid JSON response
}); Einen Port-Listener hinzufügen
Zum Schluss fügen wir den Teil des Codes hinzu, der den Server auf einem bestimmten Port lauschen lässt; für dieses Beispiel habe ich Port 3000 gewählt.
// Listen on port 3000
app.listen(3000, () => {
console.log("App listening on port 3000");
}); Ausführen und Testen des Codes
Jetzt ist es an der Zeit, die Dinge auszuprobieren. Führen Sie zunächst die Serverdatei über Ihr Terminal oder die Eingabeaufforderung aus.
node src/server.jsStellen Sie sicher, dass Ihre .env-Datei alle Umgebungsvariablen enthält, ngrok läuft und die richtigen URLs im Vonage Dashboard eingerichtet sind.
Rufen Sie die virtuelle Telefonnummer an, die Sie erworben und mit der Anwendung verknüpft haben. Die erste eingerichtete Telefonnummer erhält den Anruf, der dann mit der zweiten Telefonnummer verbunden wird, und Sie sollten dort einen Anruf erhalten.
Schlussfolgerung
Erfahren Sie mehr über die Call Control Objects in diesem One-Dev-Minute Video und die Vonage Voice API NCCO-Dokumentation.
Haben Sie eine Frage oder möchten Sie etwas mitteilen? Beteiligen Sie sich am Gespräch auf dem Vonage Community Slackund bleiben Sie auf dem Laufenden mit dem Entwickler-Newsletter, folgen Sie uns auf X (früher Twitter), abonnieren Sie unseren YouTube-Kanal für Video-Tutorials, und folgen Sie der Vonage Entwickler-Seite auf LinkedInein Raum für Entwickler, um zu lernen und sich mit der Community zu vernetzen. Bleiben Sie in Verbindung, teilen Sie Ihre Fortschritte und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden!
Weitere Lektüre
Eingehende Telefonanrufe mit Python abwickeln
Erstellen Sie einen Fluchtplan mit der Vonage Voice API und erhalten Sie einen Ghost Call
