Informacje o realizacji przez integrację Dialogflow z Kalendarzem

1. Zanim zaczniesz

Z tych ćwiczeń z programowania dowiesz się, jak Dialogflow łączy się z systemami backendu, aby dostarczać użytkownikom bogate i dynamiczne odpowiedzi na ich pytania.

Wymagania wstępne

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

  1. Tworzenie harmonogramu spotkań za pomocą Dialogflow
  2. Integrowanie Dialogflow z Actions on Google
  3. Informacje o encjach w Dialogflow

Musisz też poznać podstawowe pojęcia i konstrukcje Dialogflow. Możesz to zrobić, oglądając te filmy z ścieżki szkoleniowej Tworzenie chatbota za pomocą Dialogflow.

Czego się nauczysz

  • Co to jest realizacja zamówienia
  • Konfigurowanie konta usługi na potrzeby Kalendarza
  • Jak skonfigurować Kalendarz
  • Jak włączyć realizację w Dialogflow
  • Jak przetestować realizację

Co utworzysz

  • Realizacja za pomocą Cloud Functions
  • Integracja Dialogflow z Kalendarzem

Czego potrzebujesz

  • przeglądarka internetowa i adres e-mail do logowania się w konsoli Dialogflow;
  • konto Google, aby uzyskać dostęp do Kalendarza;

2. Co to jest realizacja zamówienia?

Realizacja to kod wdrażany jako webhook, który umożliwia agentowi Dialogflow wywoływanie logiki biznesowej w przypadku każdego zamiaru. Podczas rozmowy realizacja umożliwia używanie informacji wyodrębnionych przez przetwarzanie języka naturalnego w Dialogflow do generowania dynamicznych odpowiedzi lub wywoływania działań na backendzie. Większość agentów Dialogflow korzysta z realizacji.

Oto kilka przykładów sytuacji, w których możesz użyć realizacji, aby rozszerzyć możliwości agenta:

  • generować dynamiczne odpowiedzi na podstawie informacji wyszukanych w bazie danych.
  • składać zamówienia na podstawie produktów, o które poprosił klient;
  • wdrażanie zasad i warunków wygranej w grze;

3. Włączanie interfejsu Calendar API

  1. W konsoli Dialogflow kliknij d7d792687e597dd5.png.
  2. Na karcie Ogólne przewiń do opcji Identyfikator projektu i kliknij Google Cloudf2bffd4fcdb84fa9.png.

34be16fcd4c5aeff.png

  1. W konsoli Google Cloud kliknij Menu nawigacyjne ☰ > Interfejsy API i 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 ☰ > Interfejsy API i usługi > Dane logowania.
  2. Kliknij Utwórz dane logowania > Konto usługi.

86f51af0e7886fdd.png

  1. W sekcji Szczegóły konta usługi wpisz „appointment-scheduler” jako Nazwę 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 pominąć ten krok.
  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, który będzie potrzebny w kolejnych sekcjach konfiguracji. a424cec60144d707.png

5. Konfigurowanie kalendarza

  1. Otwórz Kalendarz, a następnie kliknij Menu główne ☰ > Dodaj inne kalendarzefbc354048b0a2c6c.png> Utwórz nowy kalendarz.

d6ec2fcf0bd2ae22.png

  1. Wpisz „Kalendarz spotkań” jako nazwę kalendarza i kliknij Utwórz kalendarz.
  2. Odśwież stronę, a następnie kliknij Kalendarz spotkań, przewiń do sekcji 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.

7927f6fa675e3e87.png

  1. Kliknij listę Uprawnienia, a potem Wprowadzaj zmiany w zdarzeniach > Wyślij.

2ee99d3d15eed97b.png

  1. W Ustawieniach przewiń widok do sekcji Integrowanie kalendarza i skopiuj identyfikator kalendarza.

df8a731f0713c52.png

6. Konfigurowanie realizacji w Dialogflow

Dodawanie konta usługi i identyfikatora kalendarza do realizacji

  1. Otwórz agenta Dialogflow AppointmentScheduler i kliknij Realizacja.
  2. Włącz edytor wbudowany.

c8574c6ef899393f.png

  1. Zaktualizuj plik index.js tym kodem:
'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ń const timeZoneconst timeZoneOffset zgodnie ze strefą czasową Kalendarza rezerwacji.
  4. Kliknij Wdróż.

Włączanie odpowiedzi dotyczącej realizacji

  1. Otwórz konsolę Dialogflow i kliknij Intencje.
  2. Kliknij Schedule Appointment Intent (Intencja zaplanowania spotkania).
  3. Przewiń w dół do sekcji Realizacja i włącz opcję Włącz wywołanie webhooka dla tej intencji.

a5b41336b5249e44.png

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

7. Testowanie czatbota

Możesz przetestować chatbota w symulatorze działań lub użyć integracji z internetem lub Google Home, o których pisaliśmy wcześniej.

  1. Użytkownik: „Umów mnie na spotkanie w sprawie rejestracji pojazdu na jutro na 14:00”.
  2. Chatbot: „OK, sprawdzę, czy możemy Cię przyjąć. 24 kwietnia o 14:00 będzie w porządku”.

96d3784c103daf5e.png

  1. Kalendarz zarezerwuje odpowiedź.

b7da9da814271db8.png

8. Czyszczenie danych

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

Usuwanie agenta Dialogflow

  1. Kliknij dc4ac6f9c0ae94e9.png obok istniejącego agenta.

520c1c6bb9f46ea6.png

  1. Na karcie Ogólne przewiń do dołu i kliknij Usuń tego agenta.
  2. Wpisz w oknie Usuń i kliknij Usuń.

9. Gratulacje

Utworzono chatbota w Dialogflow i zintegrowano go z Kalendarzem. Jesteś teraz programistą czatbota.

Więcej informacji

Więcej informacji znajdziesz w przykładowych kodach na stronie Dialogflow na GitHubie.