Tìm hiểu về phương thức thực hiện bằng cách tích hợp Dialogflow với Lịch

1. Trước khi bắt đầu

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách Dialogflow kết nối với các hệ thống phụ trợ để cung cấp phản hồi phong phú và linh động cho người dùng câu hỏi.

Điều kiện tiên quyết

Trước khi tiếp tục, bạn cần hoàn tất các lớp học lập trình sau:

  1. Tạo trình lên lịch hẹn bằng Dialogflow
  2. Tích hợp Dialogflow với Actions on Google
  3. Tìm hiểu về các thực thể trong Dialogflow

Bạn cũng cần nắm được các khái niệm và cấu trúc cơ bản của Dialogflow. Bạn có thể tìm hiểu những khái niệm và cấu trúc này từ các video sau đây trong lộ trình Tạo bot trò chuyện bằng Dialogflow.

Kiến thức bạn sẽ học được

  • Phương thức thực hiện đơn hàng là gì
  • Cách thiết lập tài khoản dịch vụ cho Lịch
  • Cách thiết lập Lịch
  • Cách bật tính năng thực hiện đơn hàng trong Dialogflow
  • Cách kiểm thử phương thức thực hiện

Sản phẩm bạn sẽ tạo ra

  • Thực hiện bằng Cloud Functions
  • Công cụ tích hợp giữa Dialogflow và Lịch

Bạn cần có

  • Một trình duyệt web và địa chỉ email để đăng nhập vào bảng điều khiển Dialogflow
  • Có Tài khoản Google để truy cập vào Lịch

2. Thực hiện đơn hàng là gì?

Phương thức thực hiện là mã được triển khai dưới dạng webhook cho phép nhân viên hỗ trợ Dialogflow của bạn gọi logic nghiệp vụ trên cơ sở từng ý định. Trong một cuộc trò chuyện, phương thức thực hiện cho phép bạn sử dụng thông tin do hệ thống xử lý ngôn ngữ tự nhiên của Dialogflow trích xuất để tạo phản hồi động hoặc kích hoạt các hành động trên phần phụ trợ của bạn. Hầu hết nhân viên hỗ trợ Dialogflow đều sử dụng phương thức thực hiện.

Sau đây là một số ví dụ về trường hợp bạn có thể sử dụng phương thức thực hiện để mở rộng một tác nhân:

  • Để tạo câu trả lời linh động dựa trên thông tin được tra cứu trong cơ sở dữ liệu
  • Để đặt hàng dựa trên những sản phẩm mà khách hàng yêu cầu
  • Để triển khai các quy tắc và điều kiện chiến thắng cho một trò chơi

3. Bật API Lịch

  1. Trong bảng điều khiểnDialogflow, hãy nhấp vào d7d792687e597dd5.png.
  2. Trong thẻ General (Chung), hãy di chuyển đến mục Project ID (Mã dự án), sau đó nhấp vào Google Cloudf2bffd4fcdb84fa9.png.

34be16fcd4c5aeff.png.

  1. Trong Google Cloud Console, hãy nhấp vào Trình đơn điều hướng Nhận > API và Dịch vụ > Thư viện.
  2. Tìm kiếm "Google Calendar API" rồi nhấp vào Bật để sử dụng API trên dự án Google Cloud của bạn.

4. Thiết lập tài khoản dịch vụ

  1. Nhấp vào Trình đơn điều hướng ↗ > API và Dịch vụ > Thông tin đăng nhập.
  2. Nhấp vào Tạo thông tin xác thực > Tài khoản dịch vụ.

86f51af0e7886fdd.pngS

  1. Trong phần Thông tin chi tiết về tài khoản dịch vụ, hãy nhập "appointment-scheduler" làm Tên tài khoản dịch vụ, rồi nhấp vào Tạo.

845d25f3e07ff770.pngs

  1. Khi thấy dòng chữ Cấp quyền truy cập vào tài khoản dịch vụ này vào dự án, hãy nhấp vào Tiếp tục để bỏ qua.
  2. Khi thấy Cấp cho người dùng quyền truy cập vào tài khoản dịch vụ này (không bắt buộc), hãy nhấp vào Tạo khoá, sau đó chọn JSON rồi nhấp vào Tạo.

Một tệp JSON sẽ được tải xuống máy tính của bạn và bạn cần có tệp này trong các phần thiết lập sau đây. a424cec60144d707.png

5. Thiết lập lịch

  1. Chuyển đến Lịch rồi nhấp vào Trình đơn chính ∧ > Thêm các lịch khác fbc354048b0a2c6c.png> Tạo lịch mới.

d6ec2fcf0bd2ae22.png

  1. Nhập "Lịch hẹn" làm tên lịch rồi nhấp vào Tạo lịch.
  2. Tải lại trang, sau đó nhấp vào Lịch hẹn, di chuyển đến mục Chia sẻ với những người cụ thể, sau đó nhấp vào Thêm người.
  3. Sao chép client_email từ tệp JSON mà bạn đã tải xuống trong quá trình thiết lập tài khoản dịch vụ rồi dán vào hộp thoại.

7927f6fa675e3e87.pngs

  1. Nhấp vào danh sách thả xuống Quyền, rồi nhấp vào Thay đổi sự kiện > Gửi.

2ee99d3d15eed97b.png.

  1. Trong khi vẫn ở trong phần Cài đặt, hãy di chuyển đến mục Tích hợp lịch rồi sao chép Mã lịch.

df8a731f0713c52.png

6. Thiết lập phương thức thực hiện trong Dialogflow

Thêm tài khoản dịch vụ và mã lịch vào phương thức thực hiện

  1. Chuyển đến nhân viên hỗ trợ Dialogflow AppointmentScheduler rồi nhấp vào Fulfillment (Thực hiện đơn hàng).
  2. Bật Trình chỉnh sửa cùng dòng.

c8574c6ef899393f.png

  1. Cập nhật tệp index.js bằng đoạn mã sau:
'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. Thay thế <INSERT YOUR CALENDAR ID> bằng ID lịch mà bạn đã sao chép trong phần trước.
  2. Thay thế <INSERT CONTENTS OF YOUR JSON FILE HERE> bằng nội dung của tệp JSON.
  3. (Không bắt buộc.) Thay đổi const timeZoneconst timeZoneOffset theo múi giờ của Lịch hẹn.
  4. Nhấp vào Triển khai.

Bật phản hồi của phương thức thực hiện

  1. Chuyển đến bảng điều khiển Dialogflow rồi nhấp vào Ý định.
  2. Nhấp vào Lên lịch hẹn.
  3. Di chuyển xuống mục Thực hiện rồi bật tùy chọn Bật cuộc gọi webhook cho ý định.

a5b41336b5249e44.png

  1. Nhấp vào Lưu.
  2. Nhấp vào Triển khai.

7. Kiểm thử bot trò chuyện

Bạn có thể kiểm tra bot trò chuyện của mình trong Trình mô phỏng hành động hoặc sử dụng công cụ tích hợp web hay Google Home mà bạn đã tìm hiểu trước đây.

  1. Người dùng: "Đặt lịch hẹn đăng ký xe lúc 2 giờ chiều mai".
  2. Chatbot: "Được rồi, để tôi xem chúng tôi có thể đưa bạn vào được không. 2 giờ chiều ngày 24 tháng 4 là được rồi!"

96d3784c103daf5e.png.

  1. Lịch đặt câu trả lời.

b7da9da814271db8.png

8. Dọn dẹp

Nếu bạn dự định hoàn thành các lớp học lập trình khác về Dialogflow, hãy tạm thời bỏ qua phần này và quay lại sau.

Xoá nhân viên hỗ trợ dự án Dialogflow

  1. Nhấp vào biểu tượng dc4ac6f9c0ae94e9.png bên cạnh nhân viên hỗ trợ hiện có.

520c1c6bb9f46ea6.pngS

  1. Trong thẻ General (Chung), hãy di chuyển xuống dưới cùng rồi nhấp vào Delete This Agent (Xoá nhân viên hỗ trợ này).
  2. Nhập Delete vào hộp thoại rồi nhấp vào Delete (Xoá).

9. Xin chúc mừng

Bạn đã tạo một bot trò chuyện trong Dialogflow và tích hợp bot này với Lịch. Giờ bạn đã là nhà phát triển chatbot!

Tìm hiểu thêm

Để tìm hiểu thêm, hãy xem các mã mẫu trên trang Dialogflow GitHub.