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

1. Hinweis

In diesem Codelab erfahren Sie, wie sich Dialogflow mit Back-End-Systemen verbindet, um umfassende und dynamische Antworten auf die Fragen beantwortet.

Vorbereitung

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

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

Außerdem müssen Sie mit den grundlegenden Konzepten und Konstrukten von Dialogflow vertraut sein, die Sie den folgenden Videos im Lernpfad Chatbot mit Dialogflow erstellen entnehmen können.

Lerninhalte

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

Aufgaben

  • Auftragsausführung mit Cloud Functions
  • Eine Integration zwischen Dialogflow und Google Kalender

Voraussetzungen

  • Einen 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 Auftragsausführung?

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 nutzen die Auftragsausführung.

Im Folgenden finden Sie einige Beispiele für Fälle, in denen Sie mithilfe der Auftragsausführung einen Agent erweitern können:

  • Um dynamische Antworten auf der Grundlage von Informationen zu generieren, die aus einer Datenbank abgerufen wurden
  • Um Bestellungen für Produkte aufzugeben, nach denen ein Kunde gefragt hat
  • Umsetzung 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 und Dienste > Bibliothek:
  2. Suchen Sie nach „Google Calendar API“, Klicken Sie dann auf Aktivieren, um die API in Ihrem Google Cloud-Projekt zu verwenden.

4. Dienstkonto einrichten

  1. Klicke auf das Navigationsmenü 😃 > APIs und Dienste > Anmeldedaten:
  2. Klicken Sie auf Anmeldedaten erstellen. Dienstkonto.

86f51af0e7886fdd.png

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

845d25f3e07ff770.png

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

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

5. Kalendereinrichtung

  1. Gehen Sie zu Kalender und klicken Sie dann auf Hauptmenü 🎮 > Weitere Kalender hinzufügen fbc354048b0a2c6c.png> Neuen Kalender einrichten

d6ec2fcf0bd2ae22.png

  1. Geben Sie „Terminkalender“ ein als Namen des Kalenders ein und klicken Sie auf Kalender einrichten.
  2. Aktualisieren Sie die Seite, klicken Sie dann auf Terminkalender, scrollen Sie zu Für bestimmte Personen freigeben und klicken Sie dann auf Personen hinzufügen.
  3. Kopieren Sie die client_email aus der JSON-Datei, die Sie im Rahmen der Dienstkontoeinrichtung 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 Ereignisse ändern. > 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 zur Auftragsausführung hinzufügen

  1. Rufen Sie den Dialogflow-Agent AppointmentScheduler auf und klicken Sie auf Fulfillment.
  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 für die Auftragsausführung aktivieren

  1. Rufen Sie die Dialogflow-Konsole auf und klicken Sie auf Intents.
  2. Klicken Sie auf Termin-Intent 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 den Chatbot im Actions-Simulator testen oder die Web- oder Google Home-Integration verwenden, die Sie bereits kennengelernt haben.

  1. Nutzer: „Termin für die Fahrzeugregistrierung um 14 Uhr morgen vereinbaren.“
  2. Chatbot: „Okay, lassen Sie mich sehen, ob wir Sie unterbringen können. Am 24. April, 14:00 Uhr ist alles in Ordnung!“

96d3784c103daf5e.png

  1. Google Kalender bucht die Antwort.

b7da9da814271db8.png

8. Bereinigen

Wenn Sie andere Dialogflow-Codelabs absolvieren möchten, überspringen Sie diesen Abschnitt vorerst und kehren Sie später zurück.

Dialogflow-Agent löschen

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

520c1c6bb9f46ea6.png

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

9. Glückwunsch

Sie haben in Dialogflow einen Chatbot erstellt und in Google Kalender eingebunden. Du bist jetzt ein Chatbot-Entwickler.

Weitere Informationen

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