https://d226lax1qjow5r.cloudfront.net/blog/blogposts/forward-a-call-via-voice-proxy-with-koa-js/forward-a-call-voice-proxy-koa-js.png

Weiterleitung eines Anrufs über Voice Proxy mit Koa.js

Zuletzt aktualisiert am April 30, 2024

Lesedauer: 12 Minuten

Einführung

Dieses Tutorial zeigt Ihnen, wie Sie Ihrer Anwendung Voice-Funktionen hinzufügen können. Wir werden Koa, ein Web-Framework für Node.js, verwenden, um einen Server zu erstellen, der eingehende Anrufe und Ereignisse verarbeitet, sowie die Vonage Voice API um Anrufe an eine andere Telefonnummer weiterzuleiten. Lassen Sie uns beginnen.

Skizze des Projekts

Am Ende dieses Projekts sollte Ihr Projektordner so aussehen:

[node_modules] .env .private.key forward_a_call.js package-lock.json package.json vonage_app.json

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Node.js installiert

  • Ngrok wird installiert, um Ihren lokalen Entwicklungsserver dem Internet zugänglich zu machen.

  • Ein Vonage Developer Account für den Zugriff auf unsere Voice API.

    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.

Einrichtung Ngrok

Damit wir in der Lage sind, Endpunkte von unseren lokalen Rechnern aus bereitzustellen, ohne unsere Anwendung in einer Live-Umgebung einsetzen zu müssen, werden wir unseren lokalen Server mit Hilfe der folgenden Methode für das Internet zugänglich machen ngrok

Nach der Installation starten Sie in einem neuen Terminal-/Befehlszeilenfenster ngrok auf Port 3000:

ngrok http 3000

Vonage einrichten

Einrichten derVonage CLI

Mit der Vonage CLI können Sie Vonage Applications erstellen und verwalten. Installieren Sie es, wenn Sie es noch nicht haben:

npm install @vonage/cli -g

Konfiguration des API-Schlüssels und des API-Geheimnisses festlegen

Führen Sie den Befehl aus, um den API-Schlüssel und das API-Geheimnis zu konfigurieren. Danach sehen Sie Configuration saved in Ihrem Terminal oder in der Eingabeaufforderung.

Die VONAGE_KEY und VONAGE_SECRET finden Sie auf dem Dashboard von Vonage.

It shows where the API Key and API Secrets are. Right under the text 'API key and API Secret'Vonage Dashboard

vonage config:set --apiKey= --apiSecret=

Eine Anwendung erstellen

Verwenden Sie die Befehlszeilenschnittstelle, um eine neue Anwendung mit Voice-Funktionen zu erstellen, und notieren Sie sich die bei der Erstellung angegebene Anwendungs-ID. Führen Sie den Befehl aus, um eine neue Vonage Application zu erstellen.

vonage apps:create

Daraufhin erscheint eine Eingabeaufforderung mit einigen Feldern, die Sie wie folgt ausfüllen können.

✔ Application Name … "Forward a Call" ✔ Select App Capabilities › Voice ✔ Create voice webhooks? … yes ✔ Answer Webhook - URL … https://abc.ngrok.app/answer -> the URL of your current ngrok session followed by `/answer` ✔ Answer Webhook - Method › GET ✔ Event Webhook - URL … https://abc.ngrok.app/event -> the URL of your current ngrok session followed by `/event` ✔ Event Webhook - Method › POST ✔ Allow use of data for AI training? Read data collection disclosure - https://help.nexmo.com/hc/en-us/articles/4401914566036 … no

Sie sollten eine ähnliche Antwort wie diese erhalten:

Creating Application... done Application Name: Forward Application ID: APPLICATION_ID Voice Settings Event Webhook: Address: https://abc.ngrok.app/event HTTP Method: POST Answer Webhook: Address: https://abc.ngrok.app/answer HTTP Method: GET Public Key -----BEGIN PUBLIC KEY----- A Long string -----END PUBLIC KEY----- App Files Vonage App File: `../vonage_app.json` Private Key File: ...`fileName.key` Improve AI: false

Mieten Sie eine virtuelle Nummer

Als Nächstes benötigen wir eine virtuelle Nummer, die als unser "öffentliches Gesicht" für eingehende Anrufe dient. Diese Nummer wird mit unserer Vonage-Anwendung verknüpft, und hier erfahren Sie, wie Sie eine solche Nummer erhalten:

  1. Suchen Sie nach verfügbaren Numbers in Ihrer gewünschten Region. Zum Glück können wir Numbers direkt von der CLI aus kaufen, wie hier! vonage numbers:search US (ersetzen Sie US durch Ihre Landesvorwahl, falls erforderlich).

  2. Kaufen Sie eine Nummer: vonage numbers:buy 12079460000 US.

Denken Sie daran, dass einige Numbers nicht über die Befehlszeile erworben werden können, Sie müssen sie also über das Dashboard erwerben. Sie können dies tun, indem Sie zum Vonage-Dashboard und die Buy Numbers Seite. Klicken Sie im Suchfilter auf "Voice" und wählen Sie das Land aus, in dem Sie eine Numbers kaufen möchten.

Verknüpfen einer virtuellen Telefonnummer mit der Anwendung

Nachdem wir unsere Nummer ausgewählt haben, ist es an der Zeit, sie mit unserer Vonage-Anwendung zu verbinden. Sie können eine virtuelle Telefonnummer direkt über das Vonage Dashboard oder über die CLI verknüpfen. Durch die Verknüpfung wird sichergestellt, dass Anrufe an Ihre virtuelle Nummer korrekt durch Ihre Anwendung geleitet werden.

vonage apps:link --number=12079460000 APPLICATION_ID

Sie können dies auch über das Dashboard tun. Gehen Sie zur Seite Applications und klicken Sie auf die Anwendung, die Sie zuvor erstellt haben. Klicken Sie auf die Schaltfläche "Verknüpfen" im Abschnitt Voice neben der Nummer, die Sie verknüpfen möchten.

Das Node.js-Projekt erstellen

  1. Erstellen Sie ein neues Verzeichnis für Ihr Projekt und navigieren Sie dorthin. (Beispielverzeichnis VoiceWithVonage)

  2. Initialisieren Sie ein neues Node.js-Projekt mit npm init -y um alle Standardeinstellungen zu übernehmen.

Abhängigkeiten installieren

Unser Projekt stützt sich auf einige Abhängigkeiten, die wir mit einem einzigen Befehl installieren:

npm install @vonage/server-sdk koa @koa/router koa-bodyparser dotenv

Umgebungsvariablen

Wir werden Umgebungsvariablen verwenden, um sensible Informationen wie API-Schlüssel und Telefonnummern zu speichern, damit unsere Anwendung sicher und verwaltbar bleibt.

Erstellen Sie eine .env Datei in Ihrem Projektstamm und fügen Sie Ihre Variablen hinzu In Michaels Blogbeitrag wird die Verwendung von Umgebungsvariablen in Node.js genauer erklärt

// .env
VONAGE_API_KEY= Your Vonage API key, used for authenticating API requests.
VONAGE_API_SECRET= Your Vonage API secret
VONAGE_APPLICATION_ID= The ID of your Vonage application. Vonage applications allow you to manage your communication services and define how they interact with your web application.
VONAGE_PRIVATE_KEY= The path to your Vonage application's private key file. When you create a Vonage application that uses voice capabilities, you generate a public/private key pair. The private key authenticates your application when making API requests. It will  look like nameOfTheFile.key.
FROM_NUMBER= The Vonage virtual number (purchased through Vonage) that calls will come from. It is the number displayed to the user receiving the call.
YOUR_SECOND_NUMBER= The destination phone number to which the call will be forwarded. It should be in [E.164 format](https://en.wikipedia.org/wiki/E.164).

Vonage initialisieren

Das Vonage Server SDK macht die Integration mit den Diensten von Vonage ganz einfach. Initialisieren Sie es in Ihrem Projekt, um die Voice-Funktionalität zu aktivieren, und stellen Sie sicher, dass die Platzhalterwerte durch Ihre API-Anmeldedaten ersetzt werden, die in Ihrer .env Datei gespeichert sind.

Erstellen Sie eine Datei namens forward_a_call.js und den folgenden Code.

// forward_a_call.js
require("dotenv").config();
const { Vonage } = require("@vonage/server-sdk");

// Initialize the Vonage Server SDK with your credentials
const vonage = new Vonage({
 apiKey: process.env.VONAGE_API_KEY,
 apiSecret: process.env.VONAGE_API_SECRET,
 applicationId: process.env.VONAGE_APPLICATION_ID,
 privateKey: process.env.VONAGE_PRIVATE_KEY,
});

Koa einrichten

Wir beginnen mit dem Einrichten unserer Serverumgebung:

require("dotenv").config();
const Koa = require("koa");
const Router = require("@koa/router");
const koaBody = require("koa-bodyparser");

const app = new Koa();
const router = new Router();

app.use(koaBody());

Hier importieren wir die notwendigen Module und initialisieren unsere Koa-Anwendung. dotenv lädt Umgebungsvariablen (wie Ihre Vonage API-Anmeldedaten und Telefonnummern) aus einer .env Datei.

Die Middleware koaBodyparser wird eingesetzt, um den Body eingehender Anfragen zu parsen, was für das Lesen von JSON-Payloads in unserem /event Webhook unerlässlich ist.

Zusätzlich verwenden wir @koa/router, eine Routing-Middleware, um Routen innerhalb unserer Anwendung zu definieren und zu verwalten. Damit können wir Aktionen für verschiedene Pfade festlegen, z. B. /answer für die Beantwortung von Anrufen und /event für die Verarbeitung von Webhook-Ereignissen.

Anrufe mit NCCO beantworten

Die /answer Route ist als Antwort auf eingehende Anrufe definiert. Wenn die Vonage-Plattform einen Anruf an Ihre virtuelle Nummer erhält, fordert sie von diesem /answer Endpunkt Anweisungen, bekannt als NCCO (Call Control Object), zur Bearbeitung des Anrufs abruft.

In diesem Beispiel wird der NCCO weist Vonage an, zuerst eine Nachricht abzuspielen ("Bitte warten Sie, während wir Ihren Anruf verbinden.") und dann den Anruf zu einer anderen angegebenen Nummer (YOUR_SECOND_NUMBER), wobei Ihre Vonage-Nummer (FROM_NUMBER) als Anrufer-ID zu verwenden.

router.get("/answer", async (ctx) => {
  const ncco = [
    {
      action: "talk",
      text: "Please wait while we connect your call.",
    },
    {
      action: "connect",
      eventUrl: [],
      from: process.env.FROM_NUMBER,
      endpoint: [
        {
          type: "phone",
          number: process.env.YOUR_SECOND_NUMBER,
        },
      ],
    },
  ];
  ctx.body = ncco;
});

Ereignisse verarbeiten, Routen anwenden und den Server starten

Die /event Route erfasst und protokolliert Ereignisse im Zusammenhang mit dem Anruf. Dieser Endpunkt ist für die Fehlersuche und Überwachung des Lebenszyklus Ihrer Anrufe unerlässlich. Zu den Ereignissen können Anrufstatus wie "beantwortet", "abgeschlossen" oder "fehlgeschlagen" gehören. Durch die Protokollierung dieser Ereignisse können wir Einblicke in den Anruffluss gewinnen und Probleme beheben

Schließlich wenden wir unsere Routen auf die Koa-Anwendung an und starten den Server.

router.post("/event", async (ctx) => {
  console.log(ctx.request.body);
  ctx.status = 204; // No content to send back
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => console.log("Server running on port 3000"));

Die Anwendung lauscht auf Port 3000 und protokolliert eine Meldung auf der Konsole, sobald der Server läuft. Hier werden die von uns definierten Routen zugänglich und ermöglichen der Vonage-Plattform die Interaktion mit unserem Server auf der Grundlage der im Vonage Dashboard für die Antwort- und Ereignis-Webhooks unserer Anwendung angegebenen URLs.

Ausführen und Testen der Anwendung

Wenn Sie alles vorbereitet haben, starten Sie Ihren Server mit dem folgenden Befehl:

node forward_a_call.js

Testen Sie die Rufumleitung, indem Sie Ihre virtuelle Vonage-Nummer wählen. Der Anruf sollte auf die in Ihrer Datei angegebene Nummer umgeleitet werden. .env Datei angegeben ist.

Fazit und Verbindung mit uns

Herzlichen Glückwunsch! Sie haben nun die Kunst der Anrufweiterleitung mit Vonage gemeistert. Wenn Sie Fragen oder Vorschläge haben oder Ihre Ergebnisse mit anderen teilen möchten, werden Sie Mitglied in unserer Vonage Entwickler-Slack-Community oder kontaktieren Sie uns auf X, früher bekannt als Twitter.

Weitere Lektüre

Erstellen Sie einen Fluchtplan mit der Vonage Voice API und erhalten Sie einen Ghost Call

Weiterleitung eines Anrufs mit NCCO

Teilen Sie:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroAdvokat für Entwickler