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:
- Terminplaner mit Dialogflow erstellen
- Dialogflow in Actions on Google einbinden
- 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
- Klicken Sie in der Dialogflow-Konsole auf
. - Scrollen Sie auf dem Tab Allgemein zu Projekt-ID und klicken Sie dann auf Google Cloud
.

- Klicken Sie in der Google Cloud Console auf das Navigationsmenü ☰ > APIs & Dienste > Bibliothek.
- 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
- Klicken Sie auf das Navigationsmenü ☰ > APIs & Dienste > Anmeldedaten.
- Klicken Sie auf Anmeldedaten erstellen > Dienstkonto.

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

- Klicken Sie unter Diesem Dienstkonto Zugriff auf das Projekt erteilen auf Weiter, um diesen Schritt zu überspringen.
- 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. 
5. Kalender einrichten
- Rufen Sie Google Kalender auf und klicken Sie auf das Hauptmenü ☰ > Weitere Kalender hinzufügen
> Neuen Kalender erstellen.

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

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

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

6. Auftragsausführung in Dialogflow einrichten
Dienstkonto und Kalender-ID in Fulfillment hinzufügen
- Rufen Sie den Dialogflow-Agenten AppointmentScheduler auf und klicken Sie auf Fulfillment (Auftragsausführung).
- Aktivieren Sie den Inline-Editor.

- Aktualisieren Sie die Datei
index.jsmit 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);
}
);
}
});
});
}
- Ersetzen Sie
<INSERT YOUR CALENDAR ID>durch die Kalender-ID, die Sie im vorherigen Abschnitt kopiert haben. - Ersetzen Sie
<INSERT CONTENTS OF YOUR JSON FILE HERE>durch den Inhalt Ihrer JSON-Datei. - (Optional) Ändern Sie const timeZone und const timeZoneOffset entsprechend der Zeitzone für Terminkalender.
- Klicken Sie auf Bereitstellen.
Antwort zur Auftragsausführung aktivieren
- Rufen Sie die Dialogflow-Konsole auf und klicken Sie auf Intents.
- Klicken Sie auf Intent „Termin planen“.
- Scrollen Sie nach unten zu Fulfillment (Auftragsausführung) und aktivieren Sie Enable webhook call for the intent (Webhook-Aufruf für den Intent aktivieren).

- Klicken Sie auf Speichern.
- 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.
- Nutzer: „Stell einen Termin für die Fahrzeugregistrierung auf morgen um 14:00 Uhr ein.“
- Chatbot: „Okay, ich sehe mal nach, ob wir dich unterbringen können. Der 24. April um 14:00 Uhr passt gut.“

- Die Antwort wird in Google Kalender eingetragen.

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
- Klicken Sie neben Ihrem vorhandenen Agent auf
.

- Scrollen Sie auf dem Tab Allgemein nach unten und klicken Sie auf Diesen Agent löschen.
- 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.