
Teilen Sie:
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.
Erstellen eines Voice-Proxys mit Cloud-Funktionen
Lesedauer: 7 Minuten
Voice Proxy - oder maskierte Anrufe - schützt die privaten Daten der Nutzer, indem es eine zwischengeschaltete Telefonnummer bereitstellt. Auf diese Weise sehen weder der Anrufer noch der Angerufene die echten Telefonnummern des anderen. Dies ist eine gängige Praxis bei Liefer- und Mitfahrdiensten wie Deliveroo und Uber, aber auch in einer Reihe von kleinen Unternehmen ist es sehr nützlich.
In diesem Tutorial werden wir einen meiner Lieblingsanwendungsfälle erstellen: ein virtuelles Geschäftstelefon.
Wir werden zwei Rufrichtungen abdecken:
Sie rufen einen Kunden über Ihre Vonage-Nummer an: Zielnummer per DTMF erfassen und verbinden.
Jemand anderes ruft Ihre Vonage-Nummer an: Verbinden Sie ihn mit Ihrer persönlichen Nummer.
Alles, was wir dazu brauchen, ist eine virtuelle Vonage-Nummer und eine kleine serverlose Funktion, die Webhooks verarbeitet.
Wir verwenden Google Cloud-Funktionendas Function-as-a-Service (FaaS)-Angebot von Google, das eine schnellere Erstellung in der Cloud ermöglicht.
Bei diesen ereignisgesteuerten serverlosen Funktionen handelt es sich um verwaltete Rechenleistung, automatische Skalierung und nutzungsabhängige Abrechnung auf die nächsten 100 Millisekunden genau. Die Entwicklererfahrung ist einfach und intuitiv, sodass Sie sich auf den Code konzentrieren können, während Google Cloud die operative Infrastruktur verwaltet.
Sie können sich Cloud-Funktionen als Bausteine vorstellen, mit denen Sie Ihre Cloud-Dienste schnell mit Code erweitern können. Sie werden als Reaktion auf Ereignisse ausgeführt, die über HTTP übermittelt oder von anderen Google Cloud Platform-Diensten ausgegeben werden. Damit eignen sie sich hervorragend für ereignisbasierte Architekturen, Datenverarbeitung und Cloud-Automatisierungen.
In diesem Beispiel schreiben wir eine HTTP-Funktion, die durch HTTP-Anforderungen ausgelöst wird, die von der Vonage Voice API empfangen werden, und nutzen dabei die ereignisbasierte Architektur von Google Cloud Functions.
Voraussetzungen
Google Cloud-Plattform Account - Registrieren Sie sich oder melden Sie sich bei Google an; Sie erhalten ein Startguthaben im Wert von 300 $. Das ist ein großzügiger Betrag, der Ihnen eine Weile für Test- und Lernzwecke reichen sollte.
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.
Google Cloud-Funktionen einrichten
Ein neues Google Cloud-Projekt erstellen
Erstellen Sie zunächst ein neues Projekt, falls Sie dies noch nicht getan haben. Diese Projekte bilden die Grundlage für die Erstellung, Aktivierung und Nutzung aller Google Cloud-Dienste.
Gehen Sie auf die Seite Ressourcen verwalten Seite der Cloud-Konsole und klicken Sie auf Projekt erstellen. Weitere Details zum Erstellen und Verwalten von Ressourcen finden Sie in der Google Cloud-Anleitung.
Eine Cloud-Funktion erstellen
Wählen Sie dann Cloud-Funktionen aus dem Navigationsmenü und klicken Sie dann auf Funktion erstellen.
Es gibt eine Reihe von Feldern, die konfiguriert werden müssen:
Geben Sie Ihrer Funktion einen Namen.
Wählen Sie eine Region. Ich habe mich für
europe-west-2weil ich in der Nähe von London wohne. Wenn Sie sich nicht sicher sind, welche Region für Sie am besten geeignet ist, sehen Sie sich die Liste der verfügbaren Regionen.Legen Sie den Auslösertyp auf
HTTPein, da wir eine HTTP-Funktion schreiben.Aktivieren Sie "Unauthentifizierte Aufrufe zulassen" und "HTTPS voraussetzen".
Sobald Sie fertig sind, kopieren Sie die generierte URL und klicken auf Speichern.
Create function config page
Als nächstes erweitern Sie die LAUFZEIT-, BUILD- UND VERBINDUNGSEINSTELLUNGEN und scrollen Sie nach unten zu den Laufzeit-Umgebungsvariablen. Wir müssen zwei Telefonnummern als Umgebungsvariablen festlegen, beide im internationalen Format E.164. Zum Beispiel: 447700900123 (UK) oder 14155550101 (US).
YOUR_VONAGE_NUMBER: eine Ihrer virtuellen Vonage Numbers. Finden Sie eine in Ihrem Vonage Dashboard oder kaufen Sie eine.YOUR_PHONE_NUMBER: Ihre persönliche Telefonnummer, die Sie für Tests verwenden werden.
Set environment variables
Klicken Sie auf Weiterund schon ist die Konfiguration fertig; jetzt geht es an den Code!
Stellen Sie sicher, dass Sie den Inline-Editor als auswählen. Quellcode, das neueste Node.js als Laufzeitund aktivieren Sie alle APIs, vor denen die Plattform Sie warnen könnte.
Cloud Functions Inline Editor warning about installing Cloud Build
Der Inline-Code-Editor zeigt eine generierte Boilerplate-Funktion mit Express.js-Anfrage- und Antwortobjekten. Wir ersetzen diese durch unsere Funktion. Denken Sie daran, dass Sie, wenn Sie den Funktionsnamen ändern, auch den Einstiegspunkt ebenfalls aktualisieren müssen.
Erstellen einer Voice-fähigen Vonage-Applikation
A Vonage API-Anwendung enthält die Sicherheits- und Konfigurationsinformationen, die für die Verbindung mit Vonage-Endpunkten und die Nutzung der Vonage-APIs erforderlich sind. Jede erstellte Vonage-Applikation kann mehrere Funktionen unterstützen; wir benötigen jedoch vorerst nur die Voice-Funktionalität.
Erstellen wir einen mit dem Vonage Dashboard. Navigieren Sie zu Ihre Applikationen -> Erstellen Sie eine neue Anwendung.
Schalten Sie die Voice-Funktionen ein und geben Sie dann die von Ihnen generierte URL für die Cloud-Funktionen in das Feld Answer URL Feld ein. Meine sieht so aus: https://europe-west2-my-proxy-calling-project.cloudfunctions.net/proxy-call.
Wir werden vorerst keinen Ereignis-Webhook implementieren, Sie können also gerne http://example.com/event in dieses Feld ein.
Wenn Sie fertig sind, klicken Sie auf Neue Anwendung generieren.
Create Voice-enabled Vonage Application
Auf der nächsten Seite sehen Sie eine Liste der virtuellen Numbers, die Sie in Ihrem Account haben. Klicken Sie auf die Link neben den Nummern, die Sie mit dieser Anwendung verknüpfen möchten. Sie werden diese Nummer anrufen, um Ihre Anwendung zu testen, beginnen Sie also mit einer lokalen Nummer. Wenn keine Liste angezeigt wird oder Sie keine geeigneten Nummern sehen, können Sie auch weitere Numbers kaufen.
Link virtual Vonage number to Vonage Application
Wenn Sie eine andere Nummer verknüpfen als die, die Sie in der Laufzeitumgebung eingestellt haben, stellen Sie sicher, dass Sie den Wert von YOUR_VONAGE_NUMBER in der Benutzeroberfläche der Cloud-Konsole.
Steuerung des Anrufflusses
Nachdem Sie nun eine Vonage-Anwendung konfiguriert haben, stellt Vonage eine GET-Anfrage an Ihre Answer URL wenn jemand Ihre verknüpfte virtuelle Nummer anruft. Vonage erwartet ein Objekt zur Anrufsteuerung (NCCO) zurückgegeben wird, eine Reihe von Anweisungen, wie der Anruffluss ausgeführt werden soll.
Ein NCCO wird als gültiges JSON-Array dargestellt, das eine oder mehrere Aktionen enthält. In diesem Beispiel werden wir einige verschiedene Aktionen verwenden:
die
talkAktion zum Abspielen von Text-to-Speech-Nachrichten im Gesprächdie
inputAktion zur Erfassung von Benutzereingaben durch Erkennung von DTMF-Tönen (Tastendruck) -DTMF-Eingabedie
connectAktion zur Verbindung von Anrufer und Angerufenem.
Aufbau der Cloud-Funktion
Da wir drei Fälle haben werden, müssen wir auch drei verschiedene NCCOs entsprechend zurückgeben.
Wir müssen drei Fälle abdecken:
Jemand anderes ruft Ihre Vonage-Nummer an -> verbinden Sie ihn mit Ihrer Telefonnummer
Sie rufen Ihre Vonage-Nummer an:
2.1. Sie haben noch keine DTMF-Nutzdaten bereitgestellt -> DTMF-Eingabe erfassen
2.2. DTMF-Nutzdaten sind verfügbar -> Anruf mit DTMF-Nutzdaten verbinden (Zielrufnummer)
Kehren Sie zur Google Cloud Console zurück und ersetzen Sie den Standardcode durch den folgenden.
// Get environment variables
const YOUR_VONAGE_NUMBER = process.env.YOUR_VONAGE_NUMBER;
const YOUR_PHONE_NUMBER = process.env.YOUR_PHONE_NUMBER;
exports.helloWorld = (req, res) => {
// Check if there's DTMF payload in the request body
if (req.body.dtmf) {
// (2.2) Connect call to the number in the DTMF payload
])
} else {
// Check if you're the caller
if (req.query.from === YOUR_PHONE_NUMBER) {
// (2.1) Capture destination number via DTMF input
} else {
// (1) Connect caller to your phone number
}
}
};
Werfen wir einen Blick auf jeden dieser Abschnitte.
1. Telefonanrufe entgegennehmen: Anrufer verbinden
Erstens: Wenn jemand Ihre virtuelle Nummer anruft, möchten Sie, dass der Anruf mit Ihrer tatsächlichen Telefonnummer verbunden wird. Dies wird erreicht durch eine connect Aktion und, optional, einer talk Aktion, um dem Anrufer mitzuteilen, dass er verbunden wird.
In diesem Fall müssen Sie das folgende NCCO zurückgeben:
res.json([{
action: 'talk',
text: 'Please wait while we connect you.'
},
{
action: 'connect',
from: YOUR_VONAGE_NUMBER,
endpoint: [{
type: 'phone',
number: YOUR_PHONE_NUMBER
}]
}
])Das obige Snippet ist für diesen Anwendungsfall mehr als ausreichend, aber Sie können diese beiden Aktionen weiter konfigurieren, wenn Sie möchten. Gehen Sie zu der NCCO-Referenz um mehr über alle verfügbaren Optionen zu erfahren.
2. Telefonieren Sie
Als Nächstes müssen wir den Fall behandeln, dass Sie Ihre Vonage-Nummer anrufen, die Zielnummer über die Tastatur Ihres Handys eingeben (DTMF-Eingabe) und dann mit der Nummer verbunden werden, die Sie gerade angegeben haben.
Dieses Szenario erfolgt in zwei Schritten.
2.1 Erfassen der DTMF-Eingabe
Zunächst müssen wir ein NCCO zurückgeben, das eine input Aktion zur Erfassung der Ziffern enthalten. Fügen wir eine talk Aktion hinzufügen, die Anweisungen enthält.
Die talk ist genau wie die Aktion im vorherigen Schritt, ebenfalls optional.
Die input Aktion muss vom Typ ['dtmf']. Die Spracherkennung ist ebenfalls verfügbar; lesen Sie mehr über diese Aktion in der NCCO-Referenz.
Wir müssen auch die Standard DTMF-Eingabeeinstellungen ändern, damit sie für die Erfassung einer Telefonnummer geeignet sind.
timeOutist die Anzahl der Sekunden, bevor die Aktivität des Anrufers an dieeventUrlnach der letzten Aktion des Anrufers. Standardmäßig sind es drei, aber wir nehmen das Maximum10um uns ein wenig Spielraum zu geben.maxDigitsist die Anzahl der Ziffern, die der Benutzer drücken kann, standardmäßig vier.15Die Ziffern passen zu Telefonnummern in E. 164 Format, das von Vonage für Telefonnummern verwendet wird. Eine britische Nummer hätte zum Beispiel das Format 447700900123.submitOnHashermöglicht es, die Aktivität des Anrufers an deneventUrlnach Drücken der Taste #. Wenn # nicht gedrückt wird, wird das Ergebnis nachtimeOutSekunden übermittelt. Standardmäßig falsch, also stellen Sie sicher, dass Sie es auftrue.
res.json([{
action: 'talk',
text: 'Please enter a phone number in international format, omitting the leading plus sign. End with the pound key.'
},
{
action: 'input',
type: ['dtmf'],
dtmf: {
timeOut: 10,
maxDigits: 15,
submitOnHash: true
},
eventUrl: ["https://europe-west2-my-proxy-calling-project.cloudfunctions.net/proxy-call"]
}
]) 2.2 Anruf mit DTMF-Eingang verbinden
Sobald die Ziffern erfasst wurden, stellt Vonage eine weitere Anfrage - standardmäßig POST - an unseren Endpunkt mit einer DTMF-Nutzlast im Anfragekörper. Dann muss ein zweiter NCCO mit einer connect Aktion zurückgegeben werden, um Sie mit der Zielnummer zu verbinden.
res.json([{
action: 'talk',
text: 'Connecting'
},
{
action: 'connect',
from: YOUR_VONAGE_NUMBER,
endpoint: [{
type: 'phone',
number: req.body.dtmf.digits
}]
}
])Dieses Call-Control-Objekt ähnelt dem ersten, außer dass wir die Zielnummer dynamisch setzen. req.body.dtmf.digits enthält die DTMF-Nutzdaten; siehe die Eingabe Webhook-Referenz für weitere Details zu den DTMF-Erfassungsergebnissen.
Das fertige Produkt
Führen wir nun alle beweglichen Teile zusammen! Wenn wir die drei besprochenen Schnipsel in die Ausgangsfunktion einfügen, ergibt sich der folgende Code:
// Get environment variables
const YOUR_VONAGE_NUMBER = process.env.YOUR_VONAGE_NUMBER;
const YOUR_PHONE_NUMBER = process.env.YOUR_PHONE_NUMBER;
exports.helloWorld = (req, res) => {
// Check if there's DTMF payload in the request body
if (req.body.dtmf) {
// (2.2) Connect call to the number in the DTMF payload
res.json([{
action: 'talk',
text: 'Connecting'
},
{
action: 'connect',
from: YOUR_VONAGE_NUMBER,
endpoint: [{
type: 'phone',
number: req.body.dtmf.digits
}]
}
])
} else {
// Check if you're the caller
if (req.query.from === YOUR_PHONE_NUMBER) {
// (2.1) Capture destination number via DTMF input
res.json([{
action: 'talk',
text: 'Please enter a phone number in international format, omitting the leading plus sign. End with the pound key.'
},
{
action: 'input',
type: ['dtmf'],
dtmf: {
timeOut: 10,
maxDigits: 15,
submitOnHash: true
},
eventUrl: ["https://europe-west2-my-proxy-calling-project.cloudfunctions.net/proxy-call"]
}
])
} else {
// (1) Connect caller to your phone number
res.json([{
action: 'talk',
text: 'Please wait while we connect you'
},
{
action: 'connect',
from: YOUR_VONAGE_NUMBER,
endpoint: [{
type: 'phone',
number: YOUR_PHONE_NUMBER
}]
}
])
}
}
};
Wenn Sie bereit sind, klicken Sie auf DEPLOY. Es kann etwa eine Minute dauern, bis die Bereitstellung erfolgt, haben Sie etwas Geduld :) Sobald ein grünes Häkchen neben Ihrer Funktion erscheint, können Sie sie testen!
Function deployed
Ihr Anrufweiterleitungsdienst ist aktiv, also probieren Sie ihn aus! Noch besser: Lassen Sie einen Freund Ihre virtuelle Nummer anrufen - so können Sie beide Anrufrichtungen testen.
Wie geht es weiter?
Herzlichen Glückwunsch! Sie haben soeben einen Proxy-Aufrufdienst mit einer kleinen Google Cloud-Funktion erstellt!
Sind Sie bereit, weiter zu gehen? Haben Sie einen Anwendungsfall, der die Aufzeichnung von Anrufen erfordert? Mehrere Numbers sollen den Dienst nutzen können? Sowohl Sprach- als auch DTMF-Eingaben akzeptieren?
Werfen Sie einen Blick auf die nachstehenden Ressourcen und überlegen Sie, wie Sie sie erweitern können. Lassen Sie uns wissen, wie Sie vorankommen, und wir würden uns freuen, Ihre Gedanken zu hören!
Ressourcen
In Zukunft möchten Sie Ihre Funktionen vielleicht lokal entwickeln und testen. Sehen Sie sich den Leitfaden Cloud-Funktionen Lokale Entwicklung um herauszufinden, wie Sie loslegen können.
Teilen Sie:
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.
