Sprachbot mit Google Dialogflow
Einführung
Dieser Leitfaden zeigt Ihnen, wie Sie mit Dialogflow Essentials und einer Vonage WebSockets-Integration einen Telefonanruf an einen Dialogflow-Agenten tätigen können.
Das folgende Diagramm zeigt einen Überblick über die Architektur.

Voraussetzungen
Um die in den folgenden Schritten beschriebenen Aktionen durchführen zu können, müssen Sie eine Datei erstellen:
Einen Dialogflow-Agenten erstellen
Dialogflow ist eine Software as a Service (SaaS) und eine Plattform für das Verstehen natürlicher Sprache, die für die Entwicklung dialogorientierter Benutzeroberflächen verwendet wird.
Ein Agent ist eine Dialogflow-Instanz, die Sie sich als Ihre Chatbot-Anwendung vorstellen können. Er ermöglicht es Ihnen, das, was die Benutzer sagen, auf Beabsichtigungen und ihnen Antworten zu geben.
Folgen Sie den Schritten
- Öffnen Sie die Dialogablaufkonsole
- Erstellen Sie einen Agenten, indem Sie ihm einen Namen geben, die Standardsprache einstellen, die Zeitzone wählen und auf die Schaltfläche zum Erstellen eines Agenten klicken. Die Schaltfläche kann entweder als
CreateoderCreate Agent - Klicken Sie im Menü auf der linken Seite auf das Zahnradsymbol
- Klicken Sie unter Google Project auf den Namen der Projekt-ID. Zum Beispiel,
VonageDFDies führt Sie zur Seite Google Cloud-Konsole

Erstellen Sie ein Service-Konto in der Google Cloud-Konsole
Wir werden die grafische Benutzeroberfläche verwenden, um unser Google Cloud-Projekt und unsere Ressourcen über die Google Cloud-Konsole zu verwalten, wobei wir dasselbe Projekt verwenden, das in Dialogflow erstellt wurde. In den folgenden Schritten werden wir ein Service-Konto für die Zugriffskontrolle und Authentifizierung erstellen.
Folgen Sie den Schritten
- Von der Google Cloud-Konsoleklicken Sie auf
Go to project settings - Klicken Sie im Menü auf der linken Seite auf
Service accounts - Klicken Sie in der oberen Leiste auf
+ Create Service Account - Geben Sie ihm einen Namen für den Service Account, den Sie sich merken können, z. B.
VonageDF - Beschreibung eines Servicekontos hinzufügen
- Klicken Sie auf
Create and Continue - Unter
Grant this service account access to project, filtern und die Rolle auswählenDialogflow API Admin

Sie gelangen nun zurück zur Seite Service Accounts
- Klicken Sie auf die drei Punkte unter
action - Klicken Sie auf
Manage keys - Klicken Sie auf
Add Key - Klicken Sie auf
Create new Key - Wählen Sie
JSON - Klicken Sie auf
Create - Sie können eine sehen
.jsonDatei heruntergeladen wurde. Wir fügen diese Datei der Datei Dialogflow-Referenzverbindung GitHub-Repository werden wir im nächsten Schritt klonen

Einrichten der Dialogflow-Referenzverbindung
Die Dialogflow-Referenzverbindung nutzt die WebSockets-Funktion der Vonage Voice API. Wenn ein Sprachanruf aufgebaut wird, löst eine Voice API-Anwendung eine WebSocket-Verbindung mit dem Dialogflow-Referenz-Verbindung. Es streamt die Audiosignale in Echtzeit zum und vom Anrufer.
In den folgenden Schritten werden wir zwei Optionen als Beispiele angeben. Verwendung von ngrok, um den Verbindungsserver zu tunneln, der mit unserem Dialogflow-Agenten interagiert, und ihn auf Heroku bereitzustellen.
Folgen Sie den Schritten
- Klonen Sie die
dialogflow-reference-connectionRepository von GitHub und ändern Sie das Verzeichnisgit clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection - Öffnen Sie den Code in Ihrem bevorzugten IDE oder Texteditor
- Fügen Sie die
.jsonDatei, die Sie heruntergeladen haben, in das Stammverzeichnis des Projekts - Erstellen einer
.envDatei aus der.env.example - Befüllen Sie die Umgebungsvariablen:
GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow>GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json>Vom Terminal aus: - Installieren Sie die Abhängigkeiten
npm install - Starten Sie die Datei Dialogflow connecting server
node df-connecting-server.jsEs gibt viele Bereitstellungsarten, z. B. App Engine, Heroku, Cloud Run.
In diesem Leitfaden werden wir Beispiele für die Verwendung der ngrok Tunnelbau. Hier ist ein Link, der mehr über ngrok erklärt und Heroku.
Option 1: Beispiel mit ngrok
- ausführen.
ngrok http 5000 - Notieren Sie sich die in der Konsole gefundene URL (z. B.
xxxx.ngrok.io). Wir werden diese Informationen in derDF_CONNECTING_SERVERArgument des Teils "Einrichten der Dialogflow Voice API Beispielanwendung" des Handbuchs

Option 2: Beispiel mit Heroku
- Installieren Sie git
- Installieren Sie Heroku-Befehlszeile und melden Sie sich bei Ihrem Heroku Account an
- Wenn Sie noch kein lokales Git-Repository haben, erstellen Sie eines:
git init - Beginnen Sie mit der Erstellung dieser Anwendung auf Heroku von der Kommandozeile aus mit der Heroku CLI. Hinweis: Ersetzen Sie in dem unten stehenden Befehl
thisappnamemit einem eindeutigen Namen auf der gesamten Heroku-Plattform.heroku create thisappname - Klicken Sie in Ihrem Heroku-Dashboard, wo Ihre Anwendungsseite angezeigt wird, auf
Settingsfügen Sie Folgendes hinzuConfig Varsund setzen sie mit ihren jeweiligen Werten:
- Bereitstellen der Anwendung
git push heroku masterodergit push heroku mainje nach dem Namen Ihrer Niederlassung. - Notieren Sie sich die in der Konsole gefundene URL (z. B.
thisappname.herokuapp.com). Wir werden diese Informationen in derDF_CONNECTING_SERVERArgument des Teils "Einrichten der Dialogflow Voice API Beispielanwendung" des Handbuchs
Einrichten Ihrer Vonage Voice API Application Credentials und Telefonnummern
Folgen Sie den Schritten
- Erstellen Sie eine Applikation aus dem Vonage API Dashboard
- Geben Sie der Anwendung einen Namen, zum Beispiel
VonageDF - Klicken Sie auf die Schaltfläche, um einen öffentlichen und einen privaten Schlüssel zu generieren, einen
private.keyDatei heruntergeladen werden. Wir werden sie im nächsten Abschnitt dieses Handbuchs zur Dialogflow Voice API Beispielanwendung hinzufügen - Verknüpfen Sie eine Rufnummer mit dieser Anwendung. Wenn Sie noch keine haben, klicken Sie im Menü auf der linken Seite auf
Numbersund dannBuy Numbersund folgen Sie den Schritten, um es zu kaufen
Wir werden die Dialogflow Voice API-Beispielanwendung einrichten und bald auf dieses Vonage-Anwendungs-Dashboard zurückkommen, um weitere Informationen hinzuzufügen.
Einrichten der Dialogflow Voice API-Beispielanwendung
Diese Beispielanwendung verwendet die Vonage Voice API, um eingehende Sprachanrufe zu beantworten und eine WebSocket-Verbindung einzurichten, um für jeden Anruf Audiodaten zur und von der Dialogflow-Referenzverbindung zu streamen.
Die Dialogflow-Referenzverbindung Code wird:
- Senden Sie Audio an den Dialogflow-Agenten aus der Sprache des Anrufers,
- Streamen Sie Audioantworten vom Dialogflow-Agenten über den WebSocket an den Anrufer,
- Rückmeldung von Echtzeit-Transkripten und Bewertungen des Sprachgefühls des Anrufers über Webhooks-Rückrufe an diese Voice API Beispielanwendung.
Sobald diese Anwendung ausgeführt wird, rufen Sie die mit Ihrer Anwendung verknüpfte Telefonnummer an, um per Sprache mit Ihrem Dialogflow-Agenten zu kommunizieren.
Wir werden ngrok verwenden, um den Verbindungsserver zu tunneln, der mit unserem Dialogflow-Agenten interagiert. Wenn Sie jedoch ein Beispiel mit Heroku sehen möchten, können Sie die Schritte von Dialogflow Voice API Beispielanwendung von GitHub.
Folgen Sie den Schritten
- Klonen Sie von Ihrem Terminal aus die Dialogflow Voice API Beispielanwendung von GitHub und ändern Sie das Verzeichnis
git clone https://github.com/nexmo-community/dialogflow-sample-voice-application && cd dialogflow-sample-voice-applicationSie können die unten beschriebenen Schritte weiter ausführen oder aus der Readme-Datei des Dialogflow Voice API Beispielanwendung - Fügen Sie die
private.keyaus dem Vonage Dashboard generiert und auf Ihren Rechner in das Stammverzeichnis des Projekts heruntergeladen - Von der
.env.exampleErstellen einer.envDatei - Befüllen Sie die Umgebungsvariablen mit den Informationen, die auf der Seite Vonage API Dashboard
- Die
SERVICE_NUMBERist die virtuelle Nummer, die Sie erworben haben. Denken Sie daran, die Landesvorwahl ohne 00 oder + vorher hinzuzufügen - Die
DF_CONNECTING_SERVERist der Server aus der Dialogflow-Referenz, die Sie bereits laufen haben (der, den Sie zuvor notiert haben)
Installieren Sie die Abhängigkeiten
npm installFühren Sie die
df-application.jsnode df-application.jsNachfolgend finden Sie die nächsten Schritte für ngrok bzw. für Heroku:Option 1: Nachfolgend die Schritte mit ngrok
Führen Sie in einer separaten Registerkarte des Terminals
ngrok http 8000Gehen Sie zurück auf die Vonage Dashboard-Website und wählen Sie den Menüpunkt Funktionen:Schalten Sie Voice ein, um diese Funktion zu aktivieren
Fügen Sie die ngrok-URL hinzu, die auf
dialogflow-sample-voice-applicationgefolgt von/answerauf die Antwort-URL. Stellen Sie sicher, dass HTTP GET ausgewählt ist.Fügen Sie die ngrok-URL hinzu, die auf
dialogflow-sample-voice-applicationgefolgt von/eventauf die Ereignis-URL. Stellen Sie sicher, dass HTTP POST ausgewählt ist.Klicken Sie auf Änderungen speichern

Option 2: Nachfolgende Schritte mit Heroku
- Wenn Sie noch kein lokales Git-Repository haben, erstellen Sie eines in einem separaten Terminal-Tab:
git init - Beginnen Sie mit der Erstellung dieser Anwendung auf Heroku von der Kommandozeile aus unter Verwendung der Heroku CLI. Hinweis: Ersetzen Sie im Befehl
myappnamemit einem eindeutigen Namen auf der gesamten Heroku-Plattform.heroku create myappname - Klicken Sie in Ihrem Heroku-Dashboard, wo Ihre Anwendungsseite angezeigt wird, auf
Settingsfügen Sie Folgendes hinzuConfig Varsund setzen Sie sie mit den entsprechenden Werten aus Ihrer.envDatei.
Fügen Sie auch den Parameter PRIVATE_KEY_FILE mit dem Wert ./private.key
- Klicken Sie in Ihrem Heroku-Dashboard, in dem Ihre Anwendungsseite angezeigt wird, auf die Schaltfläche
Open Appund kopieren Sie die URL - Lassen Sie uns nun die Anwendung bereitstellen. Gehen Sie zurück zur Vonage Dashboard-Website und wählen Sie unter capabilities:
- Schalten Sie Voice ein, um diese Funktion zu aktivieren
- Das
hostname(die URL, die Sie von Heroku kopiert haben) wird verwendet, gefolgt von/answerauf der Antwort-URL. Stellen Sie sicher, dass HTTP GET ausgewählt ist. - Machen Sie dasselbe für
/eventauf die Ereignis-URL. Stellen Sie sicher, dass HTTP POST ausgewählt ist. - Klicken Sie auf Änderungen speichern

Verbesserung des Dialogflow-Agenten
Wenn Sie an dieser Stelle des Leitfadens versuchen würden, die Telefonnummer anzurufen, könnten Sie mit dem Ausgangspunkt des Gesprächs aus der Dialogflow-Perspektive interagieren, dem Default Welcome Intent.
Aus der Liste der Benutzerantworten würde eine Nachricht an den Anrufer zurückgeschickt werden. Aber das Gespräch würde nicht weitergehen, da wir keine anderen Daten für andere Gesprächsrunden trainiert haben.
Lassen Sie uns einen Schritt zurückgehen und einige der Concepts von Dialogflow erkunden, um die Äußerungen der Benutzer hinzuzufügen, sie mit einer Antwort zu versehen und das Ende der Konversation hinzuzufügen, so dass Sie sehen können, wie eine vollständige Konversation abwechselnd stattfindet.
Sobald Sie einen Agenten erstellt haben, erstellen Sie Intents, die die Konversation steuern und gestalten.
Im Falle einer Benutzeräußerung gleicht Dialogflow das Gesagte mit einer Absicht ab, die auf dem NLP und den Trainingssätzen basiert, die ein Benutzer möglicherweise sagen könnte, um dieser Absicht zu entsprechen. Sobald die Absichtsklassifizierung erfolgt ist, wird eine Antwort an den Benutzer zurückgeschickt.
Entitäten sind die Arten von Informationen, die wir aus dem Gespräch extrahieren werden. In dem unten beschriebenen Anwendungsfall buchen wir einen Tisch per Telefonanruf. Die Informationen, die wir aus dem Gespräch extrahieren werden, sind person, date und time.
Verbessern wir den Standard-Willkommens-Intent, erstellen wir einen Intent, skizzieren wir die Entitäten und fügen wir ein Ende der Konversation hinzu und testen wir es.
Folgen Sie den Schritten
- Öffnen Sie die Dialogablaufkonsole und vergewissern Sie sich, dass Sie im richtigen Agenten für diesen Leitfaden sind
- Klicken Sie auf das
Default Welcome Intent - Scrollen Sie nach unten, löschen Sie die Antworten und fügen Sie sie hinzu:
Welcome to our Demonstration Restaurant. When and for whom would you like to book a table? - Speichern anklicken
- Klicken Sie auf den Menüpunkt Intents
- Klicken Sie auf die Schaltfläche New Intent
- Geben Sie ihm den Namen
Table Booker - Fügen Sie unter Trainingsphrasen die folgenden Trainingsphrasen hinzu
- Einen Tisch für Nicole am 10. um 13:00 Uhr, bitte.
- Kann ich am 10.12.2021 um 14:00 Uhr einen Platz für Joseph buchen?
- Ich möchte einen Tisch am 10/09/2020 um 16:00 Uhr für Amanda reservieren.
Sie werden feststellen, dass bei der Eingabe dieser Sätze einige Wörter farblich hervorgehoben werden. Klicken Sie doppelt auf die Wörter und vergewissern Sie sich, dass sie die richtigen Einheiten verwenden.
@sys.person,@sys.dateund@sys.time.
- Klicken Sie unter Aktionen und Parameter auf
requiredfürperson,dateundtime - Fügen Sie Aufforderungen für jeden der Parameter hinzu, denn falls sie diese spezifischen Informationen während des Gesprächs nicht gesagt haben, werden sie aufgefordert, sie hinzuzufügen

- In der Antwort können Sie Folgendes hinzufügen:
Table booked for $person at $time on $date. Thank you! - Umschalten auf
Set this intent as end of conversation, unter Antworten - Speichern anklicken

Interaktion per Sprache mit dem Dialogflow-Agenten
Nun, da wir alle Teile eingerichtet haben, ist es an der Zeit, Ihre virtuelle Telefonnummer anzurufen und sie auszuprobieren. Lassen Sie uns durchgehen, was vor sich geht, und folgen Sie dann unserem letzten Schritt, um den Anruf zu tätigen!
Sobald Sie die Telefonnummer anrufen, die mit Ihrer Voice API-Anwendung verknüpft ist, um mit dem Dialogflow-Agenten zu interagieren
Sie werden die Bestätigungsmeldung hören: Connecting your call, please wait.. Dieser Text To Speech von der Vonage API-Plattform wird abgespielt, sobald die Plattform Ihren Anruf entgegennimmt.
Sobald die WebSocket-Verbindung hergestellt ist, spielt die Vonage API-Plattform die Text To Speech Hello an den Dialogflow-Agenten (Sie als Anrufer werden das nicht hören).
Sie haben nun die Einstellungen vorgenommen, die Ihnen der Dialogflow-Agent vorliest.
An dieser Stelle interagieren Sie mit den Absichten, die Sie im vorherigen Abschnitt dieser Anleitung eingerichtet haben, um einen Tisch zu buchen.
Sie sehen die Transkriptionen in der Dialogflow-Referenzanwendungskonsole und in der Dialogflow-Beispielanwendungskonsole für die Sprach-API.
Wenn Sie die Ergebnisse der Stimmungsanalyse sehen möchten, müssen Sie die Cloud Natural API in der Google Cloud-Konsole aktivieren. Wenn sie nicht aktiviert ist, erhalten Sie eine Fehlermeldung ähnlich der folgenden PERMISSION_DENIED: Cloud Natural Language API has not been used in project xxxx before or it is disabled.
Gehen wir nun zum letzten Schritt über und sehen wir uns alle Bausteine zusammen in Aktion an!
Folgen Sie den Schritten
Rufen Sie die mit Ihrer Voice API-Anwendung verknüpfte Telefonnummer an und interagieren Sie mit dem Dialogflow-Agenten
Hier ist eine Möglichkeit, wie Sie das Gespräch testen können:
- Vonage Websocket: Ihr Anruf wird verbunden, bitte warten.
- Bot: Willkommen in unserem Vorführrestaurant. Wann und für wen möchten Sie einen Tisch reservieren?
- Sie: Ich möchte einen Tisch am 01.09.2022 um 10:00 Uhr für Tanya reservieren.
- Antwort des Botschafters: Tisch reserviert für Tanya um 10:00 am 01/09/2022. Dankeschön!
Ende des Gesprächs
Herzlichen Glückwunsch
Sie haben diese Anleitung zum Tätigen von Anrufen an einen Dialogflow-Agenten mithilfe einer Vonage WebSockets-Integration abgeschlossen.
Ressourcen
Sie finden die Dialogflow-Referenzbeispiel und Beispiel einer Voice Application auf GitHub.
Prüfen Sie die WebSockets-Referenzhandbuch.
Prüfen Sie die Ein Blogbeitrag, der ngrok erklärt.
Sie können sich auch ein ähnliches Beispiel ansehen, bei dem ein Amazon Lex Bot.