Dialogflow'u Takvim'e entegre ederek istek karşılamayı anlayın

1. Başlamadan önce

Bu codelab'de, Dialogflow'un kullanıcılara zengin ve dinamik yanıtlar sağlamak için arka uç sistemlerine nasıl bağlandığını öğreneceksiniz. soru.

Ön koşullar

Devam etmeden önce aşağıdaki codelab'leri tamamlamanız gerekir:

  1. Dialogflow ile Randevu Planlayıcı Oluşturma
  2. Dialogflow'u Actions on Google ile entegre etme
  3. Dialogflow'daki varlıkları anlama

Ayrıca, Dialogflow'un temel kavramlarını ve yapılarını da anlamanız gerekir. Bu temel kavramları ve yapıları Dialogflow ile chatbot derleme yolunda bulunan aşağıdaki videolardan öğrenebilirsiniz.

Neler öğreneceksiniz?

  • İstek karşılama nedir?
  • Takvim için hizmet hesabı oluşturma
  • Takvim nasıl kurulur?
  • Dialogflow'da istek karşılamayı etkinleştirme
  • Sipariş karşılamayı test etme

Neler oluşturacaksınız?

  • Cloud Functions kullanarak sipariş karşılama
  • Dialogflow ile Takvim arasında entegrasyon

Gerekenler

  • Dialogflow konsoluna giriş yapmak için bir web tarayıcısı ve e-posta adresi
  • Takvim'e erişmek için bir Google Hesabı

2. İstek karşılama nedir?

İstek karşılama, bir webhook olarak dağıtılan ve Dialogflow aracınızın iş mantığını niyete göre çağırmasına olanak tanıyan bir koddur. Bir görüşme sırasında karşılama, Dialogflow'un doğal dil işlemi tarafından ayıklanan bilgileri kullanarak dinamik yanıtlar oluşturmanızı veya arka ucunuzda işlem yapılmasını sağlar. Çoğu Dialogflow aracısı, karşılamadan yararlanır.

Aşağıda, bir temsilcinin süresini uzatmak için istek karşılamayı ne zaman kullanabileceğinize dair bazı örnekler verilmiştir:

  • Veritabanından aranan bilgilere dayalı dinamik yanıtlar oluşturmak için
  • Müşterinin istediği ürünlere göre sipariş vermek
  • Bir oyunun kurallarını ve kazanma koşullarını uygulamak

3. Calendar API'yi etkinleştir

  1. Dialogflow konsolunda d7d792687e597dd5.png simgesini tıklayın.
  2. Genel sekmesinde Proje Kimliği'ne gidin ve ardından Google Cloud'u f2bffd4fcdb84fa9.png tıklayın.

34be16fcd4c5aeff.png

  1. Google Cloud Console'da gezinme menüsü ® simgesini tıklayın > API'ler ve Hizmetler > Kitaplık.
  2. "Google Calendar API"yi arayın. ve ardından API'yi Google Cloud projenizde kullanmak için Etkinleştir'i tıklayın.

4. Hizmet hesabı oluşturun

  1. Gezinme menüsü Takipçisi'ni tıklayın > API'ler ve Hizmetler > Credentials (Kimlik Bilgisi).
  2. Kimlik Bilgisi Oluştur'u tıklayın > Hizmet hesabı.

86f51af0e7886fdd.png

  1. Service account details (Hizmet hesabı ayrıntıları) alanına "appointment-scheduler" yazın Hizmet hesabı adı olarak değiştirin, ardından Oluştur'u tıklayın.

845d25f3e07ff770.png

  1. Bu hizmet hesabına projeye erişim izni ver ifadesinin yer aldığı bölümde Devam'ı tıklayarak işlemi atlayın.
  2. Kullanıcıların bu hizmet hesabına erişmesine izin ver (isteğe bağlı) ifadesinin yer aldığı bölümde Anahtar Oluştur'u ve ardından JSON'yi seçip Oluştur'u tıklayın.

Bilgisayarınıza bir JSON dosyası indirilir. Bu dosya, aşağıdaki kurulum bölümlerinde gerekir. a424cec60144d707.png.

5. Takvim kurulumu

  1. Takvim'e gidip Ana menü ▾ seçeneğini tıklayın. Başka takvimler ekleyin fbc354048b0a2c6c.png> Yeni takvim oluştur.

d6ec2fcf0bd2ae22.png

  1. "Randevu Takvimi" yazın Takvim adını seçin ve Takvim oluştur'u tıklayın.
  2. Sayfayı yeniden yükleyin, ardından Randevu Takvimi'ni tıklayın, Belirli kullanıcılarla paylaş'a gidin ve Kişi ekle'yi tıklayın.
  3. Hizmet hesabı kurulumunun bir parçası olarak indirdiğiniz JSON dosyasından client_email dosyasını kopyalayıp iletişim kutusuna yapıştırın.

7927f6fa675e3e87.png

  1. İzinler açılır listesini tıklayın, ardından Etkinliklerde değişiklik yap'ı tıklayın > Gönder'i tıklayın.

2ee99d3d15eed97b.png

  1. Ayarlar'dayken Takvimi entegre edin bölümüne ilerleyin ve Takvim Kimliği'ni kopyalayın.

df8a731f0713c52.png

6. Dialogflow'da karşılama ayarlarını yapma

Sipariş karşılamaya hizmet hesabı ve Takvim kimliği ekle

  1. AppointmentScheduler Dialogflow aracısına gidin ve Fulfillment'ı (Fulfillment) tıklayın.
  2. Satır içi düzenleyiciyi etkinleştirin.

c8574c6ef899393f.png

  1. index.js dosyasını aşağıdaki kodla güncelleyin:
'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. <INSERT YOUR CALENDAR ID> değerini, önceki bölümde kopyaladığınız Takvim Kimliği ile değiştirin.
  2. <INSERT CONTENTS OF YOUR JSON FILE HERE> kısmını JSON dosyanızın içeriğiyle değiştirin.
  3. (İsteğe bağlı.) Randevu Takvimi için saat dilimine göre const timeZone ve const timeZoneOffset değerlerini değiştirin.
  4. Dağıt'ı tıklayın.

Sipariş karşılama yanıtını etkinleştir

  1. Dialogflow konsoluna gidin ve Intents'i (Niyetler) tıklayın.
  2. Randevu Amacı Planla'yı tıklayın.
  3. Karşılama'ya gidin ve Amaç için webhook çağrısını etkinleştir'i etkinleştirin.

a5b41336b5249e44.png

  1. Kaydet'i tıklayın.
  2. Dağıt'ı tıklayın.

7. Chatbot'unuzu test edin

Chatbot'unuzu Actions simülatöründe test edebilir veya daha önce öğrendiğiniz web ya da Google Home entegrasyonunu kullanabilirsiniz.

  1. Kullanıcı: "Yarın saat 14:00'e araç kaydı için randevu ayarla."
  2. Chatbot: "Peki, sizi bağlamaya çalışacağım. 24 Nisan, saat 14:00'te tamam!"

96d3784c103daf5e.png

  1. Takvim, yanıtı rezerve eder.

b7da9da814271db8.png

8. Temizleme

Diğer Dialogflow kod laboratuvarlarını tamamlamayı planlıyorsanız bu bölümü şimdilik atlayıp daha sonra geri dönün.

Dialogflow aracısını silme

  1. Mevcut temsilcinizin yanındaki dc4ac6f9c0ae94e9.png simgesini tıklayın.

520c1c6bb9f46ea6.png

  1. Genel sekmesinde, en alta gidin ve Bu Aracıyı Sil'i tıklayın.
  2. İletişim kutusuna Delete yazın ve Sil'i tıklayın.

9. Tebrikler

Dialogflow'da bir chatbot oluşturup bunu Takvim'e entegre ettiniz. Artık bir chatbot geliştiricisisiniz!

Daha fazla bilgi

Daha fazla bilgi için Dialogflow GitHub sayfasındaki kod örneklerine göz atın.