১. শুরু করার আগে
জেমিনির সাথে গুগল চ্যাট অ্যাপগুলো কী কী?
জেমিনি সহ গুগল চ্যাট অ্যাপগুলি নিম্নলিখিত কাজগুলি করে:
- আপনার পরিষেবা এবং রিসোর্সসমূহ গুগল চ্যাটে নিয়ে আসুন, যা ব্যবহারকারীদের কথোপকথন থেকে বের না হয়েই তথ্য পেতে এবং পদক্ষেপ নিতে দেয়।
- জেনারেটিভ এআই মডেল জেমিনির সাথে ইন্টিগ্রেট করুন, যাতে এটি আপনার ওয়ার্কফ্লোকে সুবিন্যস্ত করতে নির্দিষ্ট সময়ে টেক্সট বা ছবির মতো ডেটা তৈরি বা অনুসন্ধান করতে পারে।
কেন জেমিনির সাথে গুগল চ্যাট অ্যাপস ইন্টিগ্রেট করবেন?
জেমিনির মতো জেনারেটিভ এআই মডেলের সাধারণ ব্যবহারগুলো নিম্নলিখিত বিভাগগুলোতে পড়ে:
- কন্টেন্ট তৈরি ও উন্নয়ন । মার্কেটিং কপি তৈরি করা, সোশ্যাল মিডিয়া পোস্ট রচনা করা, বাস্তবসম্মত ছবি তৈরি করা, সঙ্গীত রচনা করা, অথবা ভিডিও কন্টেন্ট তৈরিতে সহায়তা করা।
- ডেটা অনুসন্ধান । অসংগঠিত জ্ঞানভান্ডার থেকে মূল তথ্য আহরণ করুন, দীর্ঘ পাঠ্য সংক্ষিপ্ত করুন, বিষয়বস্তু শ্রেণীবদ্ধ করুন, অথবা উন্নত নির্ভুলতা ও গতিতে ভাষা অনুবাদ করুন।
- কথোপকথন । স্বাভাবিক, তথ্যপূর্ণ এবং সৃজনশীল কথোপকথনে অংশ নিন।
যারা তাদের ব্যবহারকারীদের অভিজ্ঞতা ও কর্মদক্ষতা উন্নত করতে চান, তাদের জন্য গুগল চ্যাটের পরিচিত ইন্টারফেসের মধ্যেই এই সুবিধাগুলো সরাসরি একীভূত করার ক্ষমতা একটি বিশাল সুযোগ।
পূর্বশর্ত
- অ্যাপস স্ক্রিপ্ট , গুগল ক্লাউড এবং নোড.জেএস সম্পর্কে প্রাথমিক জ্ঞান।
- গুগল চ্যাটের ধারণা, যেমন— ইভেন্ট হ্যান্ডলার , স্ল্যাশ কমান্ড , ডায়ালগ , কার্ড , মেসেজ , অ্যাপ অথেন্টিকেশন এবং এপিআই সম্পর্কে প্রাথমিক জ্ঞান।
আপনি যা তৈরি করেন
এই কোডল্যাবে, আপনি পূর্ববর্তী বিভাগে আলোচিত তিনটি ব্যবহারের ক্ষেত্র (use cases) পূরণের জন্য জেমিনি (Gemini) ব্যবহার করে তিনটি গুগল চ্যাট অ্যাপ তৈরি করবেন।
সমস্যা ব্যবস্থাপনা অ্যাপ (বিষয়বস্তু তৈরি এবং উন্নতকরণ)
এই অ্যাপটি নিম্নলিখিত কাজগুলো করে:
- সাধারণ ইন্টারঅ্যাকশন, অ্যাপ হোম এবং অ্যাপ অথেন্টিকেশনের মাধ্যমে ইস্যু তৈরি থেকে শুরু করে তার সমাধান পর্যন্ত পরিচালনা করে।
- বার্তা পর্যবেক্ষণ করে এবং ইভেন্ট ও অ্যাকসেসরি উইজেটগুলোর ক্ষেত্রে অন্তর্ভুক্তিমূলক সহায়তা প্রদান করে।
আপনি মিথুন রাশি ব্যবহার করে নিম্নলিখিত কাজগুলো করেন:
- বার্তার ইতিহাস এবং সমস্যার বিবরণের উপর ভিত্তি করে সমস্যা প্রতিবেদন তৈরি করুন।
- গেটেড প্রম্পট ব্যবহার করে বার্তা থেকে অন্তর্ভুক্তিমূলক নয় এমন শব্দ শ্রেণীবদ্ধ করুন।
ব্যবহৃত প্রধান প্রযুক্তিগুলো হলো ভার্টেক্স এআই, জেমিনি, অ্যাপস স্ক্রিপ্ট এবং গুগল ওয়ার্কস্পেস এপিআই (অ্যাডমিন, চ্যাট, ডক্স, ইভেন্টস)।



জ্ঞান অ্যাপ (ডেটা অনুসন্ধান)
এই অ্যাপটি স্বাভাবিক ভাষায় প্রশ্ন বুঝতে ও উত্তর দিতে এবং অসংগঠিত ডেটা থেকে উৎসের তথ্যসূত্র ফেরত দিতে জেমিনির ওপর নির্ভর করে।
ব্যবহৃত প্রধান প্রযুক্তিগুলো হলো Dialogflow CX data store agent, Dialogflow CX webhook, Google Cloud Functions, এবং Gemini।

প্রতিক্রিয়া অ্যাপ (কথোপকথন)
এই অ্যাপটি স্বাভাবিক ভাষায় কথোপকথনসহ রিভিউ সংগ্রহ ও সংরক্ষণ করতে জেমিনির ওপর নির্ভর করে।
ব্যবহৃত প্রধান প্রযুক্তিগুলো হলো Dialogflow CX agent, Dialogflow CX tool, OpenAPI, Google Cloud Functions, এবং Gemini।

আপনি যা শিখবেন
- Vertex AI-এর মাধ্যমে Gemini-তে Google Chat অ্যাপগুলি কীভাবে সংযুক্ত করবেন।
- Dialogflow CX এজেন্টের সাথে Google Chat অ্যাপগুলিকে কীভাবে সংযুক্ত করবেন।
- গুগল চ্যাটের সর্বশেষ ফিচারগুলো কীভাবে ব্যবহার করবেন: অ্যাপ হোম, গুগল চ্যাট ইভেন্টস এবং অ্যাকসেসরি উইজেট।
তোমার যা দরকার
- অ্যাপস স্ক্রিপ্ট ব্যবহার করে একটি গুগল চ্যাট অ্যাপ তৈরির কুইকস্টার্টটি সম্পন্ন হলো। এই কোডল্যাবটি পূর্ববর্তী অ্যাপস স্ক্রিপ্ট এবং গুগল ক্লাউড প্রজেক্টটির উপর ভিত্তি করে তৈরি।
২. প্রস্তুত হন
সম্পদ প্রারম্ভিকীকরণ করুন
এই বিভাগে, আপনি আপনার পছন্দের ওয়েব ব্রাউজার থেকে নিম্নলিখিত রিসোর্সগুলো অ্যাক্সেস ও কনফিগার করতে পারবেন।
অ্যাপস স্ক্রিপ্ট প্রজেক্ট
অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- সেটিংসে ক্লিক করুন এবং তারপরে গুগল অ্যাপস স্ক্রিপ্ট এপিআই (Google Apps Script API) সক্রিয় করুন।

- আপনার প্রকল্পটি নির্বাচন করুন।
- প্রজেক্ট সেটিংস-এ ক্লিক করুন।
- এডিটরে "
appsscript.json" ম্যানিফেস্ট ফাইল দেখানোর চেকবক্সটি নির্বাচন করুন। - প্রজেক্টটির নাম পরিবর্তন করে
Chat Apps Geminiরাখুন।

গুগল ক্লাউড প্রকল্প
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- মেনু ☰ > এপিআই ও পরিষেবা > ওঅথ সম্মতি স্ক্রিন > অ্যাপ সম্পাদনা-তে ক্লিক করুন এবং তারপরে অ্যাপের নাম
Chat Apps Geminiসেট করুন।
- Google Chat API কনফিগারেশনে যান এবং তারপরে অ্যাপের নাম ও বিবরণ
Chat Apps Geminiহিসেবে সেট করুন।

গুগল চ্যাট
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- প্রয়োজনে আপনার গুগল চ্যাট অ্যাপ দিয়ে চ্যাট শুরু করুন।
- এটি কাজ করছে কিনা তা নিশ্চিত করতে,
Helloমতো একটি বার্তা পাঠান।

সোর্স কোড এবং রিসোর্স স্থানীয়ভাবে ডাউনলোড করুন
- এই গিটহাব রিপোজিটরিটি ডাউনলোড করুন।
- আপনার পছন্দের ডেভেলপমেন্ট এনভায়রনমেন্টে,
apps-scriptডিরেক্টরিটি খুলুন এবং তারপর আপনার টার্মিনালে একই ডিরেক্টরিতে যান।

clasp ইনস্টল এবং কনফিগার করুন
আমরা লোকাল এনভায়রনমেন্ট থেকে অ্যাপস স্ক্রিপ্ট প্রজেক্টে সোর্স কোডের বিভিন্ন ভার্সন সহজে সম্পাদনা ও পুশ করার জন্য clasp ব্যবহার করি।
- আপনার লোকাল এনভায়রনমেন্টে
node,npm, এবংclaspএর সর্বশেষ সংস্করণগুলো ইনস্টল করুন ।
npm install -g @google/clasp
- আপনার অ্যাকাউন্ট দিয়ে লগ ইন করুন :
clasp login

সফল হলে, আপনি আপনার ওয়েব ব্রাউজারে একটি সাধারণ নিশ্চিতকরণ স্ক্রিন দেখতে পাবেন এবং আপনার ক্লায়েন্ট ক্রেডেনশিয়ালসহ .clasprc.json ফাইলটি আপডেট হয়ে যাবে। এটি আপনার টার্মিনালে কোথায় অবস্থিত, তা আপনি খুঁজে নিতে পারেন।

৩. অ্যাপ ১: তৈরি করুন
ধারণা পর্যালোচনা করুন
ভার্টেক্স এআই
জেনারেটিভ এআই তৈরি ও ব্যবহারের জন্য আপনার প্রয়োজনীয় সবকিছুই ভার্টেক্স এআই প্রদান করে, যার মধ্যে রয়েছে এআই সলিউশন, এজেন্ট বিল্ডার, ১৩০টিরও বেশি ফাউন্ডেশন মডেল এবং একটি সমন্বিত এআই প্ল্যাটফর্ম।

মিথুন
জেমিনি হলো গুগলের একটি মাল্টিমোডাল এলএলএম, যা ভার্টেক্স এআই-এর মাধ্যমে গ্রহণ করা যায়। এটি মানুষকে তাদের মানবিক সম্ভাবনাকে উন্মোচন করতে সাহায্য করে, যাতে তারা তাদের কল্পনাশক্তি বাড়াতে, কৌতূহল প্রসারিত করতে এবং উৎপাদনশীলতা বৃদ্ধি করতে পারে।
উন্নত চ্যাট পরিষেবা
অ্যাডভান্সড চ্যাট পরিষেবা আপনাকে অ্যাপস স্ক্রিপ্টে গুগল চ্যাট এপিআই ব্যবহার করার সুযোগ দেয়। এর মাধ্যমে স্ক্রিপ্টগুলো চ্যাট স্পেস খুঁজে বের করতে, তৈরি করতে ও পরিবর্তন করতে, স্পেসে সদস্য যোগ বা অপসারণ করতে এবং টেক্সট, কার্ড, অ্যাটাচমেন্ট ও রিঅ্যাকশনসহ বার্তা পড়তে বা পোস্ট করতে পারে।
স্থাপত্য পর্যালোচনা

এই গুগল চ্যাট অ্যাপটি অ্যাপস স্ক্রিপ্ট দিয়ে তৈরি করা হয়েছে। এটি নিম্নোক্তভাবে কাজ করে:
- একজন ব্যবহারকারী সরাসরি বার্তা বা স্পেসের মাধ্যমে অ্যাপে একটি বার্তা পাঠান।
- অ্যাপটি, যা একটি অ্যাপস স্ক্রিপ্ট প্রজেক্টে বাস্তবায়িত এবং একটি গুগল ক্লাউড প্রজেক্টের সাথে যুক্ত, মেসেজটি প্রসেস করে।
- অ্যাপটি গুগল ডক্স এবং গুগল চ্যাট এপিআই-এর সাথে সমন্বিত হয়।
- অ্যাপটি স্ক্রিপ্ট প্রপার্টিতে ডেটা সংরক্ষণ করতে প্রপার্টিজ সার্ভিস ব্যবহার করে।
- অ্যাপটি সরাসরি বার্তায় অথবা মূল স্পেসে একযোগে প্রতিক্রিয়া পাঠায়।
পর্যালোচনা প্রবাহ
সমস্যা তৈরি করুন

নির্দিষ্ট স্থান থেকে সমস্যার সমাধান করুন

নির্দিষ্ট স্থান থেকে বিষয়টি বন্ধ করুন

সোর্স কোড পর্যালোচনা করুন
অ্যাপস স্ক্রিপ্ট প্রজেক্টটিতে নিম্নলিখিত স্ক্রিপ্টগুলো রয়েছে:
-
Configuration: পরিবেশের উপর ভিত্তি করে সম্পাদনাযোগ্য ধ্রুবকসমূহ। -
ChatApp: গুগল চ্যাটের বিভিন্ন ইন্টারঅ্যাকশন ইভেন্ট, যেমন—মেসেজ, কার্ড ক্লিক, স্ল্যাশ কমান্ড এবং ডায়ালগ পরিচালনা করে। -
Storage: ইউটিলিটি ফাংশন যা প্রোপার্টি সার্ভিসেস-এর উপর নির্ভর করে। -
ChatAppAuth: এমন ইউটিলিটি ফাংশন যা গুগল চ্যাট অ্যাপ অথেনটিকেশনের উপর নির্ভর করে। -
Docs: গুগল ডক্স-নির্ভর ইউটিলিটি ফাংশনসমূহ। -
VertexAi: ভার্টেক্স এআই-এর উপর নির্ভরশীল ইউটিলিটি ফাংশন।
আর এখানে সেই অংশগুলো দেওয়া হলো যেগুলো জেমিনি দিয়ে রিপোর্ট ডকুমেন্ট এবং চ্যাট স্পেস হিস্ট্রি তৈরি করার সময় সক্রিয়ভাবে ব্যবহৃত হয়:
appsscript.json
// Enables the Admin SDK Directory and Chat services, which you need to retrieve
// messages and usernames.
"enabledAdvancedServices": [
...
{
"userSymbol": "AdminDirectory",
"version": "directory_v1",
"serviceId": "admin"
},
{
"userSymbol": "Chat",
"version": "v1",
"serviceId": "chat"
}
...
]
// Includes the OAuth scopes to request the Admin SDK Directory, Google Chat,
// Google Docs, and Vertex AI APIs.
"oauthScopes": [
...
"https://www.googleapis.com/auth/admin.directory.user.readonly",
"https://www.googleapis.com/auth/chat.messages.readonly",
"https://www.googleapis.com/auth/documents",
"https://www.googleapis.com/auth/cloud-platform",
...
]
Configuration.js
// Relies on two constants: the first one is the Google Cloud project ID and the
// second one is the Vertex AI location to be used.
...
const PROJECT_ID = 'replace-with-gcp-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
...
ChatApp.js
// The slash command process function retrieves history, generates content, and passes
// it to the report generator.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
const history = exportSpaceHistory(spaceId);
const summary = summarizeSpace(history);
const docUrl = createReport(
issue.title, issue.description, resolution, history, summary
);
...
}
...
}
/**
* Fetches and concatenates the 100 first space messages by using the Google Chat API.
*
* Messages with slash commands are filtered (app command invocations).
*
* @return {string} concatenate space messages in the format "Sender's name: Message"
*/
function exportSpaceHistory(spaceName) {
const messages = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 }).messages;
// Returns results after fetching message sender display names.
let users = new Map();
return messages
.filter(message => message.slashCommand === undefined)
.map(message =>
`${getUserDisplayName(users, message.sender.name)}: ${message.text}`
).join('\n');
}
/**
* Fetches a user's display name by using the Admin Directory API.
*
* A cache is used to only call the API once per user.
*
* @param {Map} cache the map containing users previously fetched
* @param {string} userId the user ID to fetch
* @return {string} the user's display name
*/
function getUserDisplayName(cache, userId) {
if (cache.has(userId)) {
return cache.get(userId);
}
let displayName = 'Unknown User';
try {
const user = AdminDirectory.Users.get(
userId.replace("users/", ""),
{ projection: 'BASIC', viewType: 'domain_public' });
displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
} catch (e) {
// Ignores errors, uses 'Unknown User' by default.
}
cache.set(userId, displayName);
return displayName;
}
VertexAi.js
/**
* Summarizes a Google Chat space history with the Gemini Pro model using
* Vertex AI API.
*
* @param {string} history the history
* @return {string} the summary
*/
function summarizeSpace(history) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Summarize the following conversation between engineers resolving"
+ " an issue in a few sentences.\n\n" + history
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
Docs.js
// The report generator function adds two sections: the first one is for the summary and the second one is for history.
function createReport(..., history, summary) {
...
body.appendParagraph("Summary").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(summary);
body.appendParagraph("History").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(history);
...
}
গুগল ক্লাউড প্রজেক্ট আপডেট করুন
এপিআই সক্ষম করুন
- Google Cloud কনসোলে Google Docs , Google Admin SDK , এবং Vertex AI API-গুলো সক্রিয় করুন:
- মেনু ☰ > এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা-তে ক্লিক করুন এবং তারপর এপিআইগুলো সক্রিয় আছে কিনা তা নিশ্চিত করুন।
পরিষেবা অ্যাকাউন্ট শুরু করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > আইএএম ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস > + সার্ভিস অ্যাকাউন্ট তৈরি করুন- এ ক্লিক করুন।

- সার্ভিস অ্যাকাউন্টের নাম
chat-appএ সেট করুন। - সার্ভিস অ্যাকাউন্টের বিবরণ
Chat app auth-এ সেট করুন। - তৈরি করুন-এ ক্লিক করুন এবং চালিয়ে যান ।
- 'সম্পন্ন' (Done ) ক্লিক করুন। আপনাকে পরিষেবা অ্যাকাউন্ট (Service accounts) পৃষ্ঠায় পুনঃনির্দেশিত করা হবে এবং আপনি আপনার তৈরি করা পরিষেবা অ্যাকাউন্টটি দেখতে পাবেন।

- নতুন তৈরি করা পরিষেবা অ্যাকাউন্টটি নির্বাচন করুন।
- Keys ট্যাবটি নির্বাচন করুন।
- চাবি যোগ করুন -এ ক্লিক করুন।
- নতুন কী তৈরি করুন -এ ক্লিক করুন।
- JSON নির্বাচন করুন।
- তৈরি করুন- এ ক্লিক করুন।

ডায়ালগটি বন্ধ হয়ে যায় এবং আপনার নতুন তৈরি করা পাবলিক/প্রাইভেট কী পেয়ারটি একটি JSON ফাইল হিসেবে স্বয়ংক্রিয়ভাবে আপনার লোকাল এনভায়রনমেন্টে ডাউনলোড হয়ে যায়। পরবর্তীতে আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টের সোর্স কোড সম্পাদনা করার সময় আপনি এর বিষয়বস্তু ব্যবহার করতে পারেন।
গুগল চ্যাট এপিআই কনফিগারেশন আপডেট করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- একটি স্ল্যাশ কমান্ড যোগ করুন।
- নাম
/createএ সেট করুন। - কমান্ড আইডি
1এ সেট করুন। -
Create a new issueকরতে বিবরণ সেট করুন। - "একটি ডায়ালগ খোলে " চেকবক্সটি নির্বাচন করুন।
- আরেকটি স্ল্যাশ কমান্ড যোগ করুন।
- নাম
/closeএ সেট করুন। - কমান্ড আইডি
2এ সেট করুন। -
Close an issueকরতে বিবরণ সেট করুন। - সংরক্ষণ করুন- এ ক্লিক করুন।

অ্যাপস স্ক্রিপ্ট প্রকল্প আপডেট করুন
- আপনার লোকাল টার্মিনালে বর্তমান ডিরেক্টরি পরিবর্তন করে
issue-management/1-baselineএ যান। এখানেই সোর্স কোডটি রয়েছে। আপনার অ্যাপস স্ক্রিপ্ট প্রজেক্টে সোর্স কোডটি পুশ করার আগে, আপনাকে কয়েকটি বিষয় কনফিগার করতে হবে।
সোর্স কোড কনফিগার করুন
-
Configuration.jsফাইলেCHAT_CREDENTIALSনামের JSON কনস্ট্যান্টটিতে আপনার পূর্বে ডাউনলোড করা প্রাইভেট কী ফাইলের কন্টেন্ট সেট করুন।

- Google Cloud কনসোলে , মেনু ☰ > IAM ও অ্যাডমিন > সেটিংস- এ ক্লিক করুন।
- প্রজেক্ট আইডিটি কপি করুন।

-
Configuration.jsফাইলেPROJECT_IDনামের স্ট্রিং কনস্ট্যান্টটিকে প্রজেক্ট আইডিতে সেট করুন।

clasp সেটিংস কনফিগার করুন
সোর্স কোড সঠিক অ্যাপস স্ক্রিপ্ট প্রজেক্টে পুশ করার জন্য clasp ) সেটিংস ইনিশিয়ালাইজ করতে, এই ধাপগুলো অনুসরণ করুন:
- অ্যাপস স্ক্রিপ্ট কনসোলে আপনার প্রজেক্টটি নির্বাচন করুন।
- প্রজেক্ট সেটিংস নির্বাচন করুন।
- আইডি-এর নিচে, কপি-তে ক্লিক করুন।

- বর্তমান ডিরেক্টরিতে একটি
.clasp.jsonফাইল তৈরি করুন। -
<your-script-id>এর জায়গায় কপি করা আইডিটি বসান। - ফলাফলটি
.clasp.jsonফাইলে কপি করুন। -
.clasp.jsonফাইলটি সংরক্ষণ করুন।
{
"scriptId": "<your-script-id>"
}
সোর্স কোড পুশ করুন
- নিম্নলিখিত কমান্ডটি চালান:
$clasp push ? Manifest file has been updated. Do you want to push and overwrite? Yes └─ appsscript.json └─ ChatApp.js └─ ChatAppAuth.js └─ Configuration.js └─ Docs.js └─ Storage.js └─ VertexAi.js Pushed 7 files.
চেষ্টা করে দেখুন
- গুগল চ্যাটে , অ্যাপটিকে সরাসরি মেসেজে
Hello!পাঠান। অ্যাপটি কোনো উত্তর দেয় না, কিন্তু একটি মেসেজ আসে যা কনফিগারেশন করতে বলে।

- কনফিগার-এ ক্লিক করুন।
- আপনার গুগল অ্যাকাউন্ট নির্বাচন করুন।
- প্রমাণীকরণ করুন।
- পর্যালোচনা করুন এবং অ্যাপটিতে প্রবেশের অনুমতি দিন।

সফল হলে, আপনি ওয়েব পেজে একটি সাধারণ নিশ্চিতকরণ স্ক্রিন এবং আপনার মূল বার্তার জবাবে অ্যাপ থেকে একটি প্রকৃত প্রতিক্রিয়া দেখতে পাবেন।


- অ্যাপটিতে আরেকটি সরাসরি বার্তা পাঠান, কিন্তু স্ল্যাশ কমান্ড
/createব্যবহার করে।

- ডায়ালগ বক্সে, Title-কে
Issue Title 1এ সেট করুন। - বিবরণকে ইস্যু
Description 1এ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।

অ্যাপটি নিম্নলিখিত কাজগুলো করে:
- ডায়ালগটি বন্ধ করে।
- একই শিরোনামে নতুন সৃষ্ট ইস্যুটির জন্য একটি নির্দিষ্ট স্থান তৈরি করে।
- নতুন তৈরি করা স্থানটিতে যোগদান করে।
- নতুন তৈরি করা স্পেসটিতে সমস্যাটির বিবরণসহ একটি বার্তা পাঠায়।
- নতুন তৈরি করা স্পেসটির লিঙ্কসহ আপনাকে একটি সরাসরি বার্তা পাঠানো হয়।

- নতুন তৈরি করা স্পেসে, স্ল্যাশ কমান্ড
/closeএবংNot reproducibleএর মতো রেজোলিউশন সহ একটি মেসেজ পাঠান।

অ্যাপটি নিম্নলিখিত কাজগুলো করে:
- গুগল ডক্স-এ একটি রিপোর্ট ডকুমেন্ট তৈরি করে।
- সমস্যাটির জন্য নির্ধারিত স্থানে নতুন তৈরি হওয়া রিপোর্ট ডকুমেন্টের একটি লিঙ্কসহ একটি বার্তা পাঠায়।

- রিপোর্ট ডকুমেন্টটি খুলুন। এতে মৌলিক তথ্য, ইতিহাস এবং একটি সারসংক্ষেপ রয়েছে।

৪. ঐচ্ছিক: অ্যাপ ১: অ্যাপের হোমপেজে যোগ করুন
ধারণা পর্যালোচনা করুন
অ্যাপ হোম হলো একটি কাস্টমাইজযোগ্য কার্ড মেসেজ, যা কোনো চ্যাট অ্যাপ ব্যবহারকারীকে তখন পাঠায় যখন ব্যবহারকারী সেই অ্যাপের সাথে সরাসরি মেসেজ থেকে হোম ট্যাবে প্রবেশ করেন। এটি সাধারণত অ্যাপের ডকুমেন্টেশন বা একটি সংক্ষিপ্ত বিবরণ দেখানোর জন্য ব্যবহৃত হয়। প্রযুক্তিগতভাবে, এটি পরিচালনা করার জন্য একটি নির্দিষ্ট ইভেন্ট রয়েছে এবং এটি কার্ড মেসেজের মূল নীতিগুলোর ওপর ভিত্তি করেই কাজ করে।

পর্যালোচনা প্রবাহ
সমস্যাগুলি পরিচালনা করুন
সোর্স কোড পর্যালোচনা করুন
অ্যাপস স্ক্রিপ্ট প্রজেক্টটি সম্পাদনা করা প্রয়োজন।
ChatApp.js
/**
* Handles app home requests in Google Chat.
*
* Displays the latest status of all issues.
*/
function onAppHome() {
// Generates one card section per issue.
var sections = [];
for (var issueKey in appProperties.getProperties()) {
const issue = JSON.parse(appProperties.getProperty(issueKey));
if (issue.spaceId) {
sections.push({
header: `${issue.status} - ${issue.title}`,
widgets: [{ textParagraph: {
text: `Description: ${issue.description}`
}}, { textParagraph: {
text: `Resolution: ${issue.resolution}`
}}, { buttonList: { buttons: [{
text: "Open space",
onClick: { openLink: {
url: `https://mail.google.com/mail/u/0/#chat/space/${issue.spaceId}`
}}
}, {
text: "Open report",
onClick: { openLink: {
url: issue.reportUrl !== "" ? issue.reportUrl : "docs.new"
}},
disabled: issue.reportUrl === ""
}]}
}]
});
}
}
return { action: { navigations: [{ push_card: {
sections: sections
}}]}};
}
গুগল ক্লাউড প্রজেক্ট আপডেট করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
আপনার স্থানীয় পরিবেশে, এই পদক্ষেপগুলো অনুসরণ করুন:
- আপনার টার্মিনালে বর্তমান ডিরেক্টরি পরিবর্তন করে
issue-management/2-app-homeএ যান। এতে আপনার প্রয়োজনীয় সোর্স কোডটি রয়েছে। -
issue-management/1-baseline/.clasp.jsonফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন। -
issue-management/1-baseline/Configuration.jsফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন, যাতে এটি বিদ্যমান ফাইলটিকে প্রতিস্থাপন করে। - নিম্নলিখিত কমান্ডটি চালান:
clasp push
চেষ্টা করে দেখুন
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- স্ল্যাশ কমান্ড
/createব্যবহার করে অ্যাপটিতে একটি সরাসরি বার্তা পাঠান। অ্যাপটি একটি ডায়ালগ বক্স খুলবে। - শিরোনামটি
Issue Title 2এ সেট করুন। - বিবরণকে ইস্যু
Description 2এ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।

- Google Chat অ্যাপে আপনার স্পেস থেকে হোম ট্যাবটি নির্বাচন করুন। সেখানে আপনি আপনার তৈরি করা ইস্যুগুলোর বিস্তারিত দেখতে পাবেন।

৫. ঐচ্ছিক: অ্যাপ ১: স্থান পর্যবেক্ষণ যোগ করুন
ধারণা পর্যালোচনা করুন
পাব/সাব
পাব/সাব হলো একটি অ্যাসিঙ্ক্রোনাস এবং স্কেলেবল মেসেজিং পরিষেবা যা মেসেজ উৎপাদনকারী পরিষেবাগুলোকে সেই মেসেজগুলো প্রক্রিয়াকারী পরিষেবাগুলো থেকে বিচ্ছিন্ন করে। পাব/সাব আপনাকে ইভেন্ট উৎপাদনকারী এবং গ্রহণকারী সিস্টেম তৈরি করতে দেয়, যাদেরকে পাবলিশার এবং সাবস্ক্রাইবার বলা হয়। পাবলিশাররা সিঙ্ক্রোনাস রিমোট প্রসিডিউর কল (RPC)-এর পরিবর্তে ইভেন্ট ব্রডকাস্ট করার মাধ্যমে অ্যাসিঙ্ক্রোনাসভাবে সাবস্ক্রাইবারদের সাথে যোগাযোগ করে।
পাবলিশাররা ইভেন্টগুলো কীভাবে বা কখন প্রসেস করা হবে তা বিবেচনা না করেই পাব/সাব সার্ভিসে পাঠায়। এরপর পাব/সাব সেই সমস্ত সার্ভিসে ইভেন্টগুলো পৌঁছে দেয়, যারা সেগুলোতে সাড়া দেয়। RPC-এর মাধ্যমে যোগাযোগকারী সিস্টেমে, পাবলিশারদের অবশ্যই সাবস্ক্রাইবারদের ডেটা পাওয়ার জন্য অপেক্ষা করতে হয়। তবে, পাব/সাব-এর অ্যাসিঙ্ক্রোনাস ইন্টিগ্রেশন পুরো সিস্টেমের নমনীয়তা এবং দৃঢ়তা বৃদ্ধি করে।
টপিক : একটি নামযুক্ত রিসোর্স যা মেসেজের একটি ফিডকে উপস্থাপন করে। কোনো টপিকে পাবলিশ বা সাবস্ক্রাইব করার আগে আপনাকে অবশ্যই সেটি তৈরি করতে হবে।
সাবস্ক্রিপশন : কোনো টপিকে প্রকাশিত মেসেজ গ্রহণ করার জন্য, আপনাকে অবশ্যই সেই টপিকে একটি সাবস্ক্রিপশন তৈরি করতে হবে। সাবস্ক্রাইবার ক্লায়েন্ট টপিকে প্রকাশিত মেসেজগুলো গ্রহণ ও প্রসেস করে। একটি টপিকে একাধিক সাবস্ক্রিপশন থাকতে পারে, কিন্তু একটি নির্দিষ্ট সাবস্ক্রিপশন শুধুমাত্র একটি টপিকেরই অন্তর্গত।
গুগল ওয়ার্কস্পেস ইভেন্ট
গুগল ওয়ার্কস্পেস ইভেন্টগুলো গুগল ওয়ার্কস্পেস রিসোর্সের পরিবর্তন নির্দেশ করে, যেমন রিসোর্স তৈরি, আপডেট বা ডিলিট করা হলে। অ্যাপগুলো অ্যাসিঙ্ক্রোনাসভাবে প্রাসঙ্গিক ইভেন্টগুলো গ্রহণ ও প্রসেস করার জন্য গুগল ওয়ার্কস্পেস রিসোর্সগুলোতে সাবস্ক্রাইব করতে পারে।

সাবস্ক্রিপশনের মাধ্যমে গুগল ওয়ার্কস্পেস ইভেন্টস এপিআই যেভাবে একটি অ্যাপে ইভেন্ট সরবরাহ করে, তা নিচে দেওয়া হলো:
- অ্যাপটি গুগল ওয়ার্কস্পেস অ্যাপের কোনো একটি রিসোর্স, যেমন একটি স্পেস, সাবস্ক্রাইব করে।
- অ্যাপটি যে রিসোর্সে সাবস্ক্রাইব করেছে তা পরিবর্তিত হয়।
- গুগল ওয়ার্কস্পেস অ্যাপটি পাব/সাব-এর একটি টপিকে একটি ইভেন্ট পাঠায়, যা অ্যাপটির গুগল ওয়ার্কস্পেস সাবস্ক্রিপশনের জন্য নোটিফিকেশন এন্ডপয়েন্ট হিসেবে কাজ করে। এই ইভেন্টটিতে রিসোর্সটিতে কী পরিবর্তন হয়েছে, সে সম্পর্কিত ডেটা থাকে।
- অ্যাপটি ইভেন্ট সম্বলিত পাব/সাব বার্তাটি প্রক্রিয়া করে এবং প্রয়োজনে ব্যবস্থা গ্রহণ করে।
পর্যালোচনা প্রবাহ
সমস্যাটি তৈরি করুন (আপডেট)

নির্দিষ্ট স্থান থেকে সমস্যার সমাধান করুন (আপডেট)

নির্দিষ্ট স্থান থেকে সমস্যাটি বন্ধ করুন (আপডেট)

সাবস্ক্রিপশন প্রক্রিয়া করুন

সোর্স কোড পর্যালোচনা করুন
অ্যাপস স্ক্রিপ্ট প্রজেক্টটি সম্পাদনা করা প্রয়োজন।
appsscript.json
// Enables the Workspace Events service.
"enabledAdvancedServices": [
...
{
"userSymbol": "WorkspaceEvents",
"version": "v1",
"serviceId": "workspaceevents"
}
...
]
Configuration.js
// Adds two constants: the first one is the Pub/Sub topic ID and the second one
// is the Pub/Sub subscription ID to be used to retrieve Google Workspace events.
...
const GWS_PUBSUB_TOPIC_ID = `projects/${PROJECT_ID}/topics/workspace-events`;
const GWS_PUBSUB_SUBSCRIPTION_ID =
`projects/${PROJECT_ID}/subscriptions/workspace-events-sub`;
...
ChatApp.js
// Edits the function to delete the subscription at issue closure.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
deleteSubscription(issue.subscriptionId);
...
}
...
}
// Edits the function to create the subscription.
function createIssue(event) {
...
const subscriptionId = createSpaceSubscription(spaceUrl);
const createdIssue = saveCreatedIssue(..., subscriptionId);
...
}
// Edits the function to delete the subscription.
function onRemoveFromSpace(event) {
...
deleteSubscription(issue.subscriptionId);
...
}
স্টোরেজ.জেএস
// Edits the function to keep track of the subscription ID.
function saveCreatedIssue(..., spaceId, subscriptionId) {
...
appProperties.setProperty(spaceId, JSON.stringify({
...
subscriptionId: subscriptionId,
...
}));
...
}
WorkspaceEvent.js
/**
* Creates a new subscription to Google Workspace Events associated to a
* Google Chat space.
*
* The subscription scope includes message creation events and resources.
*
* @param {string} spaceId the space ID to create a subscription for
* @return the ID of the newly created subscription
*/
function createSpaceSubscription(spaceId) {
const operation = WorkspaceEvents.Subscriptions.create({
targetResource: `//chat.googleapis.com/${spaceId}`,
eventTypes: ["google.workspace.chat.message.v1.created"],
notificationEndpoint: { pubsubTopic: GWS_PUBSUB_TOPIC_ID },
payloadOptions: { includeResource: true },
});
return operation.response.name;
}
/**
* Processes events from subscription by using the Google Cloud PubSub API.
*
* It pulls and acknowledges each event.
*/
function processSubscription() {
const response = UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:pull`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({ maxMessages: 10 })
}
);
const messages = JSON.parse(response.getContentText()).receivedMessages;
for (var messageIndex in messages) {
const message = messages[messageIndex];
const ceType = message.message.attributes["ce-type"];
const dataStr = Utilities.newBlob(Utilities.base64Decode(message.message.data))
.getDataAsString();
if (ceType === "google.workspace.events.subscription.v1.expirationReminder") {
// Renews subscription.
renewSubscription(JSON.parse(dataStr).subscription.name);
} else if (ceType === "google.workspace.chat.message.v1.created") {
// Processes the message text when it's sent in a space.
const chatMessage = JSON.parse(dataStr).message;
if (chatMessage.sender.type !== "BOT") {
console.log("Message was processed.");
}
}
// Acknowledges successful processing to avoid getting it again next time.
ackSubscription(message.ackId);
}
}
/**
* Acknowledges a subscription event by using the Google Cloud PubSub API.
*
* @param {string} ackId the ID of the event acknowledgment to send
*/
function ackSubscription(ackId) {
UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:acknowledge`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({
ackIds: [ackId]
})
}
);
}
/**
* Renews a subscription to Google Workspace Events.
*
* The default time to live option is used.
*
* @param {string} subscriptionId the ID of the subscription to renew
*/
function renewSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.patch({ttl: '0s'}, subscriptionId);
}
/**
* Deletes a subscription to Google Workspace Events.
*
* @param {string} subscriptionId the ID of the subscription to delete
*/
function deleteSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.remove(subscriptionId);
}
গুগল ক্লাউড প্রজেক্ট আপডেট করুন
এপিআই সক্ষম করুন
- Google Cloud কনসোলে Google Workspace Events এবং PubSub সক্রিয় করুন।
- মেনু ☰ > এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা- তে ক্লিক করুন এবং তারপর নিশ্চিত করুন যে উভয়ই সক্রিয় আছে।
সাবস্ক্রিপশন শুরু করুন
ওয়ার্কস্পেসের সমস্ত ইভেন্ট পোস্ট করার জন্য আপনাকে একটি পাব/সাব টপিক তৈরি করে তাতে সাবস্ক্রাইব করতে হবে।
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > পাব/সাব > টপিকস- এ যান।
- বিষয় তৈরি করুন- এ ক্লিক করুন।
- টপিক আইডি
workspace-eventsএ সেট করুন। - ডিফল্ট সাবস্ক্রিপশন যোগ করুন চেকবক্সটি নির্বাচন করুন।
- তৈরি করুন- এ ক্লিক করুন।

গুগল চ্যাট থেকে আপনার নতুন তৈরি করা টপিকে পাব/সাব মেসেজ প্রকাশ করার অ্যাক্সেস দিতে, এই ধাপগুলো অনুসরণ করুন:
- তালিকা থেকে বিষয়টি নির্বাচন করুন।
- অনুমতি ট্যাবটি নির্বাচন করুন।
- নতুন প্রিন্সিপালগুলিতে
chat-api-push@system.gserviceaccount.comযোগ করুন। - ভূমিকার জন্য পাব/সাব প্রকাশক নির্বাচন করুন।
- সংরক্ষণ করুন- এ ক্লিক করুন।

অ্যাপস স্ক্রিপ্ট প্রকল্প আপডেট করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > আইএএম ও অ্যাডমিন > সেটিংস- এ যান।
- প্রজেক্ট আইডিটি কপি করুন।

আপনার স্থানীয় পরিবেশে, এই পদক্ষেপগুলো অনুসরণ করুন:
- আপনার টার্মিনালে বর্তমান ডিরেক্টরি পরিবর্তন করে
issue-management/3-message-monitoringএ যান। এতে আপনার প্রয়োজনীয় সোর্স কোডটি রয়েছে। -
Configuration.jsফাইলেPROJECT_IDনামের স্ট্রিং কনস্ট্যান্টটিতে কপি করা প্রজেক্ট আইডিটি সেট করুন। -
Configuration.jsফাইলেCHAT_CREDENTIALSনামের JSON কনস্ট্যান্টটিকে আপনার পূর্বে ডাউনলোড করা প্রাইভেট কী ফাইলের কন্টেন্ট দিয়ে সেট করুন। -
issue-management/2-app-home/.clasp.jsonফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন। - নিম্নলিখিত কমান্ডটি চালান:
clasp push
চেষ্টা করে দেখুন
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- স্ল্যাশ কমান্ড
/createব্যবহার করে অ্যাপটিতে একটি সরাসরি বার্তা পাঠান। অ্যাপটি একটি ডায়ালগ বক্স খুলবে। - শিরোনামটি
Issue Title 3এ সেট করুন। - বিবরণকে ইস্যু
Description 3এ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।
- নতুন তৈরি করা স্থানটিতে বিষয়টি নিয়ে আলোচনা করে কয়েকটি বার্তা পাঠান।
- স্ল্যাশ কমান্ড
/closeএবংFixedমতো রেজোলিউশন ব্যবহার করে একটি বার্তা পাঠান।
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > পাব/সাব > সাবস্ক্রিপশন- এ যান।
- `workspace-events-sub` সাবস্ক্রিপশনটি নির্বাচন করুন।
- মেসেজ ট্যাবটি নির্বাচন করুন।
- পুল-এ ক্লিক করুন। টেবিলটি নতুন তৈরি করা স্পেসে আপনার পাঠানো বার্তাগুলো প্রদর্শন করবে।

অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- সম্পাদক নির্বাচন করুন।
-
WorkspaceEvent.gsফাইলটি নির্বাচন করুন। - রান সেকশনে
processSubscriptionনির্বাচন করুন। -
Runক্লিক করুন। এক্সিকিউশন লগ থেকে আপনি দেখতে পাবেন যে মেসেজগুলো প্রসেস করা হয়েছে।

গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > পাব/সাব > সাবস্ক্রিপশন- এ যান।
- `workspace-events-sub` সাবস্ক্রিপশনটি নির্বাচন করুন।
- মেসেজ ট্যাবটি নির্বাচন করুন।
- পুল-এ ক্লিক করুন। নতুন তৈরি করা স্পেসে আপনার পাঠানো বার্তাগুলো টেবিলটিতে আর দেখা যাবে না।

- গুগল চ্যাটে ,
/createস্ল্যাশ কমান্ড দিয়ে আপনার তৈরি করা তৃতীয় ইস্যুটির জন্য নির্ধারিত জায়গায়, বিষয়টি নিয়ে আলোচনা করে আরও কয়েকটি মেসেজ পাঠান।
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > পাব/সাব > সাবস্ক্রিপশন- এ যান।
- `workspace-events-sub` সাবস্ক্রিপশনটি নির্বাচন করুন।
- মেসেজ ট্যাবটি নির্বাচন করুন।
- পুল-এ ক্লিক করুন। আপনি নতুন তৈরি করা স্পেসে যা পাঠিয়েছেন, তার সাথে সম্পর্কিত বার্তাগুলো টেবিলে প্রদর্শিত হয় না।
৬. ঐচ্ছিক: অ্যাপ ১: অন্তর্ভুক্তিমূলক সহায়তা যোগ করুন
ধারণা পর্যালোচনা করুন
জেনারেটিভ এআই প্রম্পটিং হলো একটি জেনারেটিভ এআই মডেলকে নির্দিষ্ট ধরনের কাঙ্ক্ষিত আউটপুটের দিকে পরিচালিত করার জন্য নির্দেশনা বা প্রশ্ন তৈরি করার কৌশল। একটি প্রচলিত পদ্ধতি হলো প্রম্পটগুলোতে নিয়ম ও শর্ত যোগ করে উত্তরগুলোকে নিয়ন্ত্রিত করা। এটি আউটপুটকে নিরাপদ, প্রাসঙ্গিক, সামঞ্জস্যপূর্ণ এবং প্রত্যাশার সাথে সঙ্গতিপূর্ণ করতে সাহায্য করে।
পর্যালোচনা প্রবাহ
সাবস্ক্রিপশন প্রক্রিয়া করুন (আপডেট)

সোর্স কোড পর্যালোচনা করুন
অ্যাপস স্ক্রিপ্ট প্রজেক্টটি সম্পাদনা করা প্রয়োজন।
WorkspaceEvent.js
// Edits the function to replace logging by an actual card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
const inclusivityCheck = getInclusivityFeedback(chatMessage.text);
if (inclusivityCheck !== "It's inclusive!") {
createAppMessageUsingChatService({
cardsV2: [{ cardId: "1", card: { header: {
title: "Inclusivity",
subtitle: `The following words are not inclusive: ${inclusivityCheck}`
}}}]
},
chatMessage.space.name);
}
...
}
...
}
...
}
VertexAi.js
/**
* Gets feedback on inclusivity for a text with the Gemini Pro model using
* Vertex AI API.
*
* Returns "It's inclusive!" when it is otherwise a list of word(s) that might not
* be optimal.
*
* @param {string} text the text
* @return {string} the feedback
*/
function getInclusivityFeedback(text) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Are there any words that obviously go against inclusivity "
+ "in this text:"
+ `\n\n----------\n${text}\n----------\n\n`
+ "If there are not, answer \"It's inclusive!\" "
+ "otherwise answer by listing them separated by commas. "
+ "Do not answer with any explanation."
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
অ্যাপস স্ক্রিপ্ট প্রকল্প আপডেট করুন
আপনার স্থানীয় পরিবেশে, এই পদক্ষেপগুলো অনুসরণ করুন:
- আপনার টার্মিনালে বর্তমান ডিরেক্টরি পরিবর্তন করে
issue-management/4-inclusivity-helpএ যান। এতে আপনার প্রয়োজনীয় সোর্স কোডটি রয়েছে। -
issue-management/3-message-monitoring/.clasp.jsonফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন। -
issue-management/3-message-monitoring/Configuration.jsফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন, যাতে এটি বিদ্যমান ফাইলটিকে প্রতিস্থাপন করে। - নিম্নলিখিত কমান্ডটি চালান:
clasp push
চেষ্টা করে দেখুন
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- স্ল্যাশ কমান্ড
/createব্যবহার করে অ্যাপটিতে একটি সরাসরি বার্তা পাঠান। অ্যাপটি একটি ডায়ালগ বক্স খুলবে। - শিরোনামটি
Issue Title 4এ সেট করুন। - বিবরণকে ইস্যু
Description 4এ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।
- নতুন তৈরি করা জায়গায় পাঠান,
It happened to me last week as well।
অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- সম্পাদক নির্বাচন করুন।
-
WorkspaceEvent.gsফাইলটি নির্বাচন করুন। - রান সেকশনে
processSubscriptionনির্বাচন করুন। - রান-এ ক্লিক করুন। এক্সিকিউশন লগ থেকে আপনি দেখতে পাবেন যে মেসেজগুলো প্রসেস করা হয়েছে।
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- লক্ষ্য করুন যে, অ্যাপটি নতুন তৈরি করা স্থানটিতে অন্তর্ভুক্তিমূলক কোনো সাহায্য পাঠায়নি।
- নতুন তৈরি করা স্পেসে এই বার্তাটি পাঠান যে,
I had to add myself from the master to fix it।
অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- সম্পাদক নির্বাচন করুন।
-
WorkspaceEvent.gsফাইলটি নির্বাচন করুন। - রান সেকশনে
processSubscriptionনির্বাচন করুন। - রান-এ ক্লিক করুন। এক্সিকিউশন লগ থেকে আপনি দেখতে পাবেন যে মেসেজগুলো প্রসেস করা হয়েছে। গুগল চ্যাট- এ, অ্যাপটি নতুন তৈরি করা স্পেসটিতে একটি ইনক্লুসিভিটি হেল্প মেসেজ পাঠিয়েছে।

৭. ঐচ্ছিক: অ্যাপ ১: পছন্দসমূহ যোগ করুন
.
ধারণা পর্যালোচনা করুন
অ্যাকসেসরি উইজেট হলো একটি বর্ডারবিহীন উইজেট যা কোনো অ্যাপ থেকে পাঠানো বার্তার নিচে সংযুক্ত থাকে। এটি সাধারণত বার্তার নির্দিষ্ট প্রেক্ষাপটে ব্যবহারকারীকে দ্রুত প্রতিক্রিয়া জানানোর সুযোগ দিতে ব্যবহৃত হয়। প্রযুক্তিগতভাবে, এটি কার্ড বাটনের মূল নীতিগুলোর ওপর ভিত্তি করেই কাজ করে।

পর্যালোচনা প্রবাহ
অন্তর্ভুক্তি সহায়তা অক্ষম করুন

সোর্স কোড পর্যালোচনা করুন
অ্যাপস স্ক্রিপ্ট প্রজেক্টটি সম্পাদনা করা প্রয়োজন।
ChatApp.js
// Edits the function to handle the inclusivity help disablement action for a
// given space.
function onCardClick(event) {
...
if (event.action.actionMethodName === "disableInclusivityHelp") {
disableInclusivityHelp(event.common.parameters.spaceId);
}
}
স্টোরেজ.জেএস
// Edits the function to keep track of the inclusivity help setting.
function saveCreatedIssue(title, description, spaceId, subscriptionId) {
appProperties.setProperty(spaceId, JSON.stringify({
...
inclusivityHelp: true,
...
}));
...
}
/**
* Disables inclusivity help in a space.
*
* @param {string} spaceId the ID of dedicated space of the issue
*/
function disableInclusivityHelp(spaceId) {
var issue = JSON.parse(appProperties.getProperty(spaceId));
issue.inclusivityHelp = false;
appProperties.setProperty(spaceId, JSON.stringify(issue));
}
/**
* Checks whether the app should help with inclusivity in a given space.
*
* @param {string} spaceId the ID of dedicated space of the issue
* @return whether the app should help with inclusivity
*/
function shouldHelpWithInclusivity(spaceId) {
return JSON.parse(appProperties.getProperty(spaceId)).inclusivityHelp;
}
WorkspaceEvent.js
// Edits the function to display the accessory widget to the existing card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
if (... && shouldHelpWithInclusivity(chatMessage.space.name)) {
createAppMessageUsingChatService({
...
accessoryWidgets: [{ buttonList: { buttons: [{
altText: "Disable inclusivity help",
icon: {
iconUrl: "https://upload.wikimedia.org/.../Stop_hand_rugen.png"
},
onClick: { action: {
function: "disableInclusivityHelp",
parameters: [{
key: "spaceId",
value: chatMessage.space.name
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
অ্যাপস স্ক্রিপ্ট প্রকল্প আপডেট করুন
আপনার স্থানীয় পরিবেশে, এই পদক্ষেপগুলো অনুসরণ করুন:
- আপনার টার্মিনালে বর্তমান ডিরেক্টরি পরিবর্তন করে
issue-management/5-disable-helpএ যান। এর মধ্যেই আপনার প্রয়োজনীয় সোর্স কোডটি রয়েছে। -
issue-management/4-inclusivity-help/.clasp.jsonফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন। -
issue-management/4-inclusivity-help/Configuration.jsফাইলটি আপনার বর্তমান ডিরেক্টরিতে কপি করুন, যাতে এটি বিদ্যমান ফাইলটিকে প্রতিস্থাপন করে। - নিম্নলিখিত কমান্ডটি চালান:
clasp push
চেষ্টা করে দেখুন
অক্ষম সাহায্য
- গুগল চ্যাটে ,
/createস্ল্যাশ কমান্ড দিয়ে আপনার তৈরি করা চতুর্থ ইস্যুটির জন্য নির্ধারিত জায়গায়,I had to add myself from the master to fixমেসেজটি পাঠান।
অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- সম্পাদক নির্বাচন করুন।
-
WorkspaceEvent.gsফাইলটি নির্বাচন করুন। - রান সেকশনে
processSubscriptionনির্বাচন করুন। - রান-এ ক্লিক করুন। এক্সিকিউশন লগ থেকে আপনি দেখতে পাবেন যে মেসেজগুলো প্রসেস করা হয়েছে।
গুগল চ্যাটে , এই ধাপগুলো অনুসরণ করুন:
- লক্ষ্য করুন যে, অ্যাপটি একটি অ্যাক্সেসরি উইজেটসহ সমস্যাটির জন্য নির্ধারিত স্থানে অন্তর্ভুক্তিমূলক সহায়তার একটি বার্তা পাঠিয়েছে।
- অন্তর্ভুক্তিমূলক সহায়তা নিষ্ক্রিয় করতে অ্যাকসেসরি উইজেটটিতে ক্লিক করুন।

চেক নিষ্ক্রিয়করণ
- গুগল চ্যাটে ,
/createস্ল্যাশ কমান্ড দিয়ে আপনার তৈরি করা চতুর্থ ইস্যুটির জন্য নির্ধারিত জায়গায়,I had to add myself from the master to fixমেসেজটি পাঠান।
অ্যাপস স্ক্রিপ্ট কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার প্রকল্পটি নির্বাচন করুন।
- সম্পাদক নির্বাচন করুন।
-
WorkspaceEvent.gsফাইলটি নির্বাচন করুন। - রান সেকশনে
processSubscriptionনির্বাচন করুন। - রান-এ ক্লিক করুন। এক্সিকিউশন লগ থেকে আপনি দেখতে পাবেন যে মেসেজগুলো প্রসেস করা হয়েছে। গুগল চ্যাট- এ, অ্যাপটি সমস্যাটির জন্য নির্ধারিত স্থানে ইনক্লুসিভিটি সংক্রান্ত সাহায্যের কোনো মেসেজ পাঠায়নি, কারণ সেটি নিষ্ক্রিয় করা ছিল।

৮. অ্যাপ ২: তৈরি করুন
ধারণা পর্যালোচনা করুন
জেন এআই গ্রাউন্ডিং
এর মূল উদ্দেশ্য হলো এআই মডেলগুলোকে যাচাইযোগ্য জ্ঞানের উৎসের সাথে সংযুক্ত করার মাধ্যমে সেগুলোকে আরও তথ্যভিত্তিক ও নির্ভরযোগ্য করে তোলা। এই কৌশলটি এআই-কে মনগড়া তথ্য তৈরি করা থেকে বিরত রাখতে সাহায্য করে এবং এর প্রতিক্রিয়াগুলোকে প্রাসঙ্গিকভাবে প্রাসঙ্গিক ও কম পক্ষপাতদুষ্ট করতে সহায়ক হতে পারে।
স্বাভাবিক ভাষা
দৈনন্দিন যোগাযোগের জন্য মানুষের ব্যবহৃত বা লিখিত যেকোনো ভাষা, যা কৃত্রিম বা কম্পিউটার-ভিত্তিক ভাষার বিপরীত।
ক্লাউড স্টোরেজ
ক্লাউড স্টোরেজ বিশ্বব্যাপী যেকোনো সময়ে যেকোনো পরিমাণ ডেটা সংরক্ষণ ও পুনরুদ্ধারের সুযোগ দেয়। এটি বিভিন্ন ক্ষেত্রে ব্যবহার করা যেতে পারে, যেমন—ওয়েবসাইটের বিষয়বস্তু পরিবেশন, আর্কাইভ ও দুর্যোগ পুনরুদ্ধারের জন্য ডেটা সংরক্ষণ, অথবা সরাসরি ডাউনলোডের মাধ্যমে ব্যবহারকারীদের কাছে বড় আকারের ডেটা অবজেক্ট বিতরণ।
ডায়ালগফ্লো সিএক্স ডেটা স্টোর
Dialogflow CX ডেটা স্টোরের সাথে ইন্টিগ্রেট করে, যা হলো ওয়েবসাইট এবং ডকুমেন্টের একটি সংগ্রহ। ডেটা স্টোর এজেন্টরা নির্দিষ্ট ডেটা থেকে ব্যবহারকারীর প্রশ্নের উত্তর খুঁজে বের করার জন্য এটি ব্যবহার করে। একটি নির্দিষ্ট প্রশ্নের জন্য, ডেটা স্টোর এজেন্ট প্রদত্ত উৎস কন্টেন্ট থেকে উত্তর অনুসন্ধান করে এবং প্রাপ্ত ফলাফলগুলোকে একটি সুসংগত উত্তরে সংক্ষিপ্ত করে। এটি ব্যবহারকারীকে আরও জানার জন্য উত্তরের উৎসগুলোর সহায়ক লিঙ্কও প্রদান করে।
স্থাপত্য পর্যালোচনা

এই গুগল চ্যাট অ্যাপটি Dialogflow CX দিয়ে তৈরি এবং এটি নিম্নোক্তভাবে কাজ করে:
- একজন ব্যবহারকারী সরাসরি বার্তা বা স্পেসের মাধ্যমে অ্যাপে একটি বার্তা পাঠান।
- অ্যাপটি, যা একটি Dialogflow CX এজেন্ট এবং একটি Google Cloud প্রজেক্টের সাথে যুক্ত, মেসেজটি প্রসেস করে।
- অ্যাপটি ক্লাউড স্টোরেজে অবস্থিত একটি ডেটা স্টোরের সাথে সমন্বিত হয়।
- অ্যাপটি সরাসরি বার্তায় অথবা মূল স্পেসে একযোগে প্রতিক্রিয়া পাঠায়।
পর্যালোচনা প্রবাহ
প্রশ্নের উত্তর দিন
সোর্স কোড পর্যালোচনা করুন
আপনার একমাত্র যে উৎসটির প্রয়োজন, তা কোড নয়, বরং গ্রাউন্ডিংয়ের জন্য ব্যবহৃত ডেটা।
google-chat-overview.pdf
এতে গুগল চ্যাট অ্যাপগুলোর অসংগঠিত তথ্য এবং গুগল ওয়ার্কস্পেস ডেভেলপারস ওয়েবসাইটের একটি পৃষ্ঠার মুদ্রিত সংস্করণ রয়েছে।

গুগল ক্লাউড প্রজেক্ট আপডেট করুন
গুগল ক্লাউড কনসোলে, এই ধাপগুলো অনুসরণ করুন:
- Dialogflow এবং Cloud Storage API-গুলো সক্রিয় করুন।
- Vertex AI Agent Builder API সক্রিয় করুন।
- মেনু ☰ > এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা- তে ক্লিক করুন এবং তারপর নিশ্চিত করুন যে সমস্ত এপিআই সক্রিয় আছে।
.
Dialogflow CX ডেটা স্টোর এজেন্ট তৈরি করুন
জ্ঞান ডেটা শুরু করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনুতে যেতে ক্লিক করুন ☰ > ক্লাউড স্টোরেজ > বাকেটস ।

- তৈরি করুন- এ ক্লিক করুন।
- নাম
gchat-knowledgeএ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।

- gchat-knowledge বাকেটটি নির্বাচন করুন।
- ফাইল আপলোড করতে ক্লিক করুন।
- আপনার স্থানীয় পরিবেশ থেকে google-chat-overview.pdf ফাইলটি ডাউনলোড করে নির্বাচন করুন।

অ্যাপ তৈরি করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > এজেন্ট বিল্ডার > অ্যাপস-এ ক্লিক করুন।
- নতুন অ্যাপে ক্লিক করুন।
- চ্যাটের ধরণ নির্বাচন করুন।

-
Company nameআপনার কোম্পানির নামে সেট করুন। -
Agent nameknowledgeহিসেবে সেট করুন। - চালিয়ে যান-এ ক্লিক করুন।

- নতুন ডেটা স্টোর তৈরি করুন -এ ক্লিক করুন।
- ডেটা উৎস হিসেবে ক্লাউড স্টোরেজ নির্বাচন করুন।

- ফাইল নির্বাচন করুন।
- ব্রাউজ-এ ক্লিক করুন।
-
google-chat-overview.pdfফাইলটি নির্বাচন করুন। - চালিয়ে যান-এ ক্লিক করুন।
- ডেটা স্টোরের নাম
gchat-knowledge-dsএ সেট করুন। - তৈরি করুন- এ ক্লিক করুন।

- টেবিল থেকে gchat-knowledge-ds ডেটা স্টোরটি নির্বাচন করুন।
- তৈরি করুন- এ ক্লিক করুন।

- কয়েক মিনিট পর, মেনু ☰ > এজেন্ট বিল্ডার > অ্যাপস-এ ক্লিক করুন এবং লক্ষ্য করুন যে আপনি অ্যাপটি দেখতে পাচ্ছেন।

- মেনু ☰ > এজেন্ট বিল্ডার > ডেটা স্টোর-এ ক্লিক করুন।
- gchat-knowledge-ds ডেটা স্টোরে ক্লিক করুন। ডকুমেন্টের সংখ্যা
1, যা নির্দেশ করে যে এটি প্রস্তুত।

অ্যাপটি সম্পূর্ণ এবং পরীক্ষা করুন
Dialogflow CX কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার গুগল ক্লাউড প্রজেক্টটি নির্বাচন করুন।
- নলেজ এজেন্ট নির্বাচন করুন।

- এজেন্ট সেটিংস > জেনারেটিভ এআই > জেনারেটিভ এজেন্ট নির্বাচন করুন।
- মডেলটি টেক্সট বাইসন থেকে জেমিনি প্রো -তে পরিবর্তন করুন।
- সংরক্ষণ করুন- এ ক্লিক করুন।

- টেস্ট এজেন্ট-এ ক্লিক করুন।
-
What is Google Chat?" পাঠান। এজেন্ট অর্থপূর্ণ কিছু দিয়ে উত্তর দেয়।

গুগল চ্যাট অ্যাপ একীভূত করুন
Dialogflow CX কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার গুগল ক্লাউড প্রজেক্টটি নির্বাচন করুন।
- নলেজ এজেন্টের সারিতে ক্লিক করুন
নামটি অনুলিপি করুন ।

গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- গুগল চ্যাট এপিআই কনফিগারেশনে যান।
- কানেকশন সেটিংস-এর অধীনে, ডায়ালগফ্লো নির্বাচন করুন।
- Dialogflow সেটিংস-এর অধীনে, Dialogflow CX নির্বাচন করুন।
- এজেন্ট বা এনভায়রনমেন্ট রিসোর্সের নাম হিসেবে আপনার কপি করা এজেন্টের নামটি সেট করুন।
- দুটি স্ল্যাশ কমান্ড মুছে ফেলুন।

- গুগল চ্যাটে , গুগল চ্যাট অ্যাপে একটি সরাসরি মেসেজে
What is Google Chat?পাঠান। এজেন্ট অর্থপূর্ণ কিছু দিয়ে উত্তর দেয়।

৯. ঐচ্ছিক: অ্যাপ ২: উৎস যোগ করুন
ধারণা পর্যালোচনা করুন
Dialogflow CX ওয়েবহুক
একটি সার্ভিস যা বিজনেস লজিক ধারণ করে বা অন্যান্য সার্ভিসকে কল করে। একটি Dialogflow CX সেশনের সময়, ওয়েবহুকগুলো ডায়নামিক প্রতিক্রিয়া তৈরি করতে, সংগৃহীত ডেটা যাচাই করতে, বা ব্যাকএন্ডে অ্যাকশন ট্রিগার করতে ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং দ্বারা নিষ্কাশিত ডেটার উপর নির্ভর করতে পারে।
ক্লাউড ফাংশন
সার্ভারবিহীন ব্যাকএন্ড তৈরি, রিয়েল-টাইম ডেটা প্রসেসিং এবং ইন্টেলিজেন্ট অ্যাপ তৈরির জন্য ক্লাউড ফাংশনগুলো চমৎকার। এখানে কোনো সার্ভার প্রোভিশন, ম্যানেজ, প্যাচ বা আপডেট করার প্রয়োজন হয় না। এগুলো স্বয়ংক্রিয়ভাবে স্কেল করে এবং অত্যন্ত সহজলভ্য ও ফল্ট-টলারেন্ট।
পর্যালোচনা প্রবাহ
প্রশ্নের উত্তর দিন (আপডেট)

সোর্স কোড পর্যালোচনা করুন
আপনার শুধু গুগল চ্যাট মেসেজের সাথে এজেন্টের প্রতিক্রিয়া মানিয়ে নেওয়ার ফাংশনটির সোর্স কোড প্রয়োজন। এটি একটি ওয়েবহুক হিসেবে ব্যবহৃত হয়।
প্যাকেজ.json
// The function relies on the Cloud Functions framework to run.
{
"name": "agent-response-adapter",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It takes a Dialogflow CX agent response as input and returns a
* valid Google Chat card message with both the text and source links
*/
functions.http('agent-response-adapter', (request, response) => {
// Creates Google Chat buttons based on the data store agent response
// grounding details.
var linkTitles = [];
var linkButtons = [];
const grounding = request.body.messages[1].payload.richContent[0][0];
if (grounding.type === "match_citations") {
// Supports citation match type.
grounding.citations.forEach((citation) => {
// Avoid duplications.
if (linkTitles.indexOf(citation.title) < 0) {
linkButtons.push({
text: citation.title,
onClick: { openLink: {
url: citation.actionLink
}}
});
linkTitles.push(citation.title);
}
});
} else if (grounding.type === "info") {
// Supports info type.
if (linkTitles.indexOf(grounding.title) < 0) {
linkButtons.push({
text: grounding.title,
onClick: { openLink: {
url: grounding.actionLink
}}
});
linkTitles.push(grounding.title);
}
}
// Sends the Dialogflow CX fulfillment response to replace the agent response
// with the Chat message with text and source buttons.
response.send({ fulfillment_response: {
merge_behavior: "REPLACE",
messages: [{ payload: {
// Reuses the original data store agent response text.
text: request.body.messages[0].text.text[0],
cardsV2: [{
cardId: "sourcesCard",
card: { sections: [{
header: "Sources",
widgets: [{ buttonList: {
buttons: linkButtons
}}]
}]}
}]
}}]
}});
});
গুগল ক্লাউড প্রজেক্ট আপডেট করুন
গুগল ক্লাউড কনসোলে, এই ধাপগুলো অনুসরণ করুন:
- ক্লাউড বিল্ড, ক্লাউড ফাংশন, ক্লাউড লগিং, আর্টিফ্যাক্ট রেজিস্ট্রি এবং ক্লাউড রান এপিআইগুলো সক্রিয় করুন।
- মেনু ☰ > এপিআই ও পরিষেবা > সক্রিয় এপিআই ও পরিষেবা-তে ক্লিক করুন এবং তারপর এপিআইগুলো সক্রিয় আছে কিনা তা নিশ্চিত করুন।
Dialogflow CX ডেটা স্টোর এজেন্ট আপডেট করুন
আপনাকে একটি ক্লাউড ফাংশন ডেপ্লয় করতে হবে এবং ডায়ালগফ্লো সিএক্স ওয়েবহুক আপডেট করতে হবে, যাতে সম্ভব হলে একাধিক উৎস থেকে এটিকে ট্রিগার করা যায়।
একাধিক উৎস ফেরত দিন
ডিফল্টরূপে, একটি নতুন ডেটা স্টোর এজেন্ট সর্বোচ্চ একটি উৎসই ফেরত দেয়, কিন্তু আপনি চাইলে আরও উৎসের জন্য এটি পরিবর্তন করতে পারেন।
Dialogflow CX কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার গুগল ক্লাউড প্রজেক্টটি নির্বাচন করুন।
- নলেজ এজেন্ট নির্বাচন করুন।
- প্রারম্ভিক পৃষ্ঠা নির্বাচন করুন।
- ডেটা স্টোর সম্পাদনা নির্বাচন করুন।
- এজেন্ট প্রতিক্রিয়া বিভাগের অধীনে, ডেটা স্টোর প্রতিক্রিয়া বিকল্পগুলি
5-এ সেট করুন। - সংরক্ষণ করুন- এ ক্লিক করুন।

ক্লাউড ফাংশন শুরু করুন
গুগল ক্লাউড কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- মেনু ☰ > ক্লাউড ফাংশন-এ ক্লিক করুন।
- ফাংশন তৈরি করুন -এ ক্লিক করুন।
- বেসিকস-এর অধীনে, নাম হিসেবে
function-1সেট করুন। - Authentication-এর অধীনে, Allow unauthenticated invocations রেডিও বাটনটি নির্বাচন করুন।
- রানটাইম, বিল্ড, কানেকশন এবং সিকিউরিটি সেটিংস- এর অধীনে, ইনস্ট্যান্সের সর্বোচ্চ সংখ্যা
3এ সেট করুন। - পরবর্তী ধাপে যান।

- এন্ট্রি পয়েন্ট
agent-response-adapterএ সেট করুন। - ডিফল্ট কন্টেন্টটি package.json এবং index.js ফাইল দুটি দিয়ে প্রতিস্থাপন করুন।
- ডিপ্লয়-এ ক্লিক করুন।

- ফাংশনটি ডেপ্লয় হওয়ার জন্য কয়েক মিনিট অপেক্ষা করার সময় URL-টি কপি করে নিন।

ওয়েবহুক শুরু করুন
নতুনভাবে ডেপ্লয় করা ফাংশনটি ট্রিগার করার জন্য আপনাকে Dialogflow CX এজেন্টকে একটি ওয়েবহুক ব্যবহার করতে কনফিগার করতে হবে।
Dialogflow CX কনসোলে , এই ধাপগুলো অনুসরণ করুন:
- আপনার গুগল ক্লাউড প্রজেক্টটি নির্বাচন করুন।
- নলেজ এজেন্ট নির্বাচন করুন।
- ম্যানেজ > ওয়েবহুকস > ক্রিয়েট নির্বাচন করুন।
- ডিসপ্লে নাম হিসেবে
Google Chat Response Adapterসেট করুন। - পূর্বে কপি করা URL-টিতে ওয়েবহুক URL সেট করুন।
- সংরক্ষণ করুন- এ ক্লিক করুন।

- বিল্ড-এ ক্লিক করুন।
- প্রারম্ভিক পৃষ্ঠা নির্বাচন করুন।
- ডেটা স্টোর সম্পাদনা নির্বাচন করুন।
- Under Webhook settings , click the Enable webhook toggle.
- Select Google Chat Response Adapter for Webhook .
- Set tag to
arbitrary_tag. - সংরক্ষণ করুন- এ ক্লিক করুন।

Test app
- In Google Chat , send
What is Google Chat?in a direct message to the Google Chat app. The agent responds with something meaningful and a card with sources, if any.

10. App 3: Build
Review concepts
Conversational interactions
They are the back-and-forth exchanges of information or ideas between two or more people through natural language. This contrasts to technical interfaces that often rely on stateless, highly structured, and intolerant exchanges.
OpenAPI Specification
It provides a consistent means to carry information through each stage of the API lifecycle. It is a specification language for HTTP APIs that defines structure and syntax in a way that is not wedded to the programming language the API is created in. API specifications are typically written in YAML or JSON, allowing for easy sharing and consumption of the specification.
Dialogflow CX agent
The basic building block of agent apps . An agent app typically has many agents , where each agent is defined to handle specific tasks. The agent data is provided to the LLM, so it has the information it needs to answer questions and execute tasks. Each agent can provide information, send queries to external services, or defer conversation handling to a Dialogflow CX flow or another agent to handle sub-tasks.
Dialogflow CX tool
Tools are used to connect agent apps to external systems. These systems can augment the knowledge of agent apps and empower them to execute complex tasks efficiently.
Review architecture

This Google Chat app is built with Dialogflow CX and works as follows:
- A user sends a message to the app, either in a direct message or in a space.
- The app, which is a Dialogflow CX agent and is associated with a Google Cloud project, processes the message.
- The app integrates with an agent.
- The app sends a synchronous response, either in a direct message or in the original space.
Review flows
Collect review

Review source code
The only source code that you need is the function to mock the backend service that the agent uses as a tool.
প্যাকেজ.json
// The function relies on the Cloud Functions framework to run.
{
"name": "feedback-app-backend",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It always returns OK in plain text.
*/
functions.http('feedback-app-backend', (request, response) => {
response.send('OK');
});
service-openapi.yaml
// Defines the backend service structure and how to request it.
openapi: 3.1.0
info:
title: Review Store
license:
name: Apache 2.0
identifier: Apache-2.0
version: 0.0.1
servers:
- url: https://us-central1-project-0.cloudfunctions.net
paths:
/store-review:
post:
operationId: storeReview
summary: Store a new review
requestBody:
content:
application/json:
schema:
type: object
properties:
stars:
type: integer
format: int64
responses:
'200':
description: success
content:
application/json:
schema:
type: string
Initiate backend service mock
You deploy a Cloud Function to simulate a backend service that the Dialogflow CX agent app needs to integrate and call as a tool.
In the Google Cloud console , follow these steps:
- Click Menu ☰ > Cloud Functions .
- Click Create function .
- Under Basics , set name to
function-2. - Under Authentication , select the Allow unauthenticated invocations radio button.
- Under Runtime, build, connections and security settings , set Maximum number of instances to
3. - পরবর্তী ধাপে যান।

- Set Entry point to
feedback-app-backend. - Replace the default content with the files package.json and index.js .
- ডিপ্লয়-এ ক্লিক করুন।

- Copy the URL while you wait a couple minutes for the function to deploy.
Create Dialogflow CX agent app
অ্যাপ তৈরি করুন
In the Google Cloud console , follow these steps:
- Click Menu ☰ > Agent builder > Apps .
- Click New app .
- Select Agent .
- Set Display name to
Feedback App. - তৈরি করুন- এ ক্লিক করুন।

Initiate tool
In the Google Cloud console , follow these steps:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Click Tools > + Create .
- Set Name to
review. - Select OpenAPI .
- Set description to the following value:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Download and replace
$URLin the file service-openapi.yaml with the URL that you copied previously. - Set
YAML Schemato the edited content of theservice-openapi.yamlfile. - সংরক্ষণ করুন- এ ক্লিক করুন।

Initiate agent
In the Google Cloud console , follow these steps:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Select Agents > Default Generative Agent .
- Set Agent name to
Feedback collector. - Set
goalto the following value:
You are an agent that collects reviews from Google Chat app developers. A review may be between 0 and 5 stars. The more stars, the more positive the review.
- Set instructions to the following value:
If the developer didn't provide the number of stars, ask for the number of stars.
After the developer provides the number of stars of the review, confirm the number with the developer and use ${TOOL: review} to store the review with the number of stars.
If ${TOOL: review} fails, apologize and ask to try again later. Otherwise, thank the developer for the review.
- সংরক্ষণ করুন- এ ক্লিক করুন।

Test app
In the Google Cloud console , follow these steps:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Go to Preview agent .
- Under Agent , select Feedback collector .
- Under Select generative model , select gemini-pro .
- Send the message
Hello!to start.

In the Google Cloud console , follow these steps:
- Click Menu ☰ > Cloud Functions .
- Select function-2 > Logs . Some logs show Google-Dialogflow as caller.

Integrate Google Chat app
In the Dialogflow CX console , follow these steps:
- Select your Google Cloud project.
- Click the action menu of the
Feedback Appagent. - Click Copy name .
In the Google Cloud console , follow these steps:
- Go to the Google Chat API configuration.
- Set Agent or Environment resource name to the agent name that you copied previously.

- In Google Chat , send
Hello!in a direct message to the Google Chat app to start. The agent responds similarly to your test from the Dialogflow CX console.

১১. পরিষ্কার করুন
Delete Google Cloud project
To avoid incurring charges to your Google Cloud Account for the resources used in this codelab, we recommend that you delete the Google Cloud project.
In the Google Cloud console , follow these steps:
- Click Menu ☰ > IAM & Admin > Settings .
- Click Shut down .
- Enter the project ID.
- Click Shut down anyway .

Delete Apps Script project
We recommend that you delete your Apps Script project, too.
In the Apps Script console , follow these steps:
- আপনার প্রকল্পটি নির্বাচন করুন।
- Click the action menu.
- Click Remove .

১২. অভিনন্দন
Congratulations! You built Google Chat apps with Gemini!
এরপর কী?
We only showcased simple use cases in this codelab, but there are plenty of expansion areas that you might want to consider in your Google Chat apps, such as the following:
- Integrate with other Generative AI models, including customs.
- Support other types of media, such as audio, image, and video.
- Use multimodality.
- Rely on longer context windows and feedback loops.
- Publish production-ready Google Chat apps on the marketplace. There are plenty of resources available for developers such as YouTube videos, documentation websites, code samples, and tutorials.
- Enable Google Chat for your organization. The import mode feature makes it easier to get started.
আরও জানুন
- Developers documentation website for Google Chat
- Google Chat and Dialogflow CX integration
- GitHub repository for all Google Chat samples
- Google Chat import mode
- Developers documentation website for Apps Script
- Google Workspace Developers YouTube channel
- Google Cloud Developer Center
- জেনারেটিভ এআই মডেল
- Generative AI Custom Models
- Generative AI long context windows
- Generative AI feedback loop


