۱. قبل از شروع
در این آزمایشگاه کد، یاد خواهید گرفت که چگونه Dialogflow با سیستمهای backend ارتباط برقرار میکند تا پاسخهای غنی و پویا به سوالات کاربران ارائه دهد.
پیشنیازها
قبل از ادامه، باید codelab های زیر را تکمیل کنید:
- ساخت برنامه زمانبندی قرار ملاقات با Dialogflow
- ادغام Dialogflow با Actions در گوگل
- آشنایی با موجودیتها در Dialogflow
شما همچنین باید مفاهیم و ساختارهای اساسی Dialogflow را درک کنید، که میتوانید از ویدیوهای زیر که در مسیر ساخت چتبات با Dialogflow یافت میشوند، آنها را فرا بگیرید.
آنچه یاد خواهید گرفت
- تحقق چیست؟
- نحوه تنظیم حساب کاربری سرویس برای تقویم
- نحوه تنظیم تقویم
- نحوه فعال کردن تکمیل سفارش در Dialogflow
- چگونه میزان موفقیت را آزمایش کنیم
آنچه خواهید ساخت
- انجام سفارش با استفاده از توابع ابری
- ادغام بین Dialogflow و Calendar
آنچه نیاز دارید
- یک مرورگر وب و یک آدرس ایمیل برای ورود به کنسول Dialogflow
- یک حساب گوگل برای دسترسی به تقویم
۲. کمال چیست؟
تکمیل سفارش کدی است که به عنوان یک وبهوک مستقر میشود و به عامل Dialogflow شما اجازه میدهد منطق کسبوکار را به صورت قصد به قصد فراخوانی کند. در طول یک مکالمه، تکمیل سفارش به شما امکان میدهد از اطلاعات استخراجشده توسط پردازش زبان طبیعی Dialogflow برای تولید پاسخهای پویا یا راهاندازی اقدامات در backend خود استفاده کنید. اکثر عاملهای Dialogflow از تکمیل سفارش استفاده میکنند.
در زیر چند نمونه از مواردی که میتوانید از تکمیل سفارش برای تمدید نماینده استفاده کنید، آورده شده است:
- برای تولید پاسخهای پویا بر اساس اطلاعات جستجو شده از پایگاه داده
- ثبت سفارش بر اساس محصولاتی که مشتری درخواست کرده است
- برای اجرای قوانین و شرایط برنده شدن برای یک بازی
۳. فعال کردن API تقویم
- در کنسول Dialogflow ، کلیک کنید
. - در برگه عمومی ، به شناسه پروژه بروید، سپس روی Google Cloud کلیک کنید
.

- در کنسول گوگل کلود، روی منوی ناوبری ☰ > APIها و خدمات > کتابخانه کلیک کنید.
- عبارت «Google Calendar API» را جستجو کنید، سپس برای استفاده از API در پروژه Google Cloud خود، روی فعالسازی کلیک کنید.
۴. تنظیم حساب کاربری سرویس
- روی منوی ناوبری ☰ > APIها و خدمات > اعتبارنامهها کلیک کنید.
- روی ایجاد اعتبارنامهها > حساب سرویس کلیک کنید.

- در جزئیات حساب سرویس ، عبارت "appointment-scheduler" را به عنوان نام حساب سرویس وارد کنید، سپس روی ایجاد کلیک کنید.

- جایی که نوشته شده «به این سرویس حساب دسترسی به پروژه بدهید» ، برای رد شدن از آن، روی «ادامه » کلیک کنید.
- جایی که نوشته شده «به کاربران اجازه دسترسی به این حساب سرویس را بدهید (اختیاری) ، روی «ایجاد کلید» کلیک کنید، سپس JSON را انتخاب کرده و روی «ایجاد» کلیک کنید.
یک فایل JSON در رایانه شما دانلود خواهد شد که در بخشهای بعدی تنظیمات به آن نیاز خواهید داشت. 
۵. تنظیمات تقویم
- به تقویم بروید، سپس روی منوی اصلی ☰ > افزودن تقویمهای دیگر کلیک کنید
> ایجاد تقویم جدید .

- «تقویم قرار ملاقات» را به عنوان نام تقویم وارد کنید و روی ایجاد تقویم کلیک کنید.
- صفحه را مجدداً بارگذاری کنید، سپس روی تقویم قرار ملاقات کلیک کنید، به اشتراکگذاری با افراد خاص بروید، سپس روی افزودن افراد کلیک کنید.
-
client_emailرا از فایل JSON که به عنوان بخشی از تنظیمات حساب سرویس دانلود کردهاید، کپی کرده و در کادر محاورهای جایگذاری کنید.

- روی فهرست کشویی مجوزها کلیک کنید، سپس روی ایجاد تغییرات در رویدادها > ارسال کلیک کنید.

- در حالی که هنوز در تنظیمات هستید، به بخش ادغام تقویم بروید و شناسه تقویم را کپی کنید.

۶. تنظیم مراحل تکمیل سفارش در Dialogflow
افزودن حساب کاربری سرویس و شناسه تقویم به بخش تکمیل سفارش
- به عامل AppointmentScheduler Dialogflow بروید و روی Fulfillment کلیک کنید.
- ویرایشگر درونخطی را فعال کنید .

- فایل
index.jsرا با کد زیر بهروزرسانی کنید:
'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);
}
);
}
});
});
}
- به جای
<INSERT YOUR CALENDAR ID>، شناسه تقویمی را که در بخش قبل کپی کردهاید، قرار دهید. - عبارت
<INSERT CONTENTS OF YOUR JSON FILE HERE>را با محتوای فایل JSON خود جایگزین کنید. - (اختیاری.) مقدار const timeZone و const timeZoneOffset را مطابق با منطقه زمانی برای Appointment Calendar تغییر دهید.
- روی استقرار کلیک کنید.
فعال کردن پاسخ تکمیل سفارش
- به کنسول Dialogflow بروید و روی Intents کلیک کنید.
- روی «قصد تعیین وقت ملاقات» کلیک کنید.
- به پایین اسکرول کنید تا به بخش Fulfillment برسید و گزینه Enable webhook call for the intent را فعال کنید.

- روی ذخیره کلیک کنید.
- روی استقرار کلیک کنید.
۷. چتبات خود را آزمایش کنید
میتوانید چتبات خود را در شبیهساز اکشنها آزمایش کنید، یا از وب یا ادغام با گوگل هوم که قبلاً در مورد آن آموختهاید، استفاده کنید.
- کاربر: «برای ثبت نام خودرو، فردا ساعت ۲ بعد از ظهر وقت بگیرید.»
- چتبات: «خب، بذار ببینم میتونیم جاتون بدیم یا نه. ۲۴ آوریل، ساعت ۲ بعد از ظهر خوبه!»

- تقویم، پاسخ را ثبت میکند.

۸. تمیز کردن
اگر قصد دارید سایر آزمایشگاههای کد Dialogflow را تکمیل کنید، فعلاً از این بخش صرف نظر کنید و بعداً به آن برگردید.
عامل Dialogflow را حذف کنید
- کلیک
در کنار نماینده فعلی شما.

- در برگه عمومی ، به پایین بروید و روی حذف این عامل کلیک کنید.
- در کادر محاورهای، عبارت Delete را تایپ کرده و روی Delete کلیک کنید.
۹. تبریک
شما یک چتبات در Dialogflow ایجاد کردید و آن را با Calendar ادغام کردید. اکنون شما یک توسعهدهنده چتبات هستید!
بیشتر بدانید
برای کسب اطلاعات بیشتر، نمونههای کد را در صفحه گیتهاب Dialogflow بررسی کنید.