Informacje o realizacji przez integrację Dialogflow z Kalendarzem

1. Zanim zaczniesz

Z tego ćwiczenia w Codelabs dowiesz się, jak Dialogflow łączy się z systemami backendu, aby zapewniać obszerne i dynamiczne odpowiedzi użytkownikom pytania.

Wymagania wstępne

Zanim przejdziesz dalej, musisz ukończyć te ćwiczenia z programowania:

  1. Tworzenie harmonogramu spotkań przy użyciu Dialogflow
  2. Integracja Dialogflow z Actions on Google
  3. Omówienie encji w Dialogflow

Musisz też zapoznać się z podstawowymi pojęciami i konstrukcjami Dialogflow. Obejrzyj je w poniższych filmach na ścieżce Build a czatbot with Dialogflow (Tworzenie czatbota przy użyciu Dialogflow).

Czego się nauczysz

  • Co to jest realizacja
  • Jak skonfigurować konto usługi na potrzeby Kalendarza
  • Jak skonfigurować Kalendarz
  • Jak włączyć realizację w Dialogflow
  • Jak testować realizację

Co utworzysz

  • Realizacja za pomocą Cloud Functions
  • integrację między Dialogflow a Kalendarzem,

Czego potrzebujesz

  • Przeglądarka i adres e-mail do logowania się w konsoli Dialogflow.
  • Konto Google umożliwiające dostęp do Kalendarza

2. Na czym polega realizacja?

Fulfillment to kod wdrażany jako webhook, który umożliwia agentowi Dialogflow wywoływanie logiki biznesowej według poszczególnych intencji. Podczas rozmowy realizację umożliwia wykorzystanie informacji uzyskanych przez przetwarzanie języka naturalnego Dialogflow do wygenerowania dynamicznych odpowiedzi lub aktywowania działań w backendzie. Większość agentów Dialogflow korzysta z realizacji.

Oto kilka przykładów sytuacji, w których możesz użyć realizacji, aby przedłużyć okres działania agenta:

  • Do generowania dynamicznych odpowiedzi na podstawie informacji wyszukanych w bazie danych
  • Składanie zamówień na podstawie produktów, o które klient poprosił
  • Aby wdrożyć reguły i warunki zwycięstwa w grze

3. Włącz interfejs Calendar API

  1. W konsoli Dialogflow kliknij d7d792687e597dd5.png.
  2. Na karcie Ogólne przewiń do sekcji Identyfikator projektu, a następnie kliknij Google Cloudf2bffd4fcdb84fa9.png.

34be16fcd4c5aeff.png

  1. W konsoli Google Cloud kliknij Menu nawigacyjne ☰ > Interfejsy API Usługi > Biblioteka.
  2. Wyszukaj „Google Calendar API”, a następnie kliknij Włącz, aby używać interfejsu API w projekcie Google Cloud.

4. Skonfiguruj konto usługi

  1. Kliknij Menu nawigacyjne OK > Interfejsy API Usługi > Dane logowania.
  2. Kliknij Utwórz dane logowania > Konto usługi.

86f51af0e7886fdd.png

  1. W polu Szczegóły konta usługi wpisz „appointment-scheduler”. w polu Nazwa konta usługi, a następnie kliknij Utwórz.

845d25f3e07ff770.png

  1. W sekcji Przyznaj temu kontu usługi dostęp do projektu kliknij Dalej, aby go pominąć.
  2. W sekcji Przyznaj użytkownikom dostęp do tego konta usługi (opcjonalnie) kliknij Utwórz klucz, a następnie wybierz JSON i kliknij Utwórz.

Na komputer zostanie pobrany plik JSON potrzebny do konfiguracji w kolejnych sekcjach. a424cec60144d707.png

5. Konfiguracja kalendarza

  1. Otwórz Kalendarz, a następnie kliknij Menu główne &#9772 > Dodaj inne kalendarze fbc354048b0a2c6c.png> Utwórz nowy kalendarz.

d6ec2fcf0bd2ae22.png

  1. Wpisz „Kalendarz spotkań” jako nazwę kalendarza i kliknij Utwórz kalendarz.
  2. Załaduj ponownie stronę, kliknij Kalendarz spotkań, przewiń do opcji Udostępnij wybranym osobom i kliknij Dodaj osoby.
  3. Skopiuj client_email z pliku JSON pobranego w ramach konfiguracji konta usługi i wklej go w oknie dialogowym.

7927f6fa675e3e87.png

  1. Kliknij listę Uprawnienia, a następnie kliknij Wprowadź zmiany wydarzeń > Wyślij

2ee99d3d15eed97b.png

  1. Nie wychodząc z Ustawień, przewiń do sekcji Integrowanie kalendarza i skopiuj identyfikator kalendarza.

df8a731f0713c52.png

6. Konfigurowanie realizacji w Dialogflow

Dodaj konto usługi i identyfikator kalendarza do realizacji

  1. Przejdź do agenta Dialogflow AppointmentScheduler i kliknij Fulfillment (Realizacja).
  2. Włącz wbudowany edytor.

c8574c6ef899393f.png

  1. Umieść w pliku index.js ten kod:
'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. Zastąp <INSERT YOUR CALENDAR ID> identyfikatorem kalendarza skopiowanym w poprzedniej sekcji.
  2. Zastąp <INSERT CONTENTS OF YOUR JSON FILE HERE> zawartością pliku JSON.
  3. (Opcjonalnie) Zmień wartości const timeZone i const timeZoneOffset zgodnie ze strefą czasową w kalendarzu spotkań.
  4. Kliknij Wdróż.

Włącz odpowiedź na realizację zamówienia

  1. Otwórz konsolę Dialogflow i kliknij Intents (Intencje).
  2. Kliknij Zaplanuj spotkanie z intencją.
  3. Przewiń w dół do sekcji Fulfillment (Realizacja) i włącz opcję Włącz wywołanie webhooka dla intencji.

a5b41336b5249e44.png

  1. Kliknij Zapisz.
  2. Kliknij Wdróż.

7. Testowanie czatbota

Możesz przetestować czatbota w Actions Simulator (Symulatorze Actions) albo skorzystać z poznanej wcześniej integracji z internetem lub Google Home.

  1. Użytkownik: „Umów się na spotkanie w sprawie rejestracji pojazdu na jutro na 14:00”.
  2. Czatbot: „Rozumiem. Sprawdzę, czy damy ci znać. 24 kwietnia, 14:00, to wystarczy”.

96d3784c103daf5e.png

  1. Kalendarz rezerwuje odpowiedź.

b7da9da814271db8.png

8. Czyszczenie danych

Jeśli planujesz ukończyć inne ćwiczenia z programowania Dialogflow, na razie pomiń tę sekcję i wróć do niej później.

Usuwanie agenta Dialogflow

  1. Kliknij dc4ac6f9c0ae94e9.png obok obecnego agenta.

520c1c6bb9f46ea6.png

  1. Na karcie General (Ogólne) przewiń w dół i kliknij Delete this Agent (Usuń tego agenta).
  2. W oknie dialogowym wpisz Usuń i kliknij Usuń.

9. Gratulacje

Udało Ci się utworzyć czatbota w Dialogflow i zintegrować go z Kalendarzem. Jesteś teraz czatbotem.

Więcej informacji

Aby dowiedzieć się więcej, zapoznaj się z przykładowym kodem na stronie Dialogflow GitHub.