Dialogflow-gestützten RBM-Agent erstellen (erweitert)

In diesem Codelab erfahren Sie, wie Sie mit Dialogflow eine dialogorientierte Schnittstelle erstellen, die einen RBM-Agent unterstützt.

Was möchten Sie in diesem Codelab erstellen?

  • Ein Dialogflow-Agent, der die Unterhaltung eines RBM-Agents unterstützt
  • Eine dialogorientierte Oberfläche für ein fiktives Fahrradgeschäft, in der Nutzer Informationen zum Fahrradgeschäft abrufen und Termine zur Reparatur oder Reparatur des Fahrrads festlegen

Inhalt dieses Artikels

  • Mit den drei Hauptkonstrukten von Dialogflow (Intents, Entitäten und Kontexte) eine dialogorientierte Schnittstelle erstellen
  • Anleitung zum Verbinden Ihrer dialogorientierten Schnittstelle mit Ihren eigenen Diensten und APIs über die Auftragsausführung und den Inline-Editor von Dialogflow (unterstützt durch Cloud Functions for Firebase)
  • RBM-Antworttypen in Dialogflow erstellen, um Nutzern eine umfassende RBM-Umgebung zu bieten

Ausrüstung

  • Ein Google-Konto

Ersten Agent erstellen und abfragen

Dauer: 10:00

Ersten Dialogflow-Agent erstellen

So erstellen Sie einen Dialogflow-Agent:

  1. Öffnen Sie einen neuen Tab und melden Sie sich in Dialogflow an.
  2. Klicken Sie im linken Navigationsbereich auf Agent erstellen.

  3. Geben Sie „CodelabRBMBikeShop“ als Namen des Agents als Sprache ein und legen Sie die Standardzeitzone auf Ihre Zeitzone fest. Klicken Sie dann auf Erstellen.

Dialogflow-Konsole

Sie sollten jetzt die Dialogflow-Konsole sehen. Wenn Sie auf einem kleineren Bildschirm arbeiten und die linke Navigationsleiste ausgeblendet ist, klicken Sie oben links auf die Navigationsschaltfläche. Über die Schaltfläche „Einstellungen“ gelangen Sie zu den aktuellen Einstellungen des Agents.

In der Mitte der Seite wird eine Liste von Intents für den Agent angezeigt. Standardmäßig beginnen Dialogflow-Agents mit zwei Intents. Der Agent stimmt mit dem Standard-Fallback-Intent überein, wenn er nicht versteht, was Ihre Nutzer sagen. Mit dem Standard-Begrüßungs-Intent werden Nutzer begrüßt. Sie können diese Intents ändern, um die Websitevariante anzupassen.

Rechts sehen Sie den Dialogflow-Simulator. So können Sie den Agent ausprobieren, indem Sie Nachrichten sprechen oder eingeben.

Agent abfragen

Dialogflow-Agents werden am besten als NLU-Module (Natural Language Understanding) beschrieben. Diese können in Ihre Anwendung, Ihr Produkt oder Ihren Dienst aufgenommen werden, um Anfragen von natürlichen Nutzern in verwertbare Daten umzuwandeln.

Nun ist es an der Zeit, den Agent zu testen! Klicken Sie rechts im Simulator in das Textfeld Jetzt testen. Geben Sie "Hi" ein und drücken Sie die Eingabetaste.

Dialogflow identifiziert die Abfrage, entspricht dem Standard-Begrüßungs-Intent und antwortet mit einer allgemeinen Begrüßung. Dies funktioniert, da Dialogflow den Standard-Begrüßungs-Intent automatisch mit einigen Beispielbegrüßungen trainiert.

RBM-Agent erstellen

Melden Sie sich in der Business Communications Developer Console an und klicken Sie auf Agent erstellen.

Geben Sie im Feld „Name“ den Namen „Dein Fahrradladen“ ein (z. B. „Sans Fahrradladen“), wählen Sie eine Region aus und klicken Sie auf Agent erstellen.

RBM-Agent mit Dialogflow verbinden

Nachdem der RBM-Agent erstellt wurde, klicken Sie auf den Agent, um seine Übersichtsseite aufzurufen. Klicken Sie im linken Navigationsbereich auf den Link Integrationen.

Standardmäßig verwenden RBM-Agents Google Cloud Pub/Sub, um Nutzernachrichten zu verarbeiten. Klicken Sie auf die Einbindung von Dialogflow, um den RBM-Agent mit dem zuvor erstellten Dialogflow-Agent zu verbinden.

Klicken Sie im Dialogfeld auf Vorhandenes Modell verbinden. Folgen Sie der Anleitung, um Ihrem RBM-Agent Berechtigungen zum Aufrufen des Dialogflow-Agents zu gewähren. Klicken Sie dann auf Weiter.

Zum Schluss müssen Sie die Dialogflow-Projekt-ID angeben. Rufen Sie in einem anderen Browsertab als der Business Communications Developer Console Dialogflow auf und öffnen Sie den zuvor erstellten CodelabRBMBikeShop-Agent. Klicken Sie im linken Navigationsbereich auf das Zahnradsymbol neben dem Projektnamen.

Wenn Sie darauf klicken, gelangen Sie zu den Einstellungen des Modells. Suchen und kopieren Sie unter GOOGLE PROJECT die Projekt-ID.

Kehren Sie zu Ihrem Tab mit der geöffneten Business Communications Developer Console zurück, fügen Sie die Projekt-ID in das Dialogfeld ein und klicken Sie auf Integration starten.

Dieser Vorgang dauert etwa zwei Minuten. Anschließend sollte die Dialogflow-Integrationsoption hervorgehoben sein und der Link Agent anzeigen verfügbar sein.

Alle Nachrichten an und von Ihrem Agent werden jetzt vom Dialogflow-Agent CodelabRBMBikeShop verarbeitet.

Testgerät einladen und Nachricht senden

Bevor Sie sich mit Dialogflow befassen, richten Sie Ihr Testgerät ein. Wenn Sie bereits ein Gerät haben, das RBM-Nachrichten empfangen kann, folgen Sie dieser Anleitung, um Ihr Gerät vorzubereiten.

Klicken Sie in der Business Communications Developer Console im linken Navigationsbereich auf Geräte. Geben Sie im Formular die vollständige Telefonnummer Ihres Geräts im E.164-Format ein (z. B. +12223334444) und klicken Sie auf Hinzufügen.

Auf Ihrem Gerät erhalten Sie die Testeinladung. Tippen Sie auf Tester werden.

Suchen Sie in Ihrem Browser in der Geräteliste nach Ihrem Gerät und senden Sie ihm eine Testnachricht. Wenn Sie von Ihrem RBM-Agent eine Nachricht auf Ihrem Gerät erhalten haben, können Sie mit diesem Codelab fortfahren.

Begrüßungs-Intent erstellen

In der Regel starten Sie mit einem Dialogflow-fähigen RBM-Agent einen API-Aufruf, um die Telefonnummer des Nutzers und den Dialogflow-Intent, der die Unterhaltung beginnt, anzugeben (normalerweise der Begrüßungs-Intent des Agents). In diesem Codelab überspringen wir diesen Schritt und verwenden stattdessen den Unterhaltungs-Thread, den wir im vorherigen Schritt mit dem Testgerät aus der Business Communications Developer Console erstellt haben. Weitere Informationen zu dieser API-Funktion finden Sie in diesem Leitfaden.

Fügen Sie dem Standard-Begrüßungs-Intent zuerst RBM-Antworten hinzu, damit Dialogflow ihn mit Ihrem RBM-Agent verwenden kann. Rufen Sie zuerst den Browsertab auf, in dem Dialogflow geöffnet ist. Klicken Sie auf Default Welcome Intent (Standard-Begrüßungs-Intent), scrollen Sie nach unten zum Abschnitt Responses (Antworten), klicken Sie in der Liste der Antworttypen auf + und wählen Sie RCS Business Messaging (RBM) aus.

Klicken Sie auf Antworten hinzufügen und wählen Sie dann Einfache Antwort aus. Geben Sie in das Textfeld für die einfache Antwort Folgendes ein: „Hallo, willkommen bei Hogarths Fahrradladen“. Wie kann ich helfen? Ersetzen Sie Hogarth durch Ihren Namen. Klicken Sie dann auf Speichern.

Unterhaltung starten

Nachdem Sie einen Begrüßungs-Intent konfiguriert haben, kehren Sie zu Ihrem Testgerät zurück und senden die Nachricht „Hi"“. Diese Nachricht löst den Standard-Begrüßungs-Intent aus. Es sollte in etwa Folgendes angezeigt werden:

Begrüßungsabsicht aktualisieren

Da Sie nun eine einfache Nachricht von Dialogflow senden lassen, können wir die Nachricht etwas hilfreicher gestalten. Wir möchten nicht nur den Nutzer begrüßen, sondern auch zu seiner Handlung auffordern.

Der Kundenservicemitarbeiter, den wir erstellen, muss zwei Hauptfunktionen unterstützen: die Öffnungszeiten des Geschäfts prüfen und einen Termin vereinbaren. Wir ersetzen unsere einfache Begrüßungsnachricht durch eine Karte, die Antwortvorschläge für diese Interaktionen enthält.

Wählen Sie im Abschnitt Default Welcome Intent (Standard-Begrüßungs-Intent) unter Responses (Antworten) den Tab RCS Business Messaging (RBM) aus. Entfernen Sie die vorhandene einfache Antwort. Klicken Sie dazu auf das Papierkorbsymbol. Klicke dann auf Antworten hinzufügen und wähle Eigenständige Rich Card aus.

Geben Sie im Formular für die eigenständige Rich Card Folgendes ein:

  • Titel der Karte: Hallo und willkommen bei Hogarths Fahrradgeschäft.
  • Kartenbeschreibung: Wie kann ich dir helfen? Wählen Sie eine der folgenden Optionen aus:
  • Kartenausrichtung auswählen: Vertikal
  • Bild-/Video-URL: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Medienhöhe auswählen: mittel

Klicken Sie auf Vorschlag hinzufügen und geben Sie Folgendes ein:

  • Vorschlagstext: Wie sind Ihre Öffnungszeiten?
  • Postback für Vorschlag: response_hours

Klicken Sie auf Vorschlag hinzufügen, um einen weiteren Vorschlag hinzuzufügen, und geben Sie Folgendes ein:

  • Vorschlagstext: Termin vereinbaren
  • Postback für Vorschlag: response_appointment

Klicken Sie auf Speichern.

Selbst ausprobieren

Sobald das Modell sagt, dass das Agent-Training abgeschlossen ist, gehen Sie zurück zu Ihrem Gerät und senden Sie die Nachricht an Ihren Agent. Sie sollten jetzt die soeben erstellte eigenständige Rich Card sehen.

Tippen Sie auf Wie sind die Öffnungszeiten?. Der Standard-Fallback-Intent wird ausgelöst. Das liegt daran, dass der Dialogflow-Agent nicht weiß, wie die Postback-Daten verarbeitet werden sollen, die Sie für diesen Vorschlag konfiguriert haben: reply_hours"

Beheben wir das Problem.

Ihr Intent für Öffnungszeiten wird erstellt

Dialogflow verwendet Intents, um die Absichten eines Nutzers zu kategorisieren. Intents haben Trainingssätze, die Beispiele dafür sind, was ein Nutzer dem Agent sagen könnte. Wenn jemand wissen möchte, wann unser Fahrradgeschäft geöffnet hat, fragt er beispielsweise: „Wann haben Sie geöffnet?“, "Wie sind deine Öffnungszeiten?&"Wie spät kann ich sein?

Alle Anfragen sind einzigartig, haben aber dieselbe Absicht: Informationen darüber, wann unser Fahrradgeschäft geöffnet ist.

Erstellen Sie einen Intent mit der Bezeichnung „Öffnungszeiten“:

  1. Klicken Sie im linken Navigationsbereich auf das + neben Intents.
  2. Geben Sie unter Intent name (Intent-Name) „&Hours"“ ein.
  3. Klicken Sie unter Trainingsformulierungen auf Nutzerausdruck hinzufügen, geben Sie Folgendes ein und drücken Sie nach jedem Eintrag die Eingabetaste:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    Mit dieser letzten Trainingsformulierung werden die Postback-Daten zugeordnet, die Sie im vorherigen Abschnitt mit diesem Intent konfiguriert haben.

  4. Klicken Sie unter Antworten auf + und wählen Sie RCS Business Messaging (RBM) aus.

  5. Klicken Sie auf Antworten hinzufügen und wählen Sie Einfache Antwort aus.

  6. Geben Sie in das Textfeld für die einfache Antwort jeden Wochentag von 9:00 bis 17:30 Uhr ein.

  7. Klicken Sie auf Speichern.

Selbst ausprobieren

Fragen Sie jetzt den Kundenservicemitarbeiter nach seinen Öffnungszeiten. Geben Sie auf Ihrem Gerät in der Unterhaltung für Ihren RBM-Agent Folgendes ein: „Wann haben Sie geöffnet?“ und senden Sie die Nachricht an Ihren Agent.

Der Agent reagiert jetzt korrekt auf die Abfrage. Beachten Sie, dass sich Ihre Abfrage zwar von der Trainingsformulierung (&Wann ist geöffnet?) ab und umgekehrt. Dialogflow hat die Abfrage trotzdem dem richtigen Intent zugeordnet. Sie können auch auf der Rich-Karte auf Wie sind die Öffnungszeiten? tippen.

Dialogflow verwendet Trainingsformulierungen als Beispiele für ein Modell für maschinelles Lernen, um Abfragen den richtigen Intents zuzuordnen. Das Modell für maschinelles Lernen vergleicht die Abfrage mit jedem Intent im Agent, gibt jedem Intent eine Bewertung und der Intent mit der höchsten Bewertung wird zugeordnet. Wenn der Intent mit der höchsten Bewertung einen sehr niedrigen Wert hat, wird der Fallback-Intent abgeglichen.

Auftragsausführung wird hinzugefügt

Während er funktioniert, verhält sich der erstellte Agent etwas unnatürlich. Wenn der Nutzer eine Frage wie „Sind Sie geöffnet?“, antwortet der Kundenservicemitarbeiter mit „Wir sind jeden Wochentag von 9:00 bis 17:30 Uhr geöffnet“. Es wäre viel natürlicher und hilfreicher, wenn der Kundenservicemitarbeiter uns direkt mitteilen würde, ob der Laden geöffnet ist.

Dazu muss unser Agent überprüfen, ob der Shop derzeit geöffnet ist, und in beiden Fällen eine andere Antwort generieren. In Dialogflow sollte diese Art komplexer Komplexität im Webhook der Auftragsausführung implementiert werden.

Ein Webhook für die Auftragsausführung ist ein HTTP-Server, der von Dialogflow mit Informationen zum aktuellen Unterhaltungsstatus aufgerufen wird. Der Auftragsausführungscode führt alle erforderlichen Aktionen aus und generiert dann eine Antwort, die Dialogflow an den Nutzer zurückgibt.

Als Nächstes zeigen wir Ihnen, wie Sie einen Webhook für die Auftragsausführung bereitstellen, mit dem unser Kundenservicemitarbeiter schneller reagieren kann.

Einrichtung: Auftragsausführung bereitstellen und aktivieren

Dialogflow hat einen integrierten Cloud Functions for Firebase-Editor, mit dem Sie JavaScript schreiben und bereitstellen können, der die Auftragsausführung verarbeitet.

Klicken Sie im linken Navigationsbereich von Dialogflow auf Fulfillment (Auftragsausführung), um die Seite für die Auftragsausführung zu öffnen. Klicken Sie auf die Ein-/Aus-Schaltfläche neben Inline-Editor, um den Cloud Functions for Firebase-Editor zu aktivieren.

Sie werden feststellen, dass der Editor zwei Dateien enthält: "index.js", der den Hauptcode für die Auftragsausführung enthält, und "package.json" für die erforderlichen Abhängigkeiten.

Als Nächstes importieren wir einen Beispielcode für die Auftragsausführung.

Kopieren Sie den Text dieser Datei und fügen Sie ihn in "index.js" ein, wobei Sie den gesamten aktuellen Inhalt ersetzen:

https://storage.googleapis.com/df-rbm-codelab/index.js

Scrollen Sie zum Ende der Seite und klicken Sie auf DEPLOY (Bereitstellen). Nach etwa einer Minute wird Ihr Code in Cloud Functions for Firebase bereitgestellt.

Sobald die Funktion bereitgestellt wurde, werden unten auf der Seite Datum und Uhrzeit der Bereitstellung angezeigt:

Sehen Sie sich den Code für die Auftragsausführung an. Die Funktion hoursHandler ruft currentlyOpen auf, um zu ermitteln, ob der Laden derzeit geöffnet ist. Je nach Bedingung wird eine andere RBM-Antwort hinzugefügt.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

Über die Zeile intentMap.set('Hours', hoursHandler); wird der Bibliothek für die Auftragsausführung mitgeteilt, dass die Funktion hoursHandler ausgeführt werden soll, wenn der Intent „Stunden“ zugeordnet wird. Allerdings müssen Sie Dialogflow außerdem anweisen, die Auftragsausführung für unseren Intent zu aktivieren.

Klicken Sie im linken Navigationsbereich auf Intents und öffnen Sie den Intent „Stunden“. Öffnen Sie unten den Bereich Auftragsausführung und wählen Sie Webhook-Aufruf für diesen Intent aktivieren aus, damit er aktiviert wird.

Nachdem Sie den Intent gespeichert haben, können Sie ihn ausprobieren. Geben Sie rechts im Simulator „Geöffnet“ ein. Wenn Sie auf Diagnoseinformationen klicken und die API-Antwort überprüfen, sollten Sie die Auftragsausführungsantwort sehen. Beachten Sie, dass die vom Cloud Functions for Firebase-Server verwendete Zeitzone UTC ist. Daher ist die Antwort möglicherweise nicht korrekt für Ihre aktuelle lokale Zeit.

Wenn bei der Auftragsausführung ein Fehler auftritt, verwendet Dialogflow die Antwort, die im Abschnitt Responses der Seite Intent definiert ist, sodass der Agent ordnungsgemäß wiederhergestellt werden kann.

Im nächsten Schritt werden Entitäten verwendet, um die relevanten Teile der Suchanfrage des Nutzers zu extrahieren. So können unsere Nutzer einen Termin bei unserem Fahrradgeschäft vereinbaren, um ihr Fahrrad zu reparieren oder zu warten.

Daten mit Entitäten extrahieren

Dauer: 12:00

In diesem Abschnitt wird erläutert, wie Sie Daten aus der Suchanfrage eines Nutzers extrahieren, damit dieser einen Termin mit unserem Fahrradladen vereinbaren kann.

Parameter zu Intents hinzufügen

Parameter sind relevante Wörter oder Wortgruppen in der Abfrage eines Nutzers, die von Dialogflow extrahiert werden, damit der Agent eine entsprechende Antwort liefern kann. Sie erstellen einen neuen Intent mit Parametern und erfahren, wie Sie deren Werte in Ihre Antworten aufnehmen.

  1. Klicken Sie im linken Navigationsbereich neben Intents auf +, um einen neuen Intent zu erstellen.
  2. Geben Sie oben auf der Seite als Intent-Namen „Vortrag vereinbaren“ ein.
  3. Fügen Sie Folgendes als Trainingsformulierungen hinzu:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow erkennt bekannte Parameter in Ihren Trainingsformulierungen automatisch und erstellt sie für Sie.

Unter Trainingsformulierungen füllt Dialogflow automatisch die Parametertabelle mit den erfassten Informationen aus:

  • der Parameter ist optional (nicht erforderlich)
  • namens date und time
  • entspricht dem Systementitätstyp @sys.date und @sys.time**
  • hat den Wert $date und $time
  • ist keine Liste

Parameterdaten verwenden

Sie können den Wert eines Parameters in Ihren Antworten verwenden. In diesem Fall können Sie $date und $time in Ihren Antworten verwenden. Sie werden durch das Datum und die Uhrzeit ersetzt, die in der Abfrage an den Agent angegeben wurden.

Fügen Sie unter Antworten den Tab RCS Business Messaging hinzu, fügen Sie einer einfachen Antwort Folgendes hinzu und klicken Sie auf Speichern:

Great! I've set up your appointment for $date at $time.  See you then!

Selbst ausprobieren

Fragen Sie nun den Agent mit „Can I get a meeting for 14 Uhr morgen{/7} im Simulator im rechten Bereich ab.

Unten in der Simulatorausgabe sehen Sie, dass Dialogflow die Parameter &mich und morgen um 14 Uhr korrekt aus der Abfrage extrahiert und als Datum und Uhrzeit korrekt geparst hat. Führen Sie jetzt dieselben Schritte auf Ihrem Testgerät aus und sehen Sie sich an, wie die Antwort das geparste Datum und die Uhrzeit korrekt enthält.

Parameter erforderlich machen

In unserem Fahrradgeschäft müssen wir die Werte von Datum und Uhrzeit kennen, bevor wir einen Termin vereinbaren können. Standardmäßig sind alle Dialogflow-Parameter optional. Damit sie erforderlich werden, müssen wir das Kästchen neben jedem Parameter anklicken, den wir als erforderlich festlegen möchten. Klicken Sie das Kästchen neben jedem Parameter im Intent &Treffen Sie Folgendes an:

Jetzt, da jeder Parameter erforderlich ist, müssen wir für jeden Parameter eine Aufforderung erstellen. In Aufforderungen wird der Nutzer aufgefordert, einen Wert für einen beliebigen Parameter anzugeben, der nicht angegeben wurde, als der Nutzer ursprünglich seine Absicht angegeben hat (in diesem Fall, um einen Termin zu vereinbaren). Klicken Sie auf Aufforderungen definieren, um eine Eingabeaufforderung für einen Parameter zu erstellen, und geben Sie die folgenden Aufforderungen für jeden Parameter ein:

Parameter Eingabeaufforderung
date What day do you want to come in?
Zeit Welche Uhrzeit passt Ihnen?

Klicken Sie nach der Eingabe auf Speichern.

Selbst ausprobieren

Tippe auf deinem Gerät auf den Vorschlag Termin vereinbaren oder gib „Ich möchte mein Fahrrad reparieren“ ein. Sie erhalten die Antwort „An welchem Tag möchten Sie teilnehmen?“. Geben Sie ein Datum ("morg.") an und Sie erhalten eine Antwort, in der Sie um eine Uhrzeit am Datum bitten. Wenn Sie darauf antworten, sehen Sie, dass Ihr Termin vereinbart wurde.

Bei Abfragen, die einige Informationen in der ersten Anfrage enthalten (d.h. ich möchte einen Termin für morgen vereinbaren)&quot, geben Sie den richtigen Parameter (das Datum) ein, überspringen Sie die Eingabeaufforderung für das Datum ("An welchem Tag möchten Sie hereinkommen{/7}) und springen Sie zur Eingabeaufforderung für die Uhrzeit ("Welche Uhrzeit passt für Sie?{/7}).

Wir haben gerade Dialogflow-Entitäten und -Parameter verwendet, um eine komplett einzigartige Unterhaltung ohne Code und mit sehr wenig Konfiguration zu erstellen. Als Nächstes sehen wir uns an, wie Sie mithilfe der Auftragsausführung die Antworten der Nutzer auf Aufforderungen wie „Welches Datum möchten Sie vereinbaren?“ anbieten.

Einrichtung: Auftragsausführung aktivieren

Klicken Sie im linken Navigationsbereich auf Intents und öffnen Sie den Intent "Make Appointment" (Termin vereinbaren). Öffnen Sie die Auftragsausführung und wählen Sie Webhook-Aufruf für diesen Intent aktivieren und Webhook-Aufruf für Slot-Füllung aktivieren aus, sodass beide aktiviert sind. Klicken Sie dann auf Speichern.

Sind beide aktiviert, verwendet Dialogflow beim Auslösen dieses Intents bei Bedarf Antworten für die erforderlichen Parameter sowie die RBM-Antwort für den Intent.

Auftragsausführung implementieren

Klicken Sie im linken Navigationsbereich von Dialogflow auf Fulfillment (Auftragsausführung), um die Seite für die Auftragsausführung zu öffnen. Scrollen Sie nach unten zur Linie.

intentMap.set('Hours', hoursHandler);

Und fügen Sie in der nächsten Zeile Folgendes hinzu:

intentMap.set('Make Appointment', makeAppointment);

Dadurch wird der Bibliothek für die Auftragsausführung mitgeteilt, dass die Funktion makeAppointment ausgeführt werden soll, wenn der Intent „Termin vereinbaren“ zugeordnet wird.

Kopieren Sie als Nächstes den Code unten und fügen Sie ihn unter der Funktion currentlyOpen ein. Mit den beiden Funktionen getSuggestedTimes und getSuggestedDates werden hilfreiche Chiplisten erstellt, die Nutzerantworten erleichtern.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Kopieren Sie als Nächstes unter hoursHandler den Code und fügen Sie ihn ein. Klicken Sie dann auf Bereitstellen.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Nehmen Sie sich einige Minuten Zeit, um den Code zu prüfen. Die erforderlichen Parameter werden auf Werte geprüft. Ist dies nicht der Fall, werden dem Nutzer entsprechende Meldungen und Vorschläge angezeigt.

Selbst ausprobieren

Tippe auf deinem Gerät auf den Vorschlag Termin vereinbaren oder gib „Ich möchte mein Fahrrad reparieren“ ein. Sie erhalten die Antwort „Welcher Tag möchten Sie erhalten?“ sowie ein paar hilfreiche Vorschläge: "Morgen""Eine Woche ab jetzt&"Zwei Wochen ab jetzt. Geben Sie ein Datum (morgen) an und Sie erhalten eine Antwort, in der Sie um eine Zeit gebeten werden. Wenn Sie darauf antworten, sehen Sie, dass Ihr Termin festgelegt wurde.

Status mit Kontexten verwalten

Dauer: 7:00

Kontexte dem Unterhaltungsstatus hinzufügen

Nachdem unser Nutzer einen Termin eingerichtet hat, möchten wir möglicherweise weitere Informationen von ihm erfassen. Stellen Sie sich vor, unser Fahrradgeschäft bietet zwei Arten von Terminvereinbarungen: Reparatur oder Reparatur. Wir möchten wissen, welche davon der Nutzer benötigt.

Als Erstes müssen wir die Antwort auf die Absicht „Termin vereinbaren“ aktualisieren, um den Nutzer nach dem gewünschten Termintyp zu fragen. Ersetzen Sie die Erfolgsantwort in der makeAppointment-Auftragsausführung durch den folgenden Text und klicken Sie dann auf Bereitstellen.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Um die Antwort auf diese Frage zu erhalten, müssen wir einen weiteren Intent erstellen. Es ist jedoch wichtig, dass dieser neue Intent erst zugeordnet wird, nachdem diese Frage beantwortet wurde. Um dies zu erzwingen, können wir es als Follow-up-Intent definieren.

Follow-up-Intents sind Intents, die erst zugeordnet werden können, nachdem ihr Intent (in diesem Fall der Intent "Make Appointment") abgeglichen wurde. Klicken Sie im linken Navigationsbereich auf Intents. Falls das Menü ausgeblendet ist, klicken Sie oben links auf das Dreipunkt-Menü (...). Bewegen Sie dann den Mauszeiger auf den Intent „Make Agreement“ (Termin vereinbaren) und klicken Sie rechts neben dem Intent-Namen auf Follow-up-Intent hinzufügen:

Klicken Sie dann im Drop-down-Menü auf Benutzerdefiniert.

Dialogflow hat den Follow-up-Intent automatisch "& machen Sie einen Termin – benutzerdefiniert" und der Pfeil gibt die Beziehung zwischen den Intents an.

Follow-up-Intents können nur zugeordnet werden, nachdem der übergeordnete Intent zugeordnet wurde. Da dieser Intent nur nach dem Intent „Make Appointment“ (Termin vereinbaren) zugeordnet wird, können wir davon ausgehen, dass dem Nutzer gerade die Frage „Brauche ich eine Reparatur oder nur eine Optimierung“ gestellt wurde?

Um diese Frage zu beantworten, müssen einige Entitäten definiert werden.

Erste Entität erstellen

Mit Dialogflow können Sie Entwicklerentitäten definieren, die ähnlich wie die Systementitäten von Dialogflow funktionieren. Erstellen Sie zuerst einen Entitätstyp. Wir möchten, dass Nutzer selbst entscheiden können, welche Art von Termin sie in unserem Shop vereinbaren möchten. Deshalb rufen sie den Entitätstyp AppointmentType auf. Wir fügen im Entitätstyp AppointmentType zwei Entitäten für die beiden verschiedenen Arten von Terminen hinzu: service und fix.

So erstellen Sie einen Entitätstyp:

  1. Klicken Sie im linken Navigationsbereich neben Entitäten auf +.
  2. Geben Sie als Namen des Entitätstyps "AppointmentType" ein.
  3. Klicken Sie auf das Textfeld und fügen Sie die folgenden Einträge hinzu:
    • Dienst
    • korrigieren
  4. Wenn Sie einen Eintrag eingeben, wird der Cursor beim Drücken der Tabulatortaste in das Synonymfeld verschoben. Fügen Sie für jeden Eintrag die folgenden Synonyme hinzu. Sie müssen jedes Wort einzeln hinzufügen, anstatt den gesamten String zu kopieren und einzufügen:
Entry Synonym
Dienst
  • Dienst
  • Überarbeitung
  • Instandhaltungsarbeiten
  • Feinabstimmung
  • einschalten
korrigieren
  • korrigieren
  • repair
  • Ausbessern
  • fehlerhaft
  • Reifenreifen
  • konstant
  1. Klicken Sie auf Speichern.

Jeder Entitätstyp muss Folgendes haben:

  • Ein Name zur Definition der Kategorie ("AppointmentType")
  • mindestens ein Eintrag ("service", "fix")
  • ein oder mehrere Synonyme ("wartung", "tune up" usw.)

Dialogflow kümmert sich um einfache Dinge wie Pluralform und Großschreibung, aber achte darauf, dass alle möglichen Synonyme hinzugefügt werden. Je mehr Sie hinzufügen, desto besser kann der Agent Ihre Entitäten bestimmen.

Neues Element wird hinzugefügt

Nachdem Sie den Entitätstyp für den Termin definiert haben, können Sie ihn in den Trainingsformulierungen für den Intent "Termin vereinbaren – benutzerdefiniert" verwenden:

  1. Klicken Sie im linken Navigationsbereich auf Intents und dann auf den Pfeil neben dem Intent "Make Appointment" (Termin vereinbaren), um die Follow-up-Intents aufzurufen. Klicken Sie auf „Termin vereinbaren – Benutzerdefiniert“.
  2. Fügen Sie die folgenden Trainingsformulierungen hinzu:

    • Können Sie mein Fahrrad warten?
    • Ich benötige eine Reparatur.

  3. Der Terminentitätstyp sollte in den eingegebenen Trainingsformulierungen automatisch annotiert werden. Dadurch wird der Parameter AppointmentType der Tabelle hinzugefügt, die sich unter dem Abschnitt Trainingsformulierungen befindet. Klicken Sie auf das Kästchen, um diesen Parameter als REQUIRED zu markieren.

  4. Klicken Sie auf Aufforderungen definieren und geben Sie "Wir können Ihr Fahrrad reparieren oder reparieren" ein. Welchen möchtest du?{/7}

  5. Ändern Sie unter Antworten die Antwort in &quo;Wir planen einen $TerminType." und klicken dann auf Speichern.

Selbst ausprobieren

Tippe auf deinem Gerät auf den Vorschlag Termin vereinbaren oder gib „Ich möchte mein Fahrrad reparieren“ ein. Sie erhalten die Antwort „Welcher Tag möchten Sie erhalten?“ sowie ein paar hilfreiche Vorschläge: "Morgen""Eine Woche ab jetzt&"Zwei Wochen ab jetzt. Geben Sie ein Datum (morgen) an und Sie erhalten eine Antwort, in der Sie um eine Uhrzeit zum Datum gebeten werden.

Wenn Sie eine Uhrzeit auswählen, wird die neue Antwort angezeigt, in der Sie gefragt werden, ob es sich um einen Service oder eine Feinabstimmung handelt.

Geben Sie anschließend „Ich brauche einen Reparaturauftrag“ ein. Sie sollten die Antwort „OK, we're schedule a fix.“ sehen. Sie weist darauf hin, dass Dialogflow den korrekten Termintyp als Entität extrahiert hat.

Im Moment ist die Antwort auf diesen Intent ("Okay, wir planen eine Fehlerbehebung.") ziemlich wenig hilfreich. Es wäre toll, wenn Sie in der Antwort das Datum und die Uhrzeit für den geplanten Termin bestätigen könnten. Dazu sind Datum und Uhrzeit erforderlich. Die Datums- und Uhrzeitparameter sind jedoch nur im Intent "Termin vereinbaren" und nicht im Intent "Termin vereinbaren – benutzerdefiniert" enthalten.

Intents und Kontexte

Wenn Sie mit einem Parameter antworten möchten, der aus dem Intent "Make Appointment" (Terminvereinbarung) erfasst wurde, müssen Sie wissen, wie Follow-up-Intents funktionieren. Follow-up-Intents verwenden Kontexte, um zu verfolgen, ob ein übergeordneter Intent ausgelöst wurde. Wenn Sie den Intent „Make Agreement“ (Termin vereinbaren) sehen, sehen Sie als Ausgabekontext „MakeDate-Followup&up“ als Ausgabe mit dem Präfix 2:

Nachdem der Intent „Make Appointment“ (Termin vereinbaren) zugeordnet wurde, hängt Dialogflow den Kontext für zwei Runden an die Unterhaltung an. Wenn der Nutzer also auf die Frage antwortet („Brauchen Sie eine Reparatur oder nur eine Feinabstimmung“, ist der Kontext aktiv?). Alle Intents mit demselben Eingabekontext werden stark bevorzugt, wenn Dialogflow Intents zuordnet.

Klicken Sie im linken Navigationsbereich auf Intents und dann auf den Intent "MakeAppointment – custom".

Sie sehen, dass der Intent denselben Eingabekontext ("MakeAppointment-Followup") hat wie der Ausgabekontext von „Make Appointment“ (Termin vereinbaren). Daher wird „MakeTermin – benutzerdefiniert“ erst nach dem Abgleich mit dem Intent „Termin vereinbaren“ abgeglichen.

Kontexte und Parameter

Kontexte speichern Parameterwerte. Das heißt, Sie können auf die Werte von Parametern zugreifen, die in "Intent" festlegen{/1}, in Intents in anderen Intents wie "MakeTermin – benutzerdefiniert".

Fügen Sie dem Intent "MakeAppointment – custom" die folgende Antwort hinzu und klicken Sie auf Speichern: "Okay, wir vereinbaren einen Termin für $TerminType, #MakeTermin- Followup.date um #MakeTermin-Followup.time. Wir sehen uns dann."

Wenn Sie den Agent jetzt noch einmal abfragen, erhalten Sie die richtige Antwort. Geben Sie zuerst Folgendes ein: „Kann ich einen Termin vereinbaren, um mein Fahrrad morgen um 11:00 Uhr zu warten?“, und dann auf die Frage mit „Ich brauche einen Reparaturauftrag“ antworten.

In der Antwort zur Bestätigung des Termins sollten Sie sehen, dass die Parameterwerte für Datum und Uhrzeit aus dem Kontext abgerufen wurden.

Antwortformat verbessern

Dauer: 5:00

Datum und Uhrzeit mithilfe der Auftragsausführung formatieren

Wie Sie vermutlich schon bemerkt haben, sind Datum und Uhrzeit in der Erfolgsmeldung nicht besonders nutzerfreundlich. Um dies zu beheben, müssen wir die Auftragsausführung noch einmal verwenden, damit wir die Datums- und Zeitparameter mithilfe von JavaScript so formatieren können, dass der Nutzer sie problemlos lesen kann.

Rufen Sie den gewünschten Termin auf, indem Sie im linken Navigationsbereich auf Intents und dann auf den Intent „MakeAppointment – custom"“ klicken. Scrollen Sie zum Ende der Seite und aktivieren Sie Webhook-Aufruf für diesen Intent aktivieren. Klicken Sie dann auf Speichern.

Klicken Sie im linken Navigationsbereich auf den Link „Auftragsausführung“, um die Auftragsausführung aufzurufen. Kopieren Sie den Code unten und fügen Sie ihn unter der Funktion makeAppointment ein.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Suchen Sie unter dieser Funktion nach der Zeile intentMap.set('Make appointment', makeAppointment); und fügen Sie intentMap.set('Make appointment - custom', makeAppointmentFollowUp); hinzu, damit die zuvor eingefügte Funktion beim Aufrufen des Follow-up-Intents aufgerufen wird.

Sehen Sie sich den Code makeAppointmentFollowUp an und erfahren Sie, wie die Parameter sowohl aus dem eingehenden Kontext als auch aus diesem Intent extrahiert werden. Vor dem Generieren von responseText werden nun das Datum und die Uhrzeit im Code für Menschen lesbar formatiert.

Selbst ausprobieren

Tippe auf deinem Gerät auf den Vorschlag Termin vereinbaren oder gib „Ich möchte mein Fahrrad reparieren“ ein. Sie erhalten die Antwort „Welcher Tag möchten Sie erhalten?“ sowie ein paar hilfreiche Vorschläge: "Morgen""Eine Woche ab jetzt&"Zwei Wochen ab jetzt. Geben Sie ein Datum (morgen) an und Sie erhalten eine Antwort, in der Sie um eine Uhrzeit zum Datum gebeten werden.

Wenn Sie eine Uhrzeit auswählen, wird die neue Antwort angezeigt, in der Sie gefragt werden, ob es sich um einen Service oder eine Feinabstimmung handelt.

Geben Sie anschließend „Ich brauche einen Reparaturauftrag“ ein. Die Antwort sollte den Termin mit dem Termintyp, dem Datum und der Uhrzeit in einem lesbaren Format bestätigen.

Fertig!

Dauer: 1:00

Gut gemacht!

Sie haben jetzt alle Phasen des Erstellens eines von Dialogflow unterstützten RBM-Agents durchlaufen.

Viel Spaß bei der Entwicklung für diese spannende neue Plattform!