Informationen zur Auftragsausführung durch Einbindung von Dialogflow in Google Kalender

1. Hinweis

In diesem Codelab erfahren Sie, wie Dialogflow mit Backend-Systemen verbunden wird, um umfassende und dynamische Antworten auf Nutzerfragen zu liefern.

Vorbereitung

Bevor Sie fortfahren, müssen Sie die folgenden Codelabs durcharbeiten:

  1. Terminplaner mit Dialogflow erstellen
  2. Dialogflow in Actions on Google einbinden
  3. Entitäten in Dialogflow verstehen

Außerdem müssen Sie die grundlegenden Konzepte und Konstrukte von Dialogflow kennen. Diese können Sie den folgenden Videos im Lernpfad Chatbot mit Dialogflow erstellen entnehmen.

Lerninhalte

  • Was ist Fulfillment?
  • Dienstkonto für Google Kalender einrichten
  • Google Kalender einrichten
  • Auftragsausführung in Dialogflow aktivieren
  • Auftragsausführung testen

Aufgaben

  • Fulfillment mit Cloud Functions
  • Eine Integration zwischen Dialogflow und Google Kalender

Voraussetzungen

  • Ein Webbrowser und eine E‑Mail-Adresse für die Anmeldung in der Dialogflow-Konsole
  • Ein Google-Konto für den Zugriff auf Google Kalender

2. Was ist Fulfillment?

Die Auftragsausführung ist als Webhook errichteter Code, mit dem der Dialogflow-Agent die Geschäftslogik auf Intent-Basis aufrufen kann. Während einer Unterhaltung können Sie mithilfe der Auftragsausführung die Informationen verwenden, die vom Natural Language Processing-System von Dialogflow extrahiert wurden, um dynamische Antworten zu generieren oder Aktionen im Back-End auszulösen. Die meisten Dialogflow-Agents verwenden Fulfillment.

Nachfolgend finden Sie einige Beispiele, in denen Sie einen Agent mithilfe der Auftragsausführung erweitern können:

  • Generieren von dynamischen Antworten basierend auf Informationen aus einer Datenbank
  • Bestellungen basierend auf Produkten aufgeben, nach denen ein Kunde gefragt hat
  • Implementieren der Regeln und Gewinnbedingungen für ein Spiel

3. Calendar API aktivieren

  1. Klicken Sie in der Dialogflow-Konsole auf d7d792687e597dd5.png.
  2. Scrollen Sie auf dem Tab Allgemein zu Projekt-ID und klicken Sie dann auf Google Cloudf2bffd4fcdb84fa9.png.

34be16fcd4c5aeff.png

  1. Klicken Sie in der Google Cloud Console auf das Navigationsmenü ☰ > APIs & Dienste > Bibliothek.
  2. Suchen Sie nach „Google Calendar API“ und klicken Sie dann auf Aktivieren, um die API in Ihrem Google Cloud-Projekt zu verwenden.

4. Dienstkonto einrichten

  1. Klicken Sie auf das Navigationsmenü ☰ > APIs & Dienste > Anmeldedaten.
  2. Klicken Sie auf Anmeldedaten erstellen > Dienstkonto.

86f51af0e7886fdd.png

  1. Geben Sie unter Dienstkontodetails „appointment-scheduler“ als Name des Dienstkontos ein und klicken Sie dann auf Erstellen.

845d25f3e07ff770.png

  1. Klicken Sie unter Diesem Dienstkonto Zugriff auf das Projekt erteilen auf Weiter, um diesen Schritt zu überspringen.
  2. Klicken Sie unter Nutzern Zugriff auf dieses Dienstkonto erteilen (optional) auf Schlüssel erstellen, wählen Sie JSON aus und klicken Sie auf Erstellen.

Eine JSON-Datei wird auf Ihren Computer heruntergeladen. Sie benötigen sie in den folgenden Einrichtungsabschnitten. a424cec60144d707.png

5. Kalender einrichten

  1. Rufen Sie Google Kalender auf und klicken Sie auf das Hauptmenü ☰ > Weitere Kalender hinzufügenfbc354048b0a2c6c.png> Neuen Kalender erstellen.

d6ec2fcf0bd2ae22.png

  1. Geben Sie „Terminkalender“ als Namen des Kalenders ein und klicken Sie auf Kalender erstellen.
  2. Laden Sie die Seite neu, klicken Sie auf Terminkalender, scrollen Sie zu Für bestimmte Personen freigeben und klicken Sie auf Personen hinzufügen.
  3. Kopieren Sie die client_email aus der JSON-Datei, die Sie im Rahmen der Einrichtung des Dienstkontos heruntergeladen haben, und fügen Sie sie in das Dialogfeld ein.

7927f6fa675e3e87.png

  1. Klicken Sie auf die Drop-down-Liste Berechtigungen und dann auf Änderungen an Ereignissen vornehmen > Senden.

2ee99d3d15eed97b.png

  1. Scrollen Sie in den Einstellungen zu Kalender integrieren und kopieren Sie die Kalender-ID.

df8a731f0713c52.png

6. Auftragsausführung in Dialogflow einrichten

Dienstkonto und Kalender-ID in Fulfillment hinzufügen

  1. Rufen Sie den Dialogflow-Agenten AppointmentScheduler auf und klicken Sie auf Fulfillment (Auftragsausführung).
  2. Aktivieren Sie den Inline-Editor.

c8574c6ef899393f.png

  1. Aktualisieren Sie die Datei index.js mit dem folgenden Code:
'use strict';

// Import the Dialogflow module from Google client libraries.
const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');

// Enter your calendar ID below and service account JSON below
const calendarId = "<INSERT YOUR CALENDAR ID>";
const serviceAccount = {<INSERT CONTENTS OF YOUr JSON FILE HERE>}; // Starts with {"type": "service_account",...

// Set up Google Calendar Service account credentials
const serviceAccountAuth = new google.auth.JWT({
 email: serviceAccount.client_email,
 key: serviceAccount.private_key,
 scopes: 'https://www.googleapis.com/auth/calendar'
});

const calendar = google.calendar('v3');
process.env.DEBUG = 'dialogflow:*'; // enables lib debugging statements

const timeZone = 'America/Los_Angeles';
const timeZoneOffset = '-07:00';

// Set the DialogflowApp object to handle the HTTPS POST request.
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
 const agent = new WebhookClient({ request, response });
 console.log("Parameters", agent.parameters);
 const appointment_type = agent.parameters.appointment_type;
 function makeAppointment (agent) {
   // Calculate appointment start and end datetimes (end = +1hr from start)
   const dateTimeStart = new Date(Date.parse(agent.parameters.date.split('T')[0] + 'T' + agent.parameters.time.split('T')[1].split('-')[0] + timeZoneOffset));
   const dateTimeEnd = new Date(new Date(dateTimeStart).setHours(dateTimeStart.getHours() + 1));
   const appointmentTimeString = dateTimeStart.toLocaleString(
     'en-US',
     { month: 'long', day: 'numeric', hour: 'numeric', timeZone: timeZone }
   );
    // Check the availability of the time, and make an appointment if there is time on the calendar
   return createCalendarEvent(dateTimeStart, dateTimeEnd, appointment_type).then(() => {
     agent.add(`Ok, let me see if we can fit you in. ${appointmentTimeString} is fine!.`);
   }).catch(() => {
     agent.add(`I'm sorry, there are no slots available for ${appointmentTimeString}.`);
   });
 }

// Handle the Dialogflow intent named 'Schedule Appointment'.
 let intentMap = new Map();
 intentMap.set('Schedule Appointment', makeAppointment);
 agent.handleRequest(intentMap);
});

//Creates calendar event in Google Calendar
function createCalendarEvent (dateTimeStart, dateTimeEnd, appointment_type) {
 return new Promise((resolve, reject) => {
   calendar.events.list({
     auth: serviceAccountAuth, // List events for time period
     calendarId: calendarId,
     timeMin: dateTimeStart.toISOString(),
     timeMax: dateTimeEnd.toISOString()
   }, (err, calendarResponse) => {
     // Check if there is a event already on the Calendar
     if (err || calendarResponse.data.items.length > 0) {
       reject(err || new Error('Requested time conflicts with another appointment'));
     } else {
       // Create event for the requested time period
       calendar.events.insert({ auth: serviceAccountAuth,
         calendarId: calendarId,
         resource: {summary: appointment_type +' Appointment', description: appointment_type,
           start: {dateTime: dateTimeStart},
           end: {dateTime: dateTimeEnd}}
       }, (err, event) => {
         err ? reject(err) : resolve(event);
       }
       );
     }
   });
 });
}
  1. Ersetzen Sie <INSERT YOUR CALENDAR ID> durch die Kalender-ID, die Sie im vorherigen Abschnitt kopiert haben.
  2. Ersetzen Sie <INSERT CONTENTS OF YOUR JSON FILE HERE> durch den Inhalt Ihrer JSON-Datei.
  3. (Optional) Ändern Sie const timeZone und const timeZoneOffset entsprechend der Zeitzone für Terminkalender.
  4. Klicken Sie auf Bereitstellen.

Antwort zur Auftragsausführung aktivieren

  1. Rufen Sie die Dialogflow-Konsole auf und klicken Sie auf Intents.
  2. Klicken Sie auf Intent „Termin planen“.
  3. Scrollen Sie nach unten zu Fulfillment (Auftragsausführung) und aktivieren Sie Enable webhook call for the intent (Webhook-Aufruf für den Intent aktivieren).

a5b41336b5249e44.png

  1. Klicken Sie auf Speichern.
  2. Klicken Sie auf Bereitstellen.

7. Chatbot testen

Sie können Ihren Chatbot im Actions-Simulator testen oder die Web- oder Google Home-Integration verwenden, die Sie zuvor kennengelernt haben.

  1. Nutzer: „Stell einen Termin für die Fahrzeugregistrierung auf morgen um 14:00 Uhr ein.“
  2. Chatbot: „Okay, ich sehe mal nach, ob wir dich unterbringen können. Der 24. April um 14:00 Uhr passt gut.“

96d3784c103daf5e.png

  1. Die Antwort wird in Google Kalender eingetragen.

b7da9da814271db8.png

8. Bereinigen

Wenn Sie weitere Dialogflow-Codelabs durcharbeiten möchten, überspringen Sie diesen Abschnitt jetzt und kehren Sie später dazu zurück.

Dialogflow-Agent löschen

  1. Klicken Sie neben Ihrem vorhandenen Agent auf dc4ac6f9c0ae94e9.png.

520c1c6bb9f46ea6.png

  1. Scrollen Sie auf dem Tab Allgemein nach unten und klicken Sie auf Diesen Agent löschen.
  2. Geben Sie Löschen in das Dialogfeld ein und klicken Sie auf Löschen.

9. Glückwunsch

Sie haben einen Chatbot in Dialogflow erstellt und in Google Kalender eingebunden. Sie sind jetzt Chatbot-Entwickler!

Weitere Informationen

Weitere Informationen finden Sie in den Codebeispielen auf der Seite Dialogflow GitHub.