1. Avant de commencer
Dans cet atelier de programmation, vous allez découvrir comment Dialogflow se connecte aux systèmes de backend pour fournir des réponses riches et dynamiques aux questions des utilisateurs.
Prérequis
Avant de continuer, vous devez effectuer les ateliers de programmation suivants :
- Créer un planificateur de rendez-vous avec Dialogflow
- Intégrer Dialogflow à Actions on Google
- Comprendre les entités dans Dialogflow
Vous devez également comprendre les concepts et les constructions de base de Dialogflow, que vous pouvez découvrir dans les vidéos suivantes du parcours Créer un chatbot avec Dialogflow.
Points abordés
- Qu'est-ce que le traitement des commandes ?
- Configurer un compte de service pour Agenda
- Configurer Agenda
- Activer le fulfillment dans Dialogflow
- Tester le fulfillment
Ce que vous allez faire
- Traitement avec Cloud Functions
- Intégration entre Dialogflow et Agenda
Prérequis
- Un navigateur Web et une adresse e-mail pour se connecter à la console Dialogflow
- Posséder un compte Google pour accéder à Agenda
2. Qu'est-ce que le traitement des commandes ?
Un fulfillment est un code déployé en tant que webhook, qui permet à l'agent Dialogflow d'appeler la logique métier, intent par intent. Dans une conversation, un fulfillment vous permet d'utiliser les informations extraites par le traitement du langage naturel de Dialogflow pour générer des réponses dynamiques ou déclencher des actions sur le backend. La plupart des agents Dialogflow utilisent le fulfillment.
Voici quelques exemples de cas dans lesquels vous pouvez utiliser un fulfillment pour étendre un agent :
- Pour générer des réponses dynamiques basées sur les informations recherchées dans une base de données
- Pour passer des commandes en fonction des produits demandés par un client
- Pour mettre en œuvre les règles et les conditions de gain d'un jeu
3. Activer l'API Calendar
- Dans la console Dialogflow, cliquez sur
. - Dans l'onglet Général, faites défiler la page jusqu'à ID du projet, puis cliquez sur Google Cloud
.

- Dans la console Google Cloud, cliquez sur Menu de navigation ☰ > API et services > Bibliothèque.
- Recherchez "API Google Agenda", puis cliquez sur Activer pour utiliser l'API dans votre projet Google Cloud.
4. Configurer un compte de service
- Cliquez sur le menu de navigation ☰ > API et services > Identifiants.
- Cliquez sur Créer des identifiants > Compte de service.

- Dans Détails du compte de service, saisissez "appointment-scheduler" comme Nom du compte de service, puis cliquez sur Créer.

- Dans la section Autoriser ce compte de service à accéder au projet, cliquez sur Continuer pour l'ignorer.
- Sous Accorder l'accès à ce compte de service à des utilisateurs (facultatif), cliquez sur Créer une clé, puis sélectionnez JSON et cliquez sur Créer.
Un fichier JSON sera téléchargé sur votre ordinateur. Vous en aurez besoin dans les sections de configuration suivantes. 
5. Configurer l'agenda
- Accédez à Agenda, puis cliquez sur Menu principal ☰ > Ajouter d'autres agendas
> Créer un agenda.

- Saisissez "Agenda de rendez-vous" comme nom de l'agenda, puis cliquez sur Créer l'agenda.
- Actualisez la page, puis cliquez sur Agenda des rendez-vous, faites défiler la page jusqu'à Partager avec des personnes en particulier, puis cliquez sur Ajouter des personnes.
- Copiez le
client_emaildu fichier JSON que vous avez téléchargé lors de la configuration du compte de service, puis collez-le dans la boîte de dialogue.

- Cliquez sur la liste déroulante Autorisations, puis sur Modifier les événements > Envoyer.

- Dans Paramètres, faites défiler la page jusqu'à Intégrer l'agenda et copiez l'ID de l'agenda.

6. Configurer le fulfillment dans Dialogflow
Ajouter un compte de service et un ID d'agenda à l'exécution
- Accédez à l'agent Dialogflow AppointmentScheduler, puis cliquez sur Fulfillment.
- Activez l'éditeur intégré.

- Mettez à jour le fichier
index.jsavec le code suivant :
'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);
}
);
}
});
});
}
- Remplacez
<INSERT YOUR CALENDAR ID>par l'ID d'agenda que vous avez copié dans la section précédente. - Remplacez
<INSERT CONTENTS OF YOUR JSON FILE HERE>par le contenu de votre fichier JSON. - (Facultatif) Modifiez const timeZone et const timeZoneOffset en fonction du fuseau horaire de l'agenda des rendez-vous.
- Cliquez sur Déployer.
Activer la réponse de fulfillment
- Accédez à la console Dialogflow et cliquez sur Intents.
- Cliquez sur Intent de planification de rendez-vous.
- Faites défiler la page jusqu'à Fulfillment, puis activez l'option Activer l'appel webhook pour cet intent.

- Cliquez sur Enregistrer.
- Cliquez sur Déployer.
7. Tester le chatbot
Vous pouvez tester votre chatbot dans le simulateur Actions, ou utiliser l'intégration Web ou Google Home que vous avez découverte précédemment.
- Utilisateur : "Prends rendez-vous pour l'immatriculation du véhicule à 14h demain."
- Chatbot : "D'accord, voyons si nous pouvons vous trouver une place. Le 24 avril à 14h me convient."

- Agenda enregistre la réponse.

8. Effectuer un nettoyage
Si vous prévoyez de suivre d'autres ateliers de programmation Dialogflow, ignorez cette section pour le moment et revenez-y plus tard.
Supprimer l'agent Dialogflow
- Cliquez sur
à côté de votre agent existant.

- Dans l'onglet Général, faites défiler la page jusqu'en bas, puis cliquez sur Supprimer cet agent.
- Saisissez Supprimer dans la boîte de dialogue, puis cliquez sur Supprimer.
9. Félicitations
Vous avez créé un chatbot dans Dialogflow et l'avez intégré à Agenda. Vous êtes maintenant développeur de chatbots !
En savoir plus
Pour en savoir plus, consultez les exemples de code sur la page Dialogflow GitHub.