১. শুরু করার আগে
এই কোডল্যাবে, আপনি শিখবেন কিভাবে ডায়ালগফ্লো ব্যাকএন্ড সিস্টেমের সাথে সংযোগ স্থাপন করে ব্যবহারকারীদের প্রশ্নের সমৃদ্ধ এবং গতিশীল উত্তর প্রদান করে।
পূর্বশর্ত
এগিয়ে যাওয়ার আগে, আপনাকে নিম্নলিখিত কোডল্যাবগুলি সম্পূর্ণ করতে হবে:
- Dialogflow ব্যবহার করে একটি অ্যাপয়েন্টমেন্ট শিডিউলার তৈরি করুন
- Google-এ অ্যাকশনের সাথে ডায়ালগফ্লো ইন্টিগ্রেট করুন
- Dialogflow-এ সত্তাগুলি বুঝুন
আপনাকে Dialogflow-এর মৌলিক ধারণা এবং গঠনগুলিও বুঝতে হবে, যা আপনি "Dialogflow পাথওয়ে দিয়ে চ্যাটবট তৈরি করুন "-এ পাওয়া নিম্নলিখিত ভিডিওগুলি থেকে শিখতে পারেন।
তুমি কি শিখবে
- পরিপূর্ণতা কী?
- ক্যালেন্ডারের জন্য কীভাবে একটি পরিষেবা অ্যাকাউন্ট সেট আপ করবেন
- ক্যালেন্ডার কীভাবে সেট আপ করবেন
- ডায়ালগফ্লোতে কীভাবে পরিপূর্ণতা সক্ষম করবেন
- কীভাবে পরিপূর্ণতা পরীক্ষা করবেন
তুমি কী তৈরি করবে
- ক্লাউড ফাংশন ব্যবহার করে পরিপূর্ণতা
- ডায়ালগফ্লো এবং ক্যালেন্ডারের মধ্যে একটি ইন্টিগ্রেশন
তোমার যা লাগবে
- Dialogflow কনসোলে লগ ইন করার জন্য একটি ওয়েব ব্রাউজার এবং একটি ইমেল ঠিকানা
- ক্যালেন্ডার অ্যাক্সেস করার জন্য একটি Google অ্যাকাউন্ট
২. পরিপূর্ণতা কী?
Fulfillment হল একটি ওয়েবহুক হিসেবে ব্যবহৃত কোড যা আপনার Dialogflow এজেন্টকে Intent-by-Intent ভিত্তিতে ব্যবসায়িক লজিক কল করতে দেয়। কথোপকথনের সময়, Fulfillment আপনাকে Dialogflow-এর প্রাকৃতিক-ভাষা প্রক্রিয়াকরণের মাধ্যমে প্রাপ্ত তথ্য ব্যবহার করে আপনার ব্যাকএন্ডে গতিশীল প্রতিক্রিয়া তৈরি করতে বা ক্রিয়া শুরু করতে দেয়। বেশিরভাগ Dialogflow এজেন্ট Fulfillment ব্যবহার করে।
এজেন্টকে সম্প্রসারিত করার জন্য আপনি কখন পূর্ণতা ব্যবহার করতে পারেন তার কিছু উদাহরণ নিচে দেওয়া হল:
- ডাটাবেস থেকে প্রাপ্ত তথ্যের উপর ভিত্তি করে গতিশীল প্রতিক্রিয়া তৈরি করা
- গ্রাহকের অনুরোধের ভিত্তিতে অর্ডার দেওয়া
- খেলার নিয়ম এবং জয়ের শর্তাবলী বাস্তবায়ন করা
৩. ক্যালেন্ডার এপিআই সক্ষম করুন
- Dialogflow কনসোলে , ক্লিক করুন
. - সাধারণ ট্যাবে, Project ID তে স্ক্রোল করুন, তারপর Google Cloud এ ক্লিক করুন।
.

- গুগল ক্লাউড কনসোলে, নেভিগেশন মেনু ☰ > APIs & Services > Library এ ক্লিক করুন।
- "গুগল ক্যালেন্ডার এপিআই" অনুসন্ধান করুন, তারপর আপনার গুগল ক্লাউড প্রোজেক্টে এপিআই ব্যবহার করতে সক্ষম করুন এ ক্লিক করুন।
৪. পরিষেবা অ্যাকাউন্ট সেট আপ করুন
- নেভিগেশন মেনু ☰ > API এবং পরিষেবা > শংসাপত্র ক্লিক করুন।
- ক্রেডেনশিয়াল তৈরি করুন > পরিষেবা অ্যাকাউন্ট ক্লিক করুন।

- পরিষেবা অ্যাকাউন্টের বিবরণে , পরিষেবা অ্যাকাউন্টের নাম হিসাবে "অ্যাপয়েন্টমেন্ট-শিডিউলার" লিখুন, তারপর তৈরি করুন এ ক্লিক করুন।

- যেখানে লেখা আছে "এই পরিষেবা অ্যাকাউন্টকে প্রকল্পে অ্যাক্সেস দিন" , সেখানে এটি এড়িয়ে যেতে " চালু থাকুন " এ ক্লিক করুন।
- যেখানে লেখা আছে ব্যবহারকারীদের এই পরিষেবা অ্যাকাউন্টে অ্যাক্সেস দিন (ঐচ্ছিক) , সেখানে Create Key এ ক্লিক করুন, তারপর JSON নির্বাচন করুন এবং Create এ ক্লিক করুন।
আপনার কম্পিউটারে একটি JSON ফাইল ডাউনলোড হবে, যা আপনার নিম্নলিখিত সেটআপ বিভাগগুলিতে প্রয়োজন হবে। 
৫. ক্যালেন্ডার সেটআপ
- ক্যালেন্ডারে নেভিগেট করুন, তারপর প্রধান মেনু ☰ > অন্যান্য ক্যালেন্ডার যোগ করুন এ ক্লিক করুন
> নতুন ক্যালেন্ডার তৈরি করুন ।

- ক্যালেন্ডারের নাম হিসেবে "অ্যাপয়েন্টমেন্ট ক্যালেন্ডার" লিখুন এবং ক্যালেন্ডার তৈরি করুন এ ক্লিক করুন।
- পৃষ্ঠাটি পুনরায় লোড করুন, তারপর অ্যাপয়েন্টমেন্ট ক্যালেন্ডারে ক্লিক করুন, নির্দিষ্ট লোকেদের সাথে শেয়ার করুন -এ স্ক্রোল করুন, তারপর লোকেদের যোগ করুন -এ ক্লিক করুন।
- পরিষেবা অ্যাকাউন্ট সেটআপের অংশ হিসেবে ডাউনলোড করা JSON ফাইল থেকে
client_emailকপি করুন এবং ডায়ালগে পেস্ট করুন।

- অনুমতি ড্রপ-ডাউন তালিকায় ক্লিক করুন, তারপর ইভেন্টে পরিবর্তন করুন > পাঠান ক্লিক করুন।

- সেটিংসে থাকাকালীন, "ইন্টিগ্রেট ক্যালেন্ডার" এ স্ক্রোল করুন এবং ক্যালেন্ডার আইডিটি কপি করুন।

৬. ডায়ালগফ্লোতে পরিপূর্ণতা সেট আপ করুন
পূরণের জন্য পরিষেবা অ্যাকাউন্ট এবং ক্যালেন্ডার আইডি যোগ করুন
- অ্যাপয়েন্টমেন্ট শিডিউলার ডায়ালগফ্লো এজেন্টে নেভিগেট করুন এবং পূর্ণতা ক্লিক করুন।
- ইনলাইন এডিটর সক্রিয় করুন ।

- নিম্নলিখিত কোড দিয়ে
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 পরিবর্তন করুন।
- স্থাপন করুন ক্লিক করুন।
পূরণ প্রতিক্রিয়া সক্ষম করুন
- Dialogflow কনসোলে নেভিগেট করুন এবং Intents এ ক্লিক করুন।
- অ্যাপয়েন্টমেন্টের ইন্টেন্ট নির্ধারণ করুন-এ ক্লিক করুন।
- Fulfillment- এ স্ক্রোল করে নিচের দিকে যান এবং "Intent-এর জন্য ওয়েবহুক কল সক্ষম করুন" চালু করুন।

- সংরক্ষণ করুন ক্লিক করুন।
- স্থাপন করুন ক্লিক করুন।
৭. আপনার চ্যাটবট পরীক্ষা করুন
আপনি অ্যাকশন সিমুলেটরে আপনার চ্যাটবট পরীক্ষা করতে পারেন, অথবা ওয়েব বা গুগল হোম ইন্টিগ্রেশন ব্যবহার করতে পারেন যা আপনি আগে জেনেছেন।
- ব্যবহারকারী: "আগামীকাল দুপুর ২টায় গাড়ি নিবন্ধনের জন্য একটি অ্যাপয়েন্টমেন্ট নির্ধারণ করুন।"
- চ্যাটবট: "ঠিক আছে, দেখি তোমাকে ফিট করতে পারি কিনা। ২৪শে এপ্রিল, দুপুর ২টা ঠিক আছে!"

- ক্যালেন্ডারে সাড়া জারী করা হয়।

৮. পরিষ্কার করা
যদি আপনি অন্যান্য Dialogflow কোডল্যাব সম্পূর্ণ করার পরিকল্পনা করেন, তাহলে আপাতত এই বিভাগটি এড়িয়ে যান এবং পরে আবার এটিতে ফিরে আসুন।
ডায়ালগফ্লো এজেন্ট মুছে ফেলুন
- ক্লিক করুন
আপনার বিদ্যমান এজেন্টের পাশে।

- জেনারেল ট্যাবে, নীচে স্ক্রোল করুন এবং Delete This Agent এ ক্লিক করুন।
- ডায়ালগে Delete টাইপ করুন এবং Delete এ ক্লিক করুন।
৯. অভিনন্দন
আপনি Dialogflow-এ একটি চ্যাটবট তৈরি করেছেন এবং এটি ক্যালেন্ডারের সাথে ইন্টিগ্রেট করেছেন। আপনি এখন একজন চ্যাটবট ডেভেলপার!
আরও জানুন
আরও জানতে, Dialogflow Github পৃষ্ঠায় কোড নমুনাগুলি দেখুন।