https://d226lax1qjow5r.cloudfront.net/blog/blogposts/forward-call-via-voice-proxy-node-red-dr/forward-call-featured.png

Weiterleitung eines Anrufs über einen Voice-Proxy mit Node-RED

Zuletzt aktualisiert am May 24, 2021

Lesedauer: 10 Minuten

Hinweis: Einige der in diesem Artikel beschriebenen Tools oder Methoden werden möglicherweise nicht mehr unterstützt oder sind nicht mehr aktuell. Für aktualisierte Inhalte oder Support, überprüfen Sie unsere neuesten Beiträge oder kontaktieren Sie uns auf dem Vonage Community Slack

In diesem Tutorial werden wir die Nexmo Voice API verwenden, um private Anrufe zu tätigen, indem wir einen Anruf über einen Sprach-Proxy weiterleiten. Als zusätzlichen Bonus werden wir am Ende auch eine Aufnahmefunktion hinzufügen.

Wenn Sie sich schon immer gefragt haben, wie Sie Ihren Mitfahrgelegenheit-Fahrer, Airbnb-Gastgeber oder Kurier kontaktieren können, ohne dessen Nummer zu kennen, oder wenn Sie einfach daran interessiert sind, private Anrufe zu tätigen, dann folgen Sie uns und erfahren Sie, wie das geht!

Abhängigkeiten

Voraussetzungen

Bevor Sie beginnen, benötigen Sie einige Dinge:

  • Node.js und Node-RED installiert haben, wenn Sie lokal entwickeln

  • Eine Möglichkeit, Ihren Server dem Internet auszusetzen. Das bedeutet entweder, dass Sie eine gehostete Version von Node-RED betreiben oder einen Tunneldienst wie ngrok - Machen Sie sich mit diesem Service vertraut Erste Schritte mit Ngrok in Node-RED Lehrgang

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.

Erlangung von Berechtigungsnachweisen

Um die Nexmo-Knoten in Node-RED zu nutzen, müssen Sie Ihre Anmeldedaten angeben, also halten Sie sie am besten bereit. Gehen Sie zu Ihrem Dashboard um Ihren API-Schlüssel und Ihr Geheimnis zu finden und sie zu notieren.

Als nächstes benötigen Sie ein Voice-aktivierte virtuelle Nummer. Gehen Sie zu Numbers > Numbers kaufen um eine zu erhalten.

Buy Number Nexmo DashboardBuy Number Nexmo Dashboard

Einrichten des Node-RED-Editors

Rufen Sie Ihren Node-RED-Editor auf, indem Sie Ihren Browser auf http://localhost:1880.

Sobald Sie den Editor geöffnet haben, müssen Sie die Nexmo-Knoten installieren. Dies können Sie unter der Palette verwalten tun, indem du nach dem node-red-contrib-nexmo Paket suchen und auf installieren klicken.

Jetzt sollten alle Nexmo-Knoten auf der linken Seite Ihres Bildschirms erscheinen - in Ihrer Knotenpalette, neben anderen Standardknoten.

Öffnen Sie Ihren lokalen Server für das Internet

Falls Sie keine gehostete Version von Node-RED verwenden, benötigt die Nexmo Voice API einen anderen Weg, um auf Ihre Webhook-Endpunkte zuzugreifen. Ihren lokalen Server über das öffentliche Internet zugänglich machen. Wenn Sie Node-RED auf einem öffentlichen Webserver statt auf Ihrem lokalen Rechner laufen lassen, sind Sie bereit für den nächsten Schritt Erstellen einer Nexmo Voice Applikation Schritt.

Ein bequemer Weg, dies zu tun, ist die Verwendung eines Tunneldienstes wie ngrokverwenden, und es gibt einen Knoten für diesen Dienst, den Sie direkt von Ihrem Editor aus installieren können.

Sehen Sie sich auch unser Tutorial über Erste Schritte mit Ngrok in Node-RED um mehr darüber zu erfahren.

Sobald Sie den ngrok-Knoten installiert und Ihren Editor neu gestartet haben, sollte der ngrok Knoten in Ihrer Knotenpalette erscheinen. Er nimmt die Zeichenketten auf oder aus als Eingabe, um den Tunnel zu starten/stoppen, und gibt die ngrok-Hostadresse als msg.payload.

importieren von Zwischenablage oder versuchen Sie selbst, diesen Pfad zu erstellen.

[
    {
        "id": "faed0f7.1e524f",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "on",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 100,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "11051fa9.75bd1",
        "type": "inject",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "topic": "",
        "payload": "off",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 160,
        "wires": [
            [
                "8a01baeb.6756d"
            ]
        ]
    },
    {
        "id": "8a01baeb.6756d",
        "type": "ngrok",
        "z": "5b8bbfc3.1a9f18",
        "port": "1880",
        "creds": "5a9e2b8c.173a2c",
        "region": "ap",
        "subdomain": "",
        "name": "",
        "x": 400,
        "y": 140,
        "wires": [
            [
                "93fd5675.743c1"
            ]
        ]
    },
    {
        "id": "93fd5675.743c1",
        "type": "debug",
        "z": "5b8bbfc3.1a9f18",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 620,
        "y": 140,
        "wires": []
    },
    {
        "id": "5a9e2b8c.173a2c",
        "type": "ngrokauth",
        "z": ""
    }
]

Zu diesem Zeitpunkt sollte Ihr Editor ungefähr so aussehen:

ngrok pathngrok path

Als letzter Schritt vor dem Drücken von Bereitstellendrücken, öffnen Sie die ngrok Knoteneigenschaften und geben Sie die Anschlussnummer (1880 für Node-RED) und die Region an.

Sie können auch Ihren Authtoken für Ihren ngrok Account hinzufügen, wenn Sie einen haben. Machen Sie sich keine Sorgen, wenn Sie keinen haben, überspringen Sie diesen Schritt vorerst. Der Knoten wird eine Warnung ausgeben, dass er nicht vollständig konfiguriert ist, aber das ist kein Problem.

ngrok propertiesngrok properties

Besuchen Sie Bereitstellen und klicken Sie auf das auf inject und navigieren Sie dann zu der im Debug-Bereich angezeigten URL (YOUR_URL für zukünftige Referenzen), um Ihren Node-RED-Editor unter einer öffentlichen Adresse zu finden.

ngrok node-redngrok node-red

Erstellen einer Nexmo Voice Applikation

Einige der Nexmo-APIs, einschließlich der Voice API, verwenden Nexmo Applications, um Sicherheits- und Konfigurationsinformationen zu speichern, die für die Verbindung mit Nexmo-Endpunkten benötigt werden.

In der Nexmo Node-RED-Palette gibt es mehrere Knoten, mit denen diese Applications erstellt werden können: getrecording, earmuff, mute, hangup, transfer, createcall, playaudio, playtts und playdtmf.

Ziehen Sie einen dieser Knoten in Ihren Arbeitsbereich und doppelklicken Sie dann darauf, um die Knoteneigenschaften zu öffnen.

Neben dem Nexmo Credentialswählen Sie "Neue nexmovoiceapp hinzufügen..." aus dem Dropdown-Menü und klicken Sie auf die Schaltfläche "Bearbeiten". Geben Sie die unten stehenden Daten ein und klicken Sie auf Neue Anwendung erstellen.

KEY DESCRIPTION
Name Choose a name for your Voice Application, for example "Nexmo Voice Application".
API Key Your Nexmo API key, shown in your account overview.
API Secret Your Nexmo API secret, shown in your account overview.
Answer URL YOUR_URL/answer, you'll be hosting a Nexmo Call Control Object (NCCO) here. - more about this later on.
Event URL YOUR_URL/event, you'll need to reference this when setting up the event handler.

Node-RED erstellt dann eine neue Nexmo Application auf Ihrem Account und füllt die Felder App ID und Private Key aus. Nach diesem Schritt können Sie den Nexmo-Knoten, den Sie verwendet haben, löschen, da ein nexmovoiceapp Konfigurationsknoten erstellt wurde, der alle Nexmo-Anmeldeinformationen enthält, die dieser Ablauf benötigt.

create voice appcreate voice app

Einrichten einer Nummer zum Anrufen

Als nächstes müssen Sie Ihre virtuelle Nummer mit dieser Anwendung verknüpfen.

Sie finden die soeben erstellte Voice Application in Ihrem Nexmo Dashboard, indem Sie zu Voice > Deine Applications.

Klicken Sie auf den Namen dieser Anwendung und dann unter dem Menüpunkt Numbers auf die Registerkarte Link neben der virtuellen Nummer, die Sie zuvor gemietet haben.

Falls die Nummer, die Sie verwenden möchten, bereits mit einer anderen App verknüpft ist, klicken Sie auf Nummer verwalten und konfigurieren Sie sie so, dass eingehende Anrufe an Ihre App weitergeleitet werden.

link numberlink number

Bonus-Tipp: Verwenden Sie einen comment Knoten, um die mit Ihrer Anwendung verknüpfte Nexmo-Nummer zu notieren, so haben Sie sie immer griffbereit.

Eingehende Anrufe abwickeln

Wenn Sie einen eingehenden Anruf erhalten, stellt die Nexmo Voice API eine GET Anfrage an einen von Ihnen definierten Endpunkt, YOUR_URL/answerund erwartet eine Reihe von Anweisungen, wie der Anruf zu behandeln ist.

Diese Anweisungen werden in Form eines Nexmo Call Control Objektauch bekannt als NCCOs. Es stehen viele verschiedene Aktionen zur Verfügung, finden Sie die entsprechenden Knoten in der Nexmo-Palette in Ihrem Node-RED-Editor oder lesen Sie die NCCO-Referenz um mehr über sie zu erfahren.

In diesem Lernprogramm verwenden wir die connect verwenden, so dass der eingehende Anruf mit einer neuen, von uns angegebenen Telefonnummer verbunden wird.

Definieren Sie den Webhook-Endpunkt für eingehende Anrufe

a hinzufügen voice webhook und einen return ncco Knoten zu Ihrem Arbeitsbereich hinzu und verbinden Sie sie miteinander, um einen Webhook-Endpunkt zu definieren.

Als nächstes öffnen Sie die voice webhook Knoteneigenschaften, wählen Sie GET als Method und geben Sie /answer in das Feld URL ein, und drücken Sie dann Bereitstellen.

inbound webhookinbound webhook

Großartig! Jetzt haben Sie einen Webhook, der einen NCCO an die Nexmo API zurückgibt. Zu diesem Zeitpunkt enthält er noch keine Aktionen, also fügen wir eine hinzu!

Bauen Sie das Nexmo Call Control Objekt

Um den eingehenden Anruf weiterzuleiten, müssen wir ihn mit einem neuen Endpunkt verbinden. Dazu benötigen wir eine connect Aktion.

Fügen Sie einen connect Knoten zwischen dem voice webhook und einem return ncco Knoten. Dadurch wird dem NCCO eine Verbindungsaktion hinzugefügt.

Öffnen Sie den connect Knoten-Editor, wählen Sie Phone als eine Endpointund geben Sie die Nummer, die Sie anrufen möchten, in das Number {} Feld ein.

Lassen Sie das From {} leer, damit die Anrufer-ID als unbekannt angezeigt wird, oder geben Sie eine Ihrer virtuellen Nexmo-Nummern ein.

Um mehr über die anderen Parameter und die connect Aktion zu erfahren, lesen Sie die NCCO-Referenz.

Anrufereignisse protokollieren

Verbinden Sie schließlich einen http in Knoten mit einem http response Knoten, sowie mit einem debug Knoten, so dass Sie Ihre Aufrufereignisse im Debug-Bereich sehen können.

Im Knoten http Eingabeknoten, wählen Sie POST als eine Method und füllen Sie das Feld URL Feld mit /event.

Der Knoten http response Knoten sollte den Wert 200 setzen als Status codegesetzt sein, aber keine Sorge, dies ist auch der Standardwert.

forward flowforward flow

Rufen Sie jetzt Ihre Nexmo-Nummer an und verfolgen Sie die Anrufereignisse in der Debug-Seitenleiste!

forward call eventsforward call events

Eine Aufnahmefunktion hinzufügen

Bei geschäftlichen Telefonaten ist es oft hilfreich, wenn man die Möglichkeit hat, sie aufzuzeichnen. Schauen wir uns also an, wie wir den obigen Ablauf so umgestalten können, dass wir eine Aufzeichnung des Gesprächs erhalten.

Aktualisierung des NCCO

Zuerst brauchen wir eine record Aktion zu dem Nexmo Call Control Objekt hinzugefügt.

Die Aufzeichnung beginnt, wenn die Aufzeichnungsaktion im NCCO ausgeführt wird, und endet, wenn die synchrone Bedingung in der Aktion erfüllt ist. Das heißt, End On Silence, timeOut oder endOnKey.

Wenn Sie keine synchrone Bedingung festlegen, führt die Voice API sofort den nächsten NCCO ohne Aufzeichnung aus.

In unserem Anwendungsfall bedeutet dies, dass wir einen record Knoten vor dem connect Knoten, und keinen End On Silence, Time Out oder End On Key Werte gesetzt werden sollten.

Fügen Sie nun einen record Knoten zu Ihrem Fluss, zwischen den voice webhook und connect Knoten.

Öffnen Sie seine Eigenschaften, füllen Sie das Feld URL {} Feld mit etwas wie YOUR_URL/recordund wählen Sie POST als Method und wählen Sie eine Format für die Aufnahmedatei - ich wähle MP3. Sie könnten auch ein Häkchen bei Beep Start ankreuzen, um einen klaren Hinweis darauf zu erhalten, wann genau die Aufzeichnung beginnt.

forwrad record nodeforwrad record node

Handler für die Aufnahme eventURL hinzufügen

Als Nächstes müssen wir einen Handler für die Aufnahme eventURL hinzufügen - YOUR_URL/record. Auf diese Weise erhalten wir das Ereignis nach Abschluss der Aufnahme und können die Aufnahme auf unseren Rechner herunterladen.

Hinzufügen eines http in Knoten und einen http response Knoten zu Ihrem Arbeitsbereich hinzu und verdrahten Sie sie miteinander. Erwägen Sie auch das Hinzufügen eines debug Knoten hinzuzufügen, um zu sehen, was durch die Aufnahme eventURL kommt.
In dem http Eingabeknoten, wählen Sie POST als eine Method und füllen Sie das URL Feld mit /record.

Der Knoten http response Knoten sollte den Wert 200 setzen als Status codegesetzt werden, aber dies ist auch der Standardwert.

forward record eventforward record event

Aufnahme herunterladen

Sobald die Aufzeichnung abgeschlossen ist, sendet Nexmo uns die URL der Aufzeichnung im Webhook des Aufzeichnungsereignisses. Der letzte Schritt ist das Abrufen und Herunterladen der Aufnahme.

Für diesen Schritt benötigen wir einen getrecording Knoten, um die Audioaufnahme von der angegebenen URL zu holen, und einen file Knoten, um sie in eine Datei auf unserem Rechner zu schreiben.

Fügen Sie einen getrecording Knoten nach dem /record http in hinzu, wählen Sie dann in den Knoteneigenschaften die zuvor erstellte Voice-Anwendung aus der Nexmo Credentials und geben Sie einen absoluten Pfad als Filename {}.

forward get recordingforward get recording

Und schließlich fügen Sie einen file Knoten nach getrecording. Vergewissern Sie sich in dessen Knoteneditor, dass die Option Verzeichnis erstellen, wenn es nicht existiert? angekreuzt ist und wählen Sie entweder Überschreiben oder An Datei anhängen aus der Action Dropdown-Menü. Lassen Sie das Feld Filename leer, denn dieser Wert wird vom getrecording Knoten, in {{msg.filename}}.

forward file nodeforward file node

Das war's! Holen Sie sich ein zweites Gerät oder lassen Sie einen Freund Ihre Nexmo-Nummer anrufen, führen Sie ein Gespräch und sobald Sie fertig sind, wartet die Aufnahmedatei auf Sie, die bereits auf Ihr Gerät geladen ist. Viel Spaß!

forward recording downloadforward recording download

Wie geht es weiter?

Weitere Lektüre

Versuchen Sie ein anderes Tutorial

Teilen Sie:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia BiroAdvokat für Entwickler

Julia hat es sich zur Aufgabe gemacht, andere Entwickler durch die Erstellung von Tutorials, Anleitungen und praktischen Ressourcen zu unterstützen. Mit ihrem Hintergrund in den Bereichen Öffentlichkeitsarbeit und Bildung möchte sie Technologien zugänglicher machen und die Erfahrung von Entwicklern insgesamt verbessern. Man kann sie oft bei lokalen Veranstaltungen antreffen.