Comprendi il fulfillment integrando Dialogflow con Calendar

1. Prima di iniziare

In questo codelab scoprirai in che modo Dialogflow si connette ai sistemi di backend per fornire risposte avanzate e dinamiche agli utenti. domande.

Prerequisiti

Prima di procedere, devi completare i seguenti codelab:

  1. Creare un programma di pianificazione degli appuntamenti con Dialogflow
  2. Integrare Dialogflow con Actions on Google
  3. Informazioni sulle entità in Dialogflow

Inoltre, devi comprendere i concetti e le costrutti di base di Dialogflow, che puoi estrarre dai seguenti video nel percorso Creare un chatbot con Dialogflow.

Obiettivi didattici

  • Che cos'è la distribuzione
  • Come configurare un account di servizio per Calendar
  • Come configurare Calendar
  • Come abilitare il fulfillment in Dialogflow
  • Come testare il fulfillment

Cosa creerai

  • Completamento con Cloud Functions
  • Un'integrazione tra Dialogflow e Calendar

Che cosa ti serve

  • Un browser web e un indirizzo email per accedere alla console Dialogflow.
  • Un Account Google per accedere a Calendar

2. Che cos'è la distribuzione?

Il completamento è un codice di cui viene eseguito il deployment come webhook che consente all'agente Dialogflow di chiamare la logica di business in base all'intent. Durante una conversazione, il fulfillment ti consente di utilizzare le informazioni estratte dall'elaborazione del linguaggio naturale di Dialogflow per generare risposte dinamiche o attivare azioni sul tuo backend. La maggior parte degli agenti Dialogflow utilizza il fulfillment.

Di seguito sono riportati alcuni esempi di casi in cui puoi utilizzare il completamento per estendere un agente:

  • Generare risposte dinamiche in base a informazioni cercate in un database.
  • Per effettuare ordini in base ai prodotti richiesti da un cliente
  • Per implementare le regole e le condizioni di vincita di un gioco

3. Abilita API Calendar

  1. Nella console di Dialogflow, fai clic su d7d792687e597dd5.png.
  2. Nella scheda Generale, scorri fino a ID progetto, quindi fai clic su Google Cloud f2bffd4fcdb84fa9.png.

34be16fcd4c5aeff.png

  1. Nella console Google Cloud, fai clic sul menu di navigazione Џ > API e Servizi > Raccolta.
  2. Cerca "API Google Calendar", e fai clic su Abilita per utilizzare l'API nel tuo progetto Google Cloud.

4. Configura account di servizio

  1. Fai clic sul menu di navigazione PUBLISHER > API e Servizi > Credenziali.
  2. Fai clic su Crea credenziali > Account di servizio.

86f51af0e7886fdd.png

  1. In Dettagli account di servizio, inserisci "appointment-scheduler". Nome account di servizio, quindi fai clic su Crea.

845d25f3e07ff770.png

  1. Nel campo Concedi a questo account di servizio l'accesso al progetto, fai clic su Continua per ignorarlo.
  2. Nel campo Concedi agli utenti l'accesso a questo account di servizio (facoltativo), fai clic su Crea chiave, quindi seleziona JSON e fai clic su Crea.

Sul tuo computer verrà scaricato un file JSON, che ti servirà nelle sezioni di configurazione riportate di seguito. a424cec60144d707.png

5. Configurazione di Calendar

  1. Vai a Calendar, quindi fai clic su Menu principale raggiunto > Aggiungi altri calendari fbc354048b0a2c6c.png> Crea nuovo calendario.

d6ec2fcf0bd2ae22.png

  1. Inserisci "Calendario degli appuntamenti". come nome del calendario e fai clic su Crea calendario.
  2. Ricarica la pagina, quindi fai clic su Calendario degli appuntamenti, scorri fino a Condividi con persone specifiche e poi fai clic su Aggiungi persone.
  3. Copia il valore client_email dal file JSON che hai scaricato durante la configurazione dell'account di servizio e incollalo nella finestra di dialogo.

7927f6fa675e3e87.png

  1. Fai clic sull'elenco a discesa Autorizzazioni, poi su Apporta modifiche agli eventi > Invia.

2ee99d3d15eed97b.png

  1. Rimani in Impostazioni, scorri fino a Integra calendario e copia l'ID calendario.

df8a731f0713c52.png

6. Configura il fulfillment in Dialogflow

Aggiungi l'account di servizio e l'ID calendario al completamento

  1. Vai all'agente Dialogflow AppointmentScheduler e fai clic su Fulfillment.
  2. Attiva l'Editor incorporato.

c8574c6ef899393f.png

  1. Aggiorna il file index.js con il seguente codice:
'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. Sostituisci <INSERT YOUR CALENDAR ID> con l'ID calendario che hai copiato nella sezione precedente.
  2. Sostituisci <INSERT CONTENTS OF YOUR JSON FILE HERE> con i contenuti del tuo file JSON.
  3. (Facoltativo) Modifica const timeZone e const timeZoneOffset in base al fuso orario del calendario degli appuntamenti.
  4. Fai clic su Esegui il deployment.

Attiva risposta di evasione

  1. Accedi alla console di Dialogflow e fai clic su Intent.
  2. Fai clic su Programma intenti dell'appuntamento.
  3. Scorri verso il basso fino a Fulfillment e attiva Abilita chiamata webhook per l'intent.

a5b41336b5249e44.png

  1. Fai clic su Salva.
  2. Fai clic su Esegui il deployment.

7. Testa il chatbot

Puoi testare il chatbot nel simulatore di Actions oppure utilizzare l'integrazione web o Google Home che conosci in precedenza.

  1. Utente: "Fissa un appuntamento per l'immatricolazione del veicolo alle 14:00 di domani."
  2. Chatbot: "Ok, vediamo se possiamo aiutarti. Il 24 aprile alle 14:00 va bene!"

96d3784c103daf5e.png

  1. Calendar prenota la risposta.

b7da9da814271db8.png

8. Esegui la pulizia

Se prevedi di completare altri codelab Dialogflow, salta questa sezione per il momento e torna in un secondo momento.

Elimina l'agente Dialogflow

  1. Fai clic su dc4ac6f9c0ae94e9.png accanto all'agente esistente.

520c1c6bb9f46ea6.png

  1. Nella scheda General (Generale), scorri fino in fondo e fai clic su Delete This Agent (Elimina questo agente).
  2. Digita Elimina nella finestra di dialogo e fai clic su Elimina.

9. Complimenti

Hai creato un chatbot in Dialogflow e l'hai integrato con Calendar. Ora sei uno sviluppatore di chatbot.

Scopri di più

Per saperne di più, dai un'occhiata agli esempi di codice nella pagina GitHub Dialogflow.