1. ভূমিকা
এই নিবন্ধে আমরা শিখব কিভাবে Dialogflow BigQuery-এর সাথে সংযোগ স্থাপন করে এবং কথোপকথনের অভিজ্ঞতার সময় সংগৃহীত তথ্য সংরক্ষণ করে। আমরা একই এজেন্ট ব্যবহার করব যা আমরা পূর্ববর্তী ল্যাবগুলিতে তৈরি করেছি " অ্যাপয়েন্টমেন্ট শিডিউলার "৷ এজেন্টের GCP প্রকল্পে আমরা BigQuery-এ একটি ডেটাসেট এবং একটি টেবিল তৈরি করব। তারপর আমরা BigQuery ডেটাসেট এবং টেবিল আইডি দিয়ে আসল পূরণ সম্পাদনা করব। অবশেষে আমরা পরীক্ষা করব যে ইন্টারঅ্যাকশনগুলি BigQuery-এ রেকর্ড করা হচ্ছে কিনা।
এখানে ব্যবহারকারী থেকে পূর্ণতা এবং BigQuery পর্যন্ত ইভেন্টের সিকোয়েন্স ডায়াগ্রাম রয়েছে।
আপনি কি শিখবেন
- BigQuery-এ কীভাবে একটি ডেটাসেট এবং টেবিল তৈরি করবেন
- Dialogflow পূরণে BigQuery সংযোগের বিবরণ কীভাবে সেট-আপ করবেন।
- পরিপূর্ণতা পরীক্ষা কিভাবে
পূর্বশর্ত
- ডায়ালগফ্লো-এর মৌলিক ধারণা এবং গঠন। প্রাথমিক কথোপকথনমূলক ডিজাইন কভার করে এমন প্রাথমিক ডায়ালগফ্লো টিউটোরিয়াল ভিডিওগুলির জন্য, নিম্নলিখিত ভিডিওগুলি দেখুন:
- ডায়ালগফ্লো ব্যবহার করে একটি অ্যাপয়েন্টমেন্ট শিডিউলার চ্যাটবট তৈরি করুন।
- ডায়ালগফ্লোতে সত্তা বোঝা।
- পূর্ণতা: Google ক্যালেন্ডারের সাথে ডায়ালগফ্লোকে একীভূত করুন।
2. BigQuery-এ ডেটাসেট এবং টেবিল তৈরি করুন
- Google ক্লাউড কনসোলে নেভিগেট করুন
- ক্লাউড কনসোলে, মেনু আইকনে যান ☰ > বিগ ডেটা > BigQuery
- বাম ফলকে সম্পদের অধীনে, প্রকল্প আইডিতে ক্লিক করুন, একবার নির্বাচিত হলে, আপনি ডানদিকে ডেটাসেট তৈরি করতে দেখতে পাবেন
- CREATE DATASET-এ ক্লিক করে নাম দিন।
- ডেটাসেট তৈরি হয়ে গেলে, বাম প্যানেল থেকে এটিতে ক্লিক করুন। আপনি ডানদিকে টেবিল তৈরি করতে দেখতে পাবেন।
- CREATE TABLE এ ক্লিক করুন, টেবিলের নাম দিন এবং স্ক্রিনের নীচে টেবিল তৈরি করুন ক্লিক করুন।
- টেবিল তৈরি হয়ে গেলে, বাম প্যানেল থেকে টেবিলে ক্লিক করুন। আপনি ডান দিকে " স্কিমা সম্পাদনা করুন" বোতাম দেখতে পাবেন।
- Edit Schema বাটনে ক্লিক করুন এবং Add Field বাটনে ক্লিক করুন। " তারিখ " ক্ষেত্র যোগ করুন এবং " সময় " এবং " টাইপ " এর জন্য একই পুনরাবৃত্তি করুন।
- " DatasetID" এবং " tableID" নোট করুন
3. Dialogflow পূরণে BigQuery সংযোগের বিবরণ যোগ করুন
- ডায়ালগফ্লো এজেন্ট খুলুন এবং পূর্ণতা ইনলাইন সম্পাদক সক্ষম করুন। আপনার যদি এই বিষয়ে সাহায্যের প্রয়োজন হয় তবে পূর্ববর্তী ল্যাবটি দেখুন।
- ডায়ালগফ্লো পূর্ণতা ইনলাইন এডিটরের " package.json"- এ একটি BigQuery নির্ভরতা রয়েছে তা নিশ্চিত করুন। "@google-cloud/bigquery": "0.12.0"। আপনি এই নিবন্ধটি অনুসরণ করার সময় BigQuery-এর সর্বশেষ সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করুন।
- index.js-এ BigQuery টেবিলে তারিখ, সময় এবং অ্যাপয়েন্টমেন্টের ধরন যোগ করতে " addToBigQuery " ফাংশন তৈরি করে।
- আপনার BigQuery টেবিল এবং ডেটাসেটকে আপনার পূরণের সাথে সঠিকভাবে সংযুক্ত করতে index.js ফাইলের TODO বিভাগে ProjectID , datasetID এবং tableID যোগ করুন।
{
"name": "dialogflowFirebaseFulfillment",
"description": "Dialogflow fulfillment for the bike shop sample",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "6"
},
"scripts": {
"lint": "semistandard --fix \"**/*.js\"",
"start": "firebase deploy --only functions",
"deploy": "firebase deploy --only functions"
},
"dependencies": {
"firebase-functions": "2.0.2",
"firebase-admin": "^5.13.1",
"actions-on-google": "2.2.0",
"googleapis": "^27.0.0",
"dialogflow-fulfillment": "0.5.0",
"@google-cloud/bigquery": "^0.12.0"
}
}
'use strict';
const functions = require('firebase-functions');
const {google} = require('googleapis');
const {WebhookClient} = require('dialogflow-fulfillment');
const BIGQUERY = require('@google-cloud/bigquery');
// Enter your calendar ID below and service account JSON below
const calendarId = "XXXXXXXXXXXXXXXXXX@group.calendar.google.com";
const serviceAccount = {}; // 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';
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log("Parameters", agent.parameters);
const appointment_type = agent.parameters.AppointmentType;
// Function to create appointment in calendar
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!.`);
// Insert data into a table
addToBigQuery(agent, appointment_type);
}).catch(() => {
agent.add(`I'm sorry, there are no slots available for ${appointmentTimeString}.`);
});
}
let intentMap = new Map();
intentMap.set('Schedule Appointment', makeAppointment);
agent.handleRequest(intentMap);
});
//Add data to BigQuery
function addToBigQuery(agent, appointment_type) {
const date_bq = agent.parameters.date.split('T')[0];
const time_bq = agent.parameters.time.split('T')[1].split('-')[0];
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
//const projectId = '<INSERT your own project ID here>';
//const datasetId = "<INSERT your own dataset name here>";
//const tableId = "<INSERT your own table name here>";
const bigquery = new BIGQUERY({
projectId: projectId
});
const rows = [{date: date_bq, time: time_bq, type: appointment_type}];
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then(() => {
console.log(`Inserted ${rows.length} rows`);
})
.catch(err => {
if (err && err.name === 'PartialFailureError') {
if (err.errors && err.errors.length > 0) {
console.log('Insert errors:');
err.errors.forEach(err => console.error(err));
}
} else {
console.error('ERROR:', err);
}
});
agent.add(`Added ${date_bq} and ${time_bq} into the table`);
}
// Function to create appointment 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);
}
);
}
});
});
}
কোড থেকে ইভেন্টের ক্রম বুঝুন
- অভিপ্রায় মানচিত্রটি Google ক্যালেন্ডারে একটি অ্যাপয়েন্টমেন্ট নির্ধারণ করতে " মেক অ্যাপয়েন্টমেন্ট" ফাংশনকে কল করে
- একই ফাংশনের মধ্যে BigQuery লগ ইন করার জন্য ডেটা পাঠাতে " addToBigQuery " ফাংশনে একটি কল করা হয়।
4. আপনার চ্যাটবট এবং BigQuery টেবিল পরীক্ষা করুন!
আসুন আমাদের চ্যাটবট পরীক্ষা করি, আপনি এটি সিমুলেটরে পরীক্ষা করতে পারেন বা ওয়েব বা গুগল হোম ইন্টিগ্রেশন ব্যবহার করতে পারেন যা আমরা পূর্ববর্তী নিবন্ধগুলিতে শিখেছি।
- ব্যবহারকারী: "গাড়ির নিবন্ধনের জন্য আগামীকাল দুপুর ২টায় একটি অ্যাপয়েন্টমেন্ট সেট করুন"
- চ্যাটবট প্রতিক্রিয়া: "ঠিক আছে, আমাকে দেখতে দিন আমরা আপনাকে উপযুক্ত করতে পারি কিনা। আগস্ট 6, দুপুর 2টা ঠিক আছে!"
- প্রতিক্রিয়ার পরে BigQuery টেবিল চেক করুন। "
projectID.datasetID.tableID
থেকে নির্বাচন করুন" কোয়েরি ব্যবহার করুন
5. পরিচ্ছন্নতা
আপনি যদি এই সিরিজের অন্যান্য ল্যাবগুলি করার পরিকল্পনা করে থাকেন তবে এখনই পরিষ্কার করবেন না, সিরিজের সমস্ত ল্যাবগুলির সাথে আপনার কাজ শেষ হওয়ার পরে এটি করুন৷
ডায়ালগফ্লো এজেন্ট মুছুন
- গিয়ার আইকনে ক্লিক করুন
আপনার বিদ্যমান এজেন্টের পাশে
- সাধারণ ট্যাবে নীচে স্ক্রোল করুন এবং এই এজেন্ট মুছুন ক্লিক করুন।
- প্রদর্শিত উইন্ডোতে DELETE টাইপ করুন এবং মুছুন ক্লিক করুন।
6. অভিনন্দন!
আপনি একটি চ্যাটবট তৈরি করেছেন এবং অন্তর্দৃষ্টি পেতে এটিকে BigQuery-এর সাথে একীভূত করেছেন। আপনি এখন একজন চ্যাটবট বিকাশকারী!
এই অন্যান্য সংস্থানগুলি দেখুন:
- ডায়ালগফ্লো গিথুব পৃষ্ঠায় কোডের নমুনাগুলি দেখুন।