1- قبل البدء
ما هي تطبيقات Google Chat التي تتضمّن Gemini؟
تُجري تطبيقات Google Chat مع Gemini ما يلي:
- ادمج خدماتك ومواردك في Google Chat، ما يتيح للمستخدمين الحصول على المعلومات واتّخاذ الإجراءات اللازمة بدون مغادرة المحادثة.
- يمكنك الدمج مع نموذج الذكاء الاصطناعي التوليدي Gemini، للتمكّن من إنشاء بيانات مثل النصوص أو الصور أو البحث فيها في أوقات محدّدة من أجل تبسيط سير العمل.
ما هي أهمية دمج تطبيقات Google Chat مع Gemini؟
تندرج حالات الاستخدام النموذجية لنماذج الذكاء الاصطناعي التوليدي، مثل Gemini في الفئات التالية:
- إنشاء المحتوى وتحسينه: أنشِئ نسخة تسويقية، أو أنشِئ مشاركات على وسائل التواصل الاجتماعي، أو أنشئ صورًا واقعية، أو ألِّف موسيقى، أو ساعِد في إنشاء محتوى الفيديو.
- البحث عن البيانات: يمكنك استخراج الإحصاءات الرئيسية من قاعدة معارف غير منظّمة، أو تلخيص النصوص الطويلة، أو تصنيف المحتوى، أو ترجمة اللغات مع تحسين الدقة والسرعة.
- المحادثة: المشاركة في محادثات طبيعية وغنية بالمعلومات وإبداعية.
إن القدرة على دمج هذه الإمكانات مباشرةً في واجهة Google Chat المألوفة تمثل فرصة كبيرة لأي شخص يريد تحسين تجربة المستخدمين وإنتاجيتهم.
المتطلبات الأساسية
- الإلمام بأساسيات برمجة التطبيقات وGoogle Cloud وNode.js
- معرفة أساسية بمفاهيم Google Chat، بما في ذلك معالِجات الأحداث والأوامر التي تبدأ بشرطة مائلة ومربّعات الحوار والبطاقات والرسائل ومصادقة التطبيقات وواجهات برمجة التطبيقات
ما تنشئه
في هذا الدرس التطبيقي حول الترميز، يمكنك إنشاء ثلاثة تطبيقات Google Chat باستخدام Gemini لتغطية حالات الاستخدام الثلاث التي تم تقديمها في القسم السابق.
تطبيق إدارة المشاكل (إنشاء المحتوى وتحسينه)
يقوم هذا التطبيق بما يلي:
- يتولّى إدارة المشاكل بدءًا من الإنشاء وحتى الإغلاق من خلال التفاعلات الأساسية والصفحة الرئيسية للتطبيق ومصادقة التطبيق.
- تراقب الرسائل وتقدّم مساعدة شاملة من خلال التطبيقات المصغّرة للأحداث والأجهزة الملحقة.
يمكنك استخدام Gemini لإجراء ما يلي:
- إنشاء تقارير المشاكل استنادًا إلى سجلّ الرسائل وتفاصيل المشكلة
- يمكنك تصنيف الكلمات غير الشاملة في الرسائل التي تتضمّن طلبات مرتبطة ببوابات.
التكنولوجيات الرئيسية المستخدَمة هي Vertex AI وGemini و"برمجة تطبيقات Google" وواجهات برمجة تطبيقات Google Workspace (المشرف وChat و"مستندات Google" والأحداث).
تطبيق المعرفة (البحث عن البيانات)
يعتمد هذا التطبيق على Gemini لفهم الأسئلة باللغة الطبيعية والإجابة عنها وعرض مراجع المصدر من البيانات غير المهيكلة.
التكنولوجيات الرئيسية المستخدَمة هي وكيل مخزن بيانات Dialogflow CX وزر Dialogflow CX للردّ التلقائي على الويب ووظائف Google Cloud وGemini.
تطبيق الملاحظات (محادثة)
يعتمد هذا التطبيق على Gemini لجمع المراجعات وتخزينها باستخدام محادثات بلغة طبيعية.
التكنولوجيات الرئيسية المستخدمة هي وكيل Dialogflow CX وأداة Dialogflow CX وOpenAPI وGoogle Cloud Functions وGemini.
المعلومات التي تكتسبها
- كيفية دمج تطبيقات Google Chat مع Gemini من خلال Vertex AI
- طريقة دمج تطبيقات Google Chat مع وكلاء Dialogflow CX.
- كيفية استخدام أحدث ميزات Google Chat: الصفحة الرئيسية للتطبيق، وأحداث Google Chat، والتطبيقات المصغّرة للملحقات.
المتطلبات
- إكمال عملية البدء السريع إنشاء تطبيق Google Chat باستخدام "برمجة تطبيقات Google" يعتمد هذا الدرس التطبيقي حول الترميز على مشروع Google Cloud وبرمجة التطبيقات الناتج عن ذلك.
2. الإعداد
إعداد الموارد
في هذا القسم، يمكنك الوصول إلى الموارد التالية وضبطها من متصفّح الويب المفضّل لديك.
مشروع "برمجة تطبيقات Google"
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- انقر على الإعدادات ثم فعِّل واجهة برمجة التطبيقات لبرمجة تطبيقات Google.
- اختَر مشروعك.
- انقر على إعدادات المشروع.
- ضَع علامة في مربّع الاختيار عرض ملف البيان "
appsscript.json
" في المحرِّر. - أعِد تسمية المشروع إلى "
Chat Apps Gemini
".
مشروع Google Cloud
في Google Cloud Console، اتّبِع الخطوات التالية:
- اختَر مشروعك.
- انقر على القائمة مؤهّلة > واجهات برمجة التطبيقات والخدمات > شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth > تعديل التطبيق، ثم اضبط اسم التطبيق على
Chat Apps Gemini
.
- انتقِل إلى إعدادات واجهة Google Chat API، ثم اضبط اسم التطبيق والوصف على
Chat Apps Gemini
.
Google Chat
في Google Chat، اتّبِع الخطوات التالية:
- إذا لزم الأمر، ابدأ محادثة باستخدام تطبيق Google Chat.
- أرسِل رسالة، مثل
Hello
، للتأكّد من أنها تعمل.
تنزيل رمز المصدر والموارد على الجهاز
- يمكنك تنزيل مستودع جيت هب هذا.
- في بيئة التطوير المفضّلة لديك، افتح دليل
apps-script/chat-apps-gemini
ثم انتقِل إلى الدليل نفسه في الوحدة الطرفية.
تثبيت clasp
وإعداده
نستخدم clasp
لتعديل إصدارات رمز المصدر وإرسالها من البيئة المحلية إلى مشروع "برمجة تطبيقات Google".
- في بيئتك المحلية، ثبِّت أحدث إصدارات
node
وnpm
وclasp
.
npm install -g @google/clasp
- تسجيل الدخول باستخدام حسابك:
clasp login
في حال نجاح هذا الإجراء، ستظهر لك شاشة تأكيد أساسية في متصفّح الويب ويتم تعديل ملف .clasprc.json
الذي يتضمّن بيانات اعتماد العميل. يمكنك العثور على مكانه في المحطة الطرفية.
3- التطبيق 1: إنشاء
مراجعة المفاهيم
Vertex AI
تقدِّم Vertex AI كل ما تحتاج إليه لبناء الذكاء الاصطناعي التوليدي واستخدامه، بما في ذلك حلول الذكاء الاصطناعي وأداة إنشاء الوكلاء وأكثر من 130 نموذجًا أساسيًا ومنصة موحَّدة للذكاء الاصطناعي (AI).
Gemini
Gemini هي نموذج لغوي كبير متعدد الوسائط تقدّمه Google ويمكن الوصول إليه من خلال Vertex AI. فهو يساعد الأشخاص على إطلاق العنان لإمكاناتهم البشرية حتى يتمكّنوا من توسيع خيالهم وفضولهم وتعزيز إنتاجيتهم.
خدمة Chat المتقدّمة
تتيح لك خدمة المحادثة المتقدّمة استخدام Google Chat API في "برمجة التطبيقات". يسمح هذا الإجراء للنصوص البرمجية بالعثور على مساحات Chat وإنشاؤها وتعديلها، وإضافة أعضاء إليها أو إزالتهم منها، وقراءة الرسائل أو نشرها باستخدام النصوص والبطاقات والمرفقات والتفاعلات.
بنية المراجعة
تم تصميم تطبيق Google Chat هذا باستخدام لغة "برمجة تطبيقات Google". تعمل هذه الميزة على النحو التالي:
- يرسل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
- يعالج التطبيق الرسالة التي يتم تنفيذها في مشروع "برمجة تطبيقات Google" والمرتبط بمشروع على Google Cloud.
- يتكامل التطبيق مع "مستندات Google" وGoogle Chat API.
- يستخدم التطبيق خدمة الخصائص للاحتفاظ بالبيانات في مواقع النص البرمجي.
- يرسل التطبيق استجابة متزامنة، إما في رسالة مباشرة أو في المساحة الأصلية.
خطوات المراجعة
إنشاء مشكلة
تحديد المشكلة وحلّها من المساحة المخصّصة
إغلاق المشكلة من المساحة المخصّصة
مراجعة رمز المصدر
يحتوي مشروع "برمجة تطبيقات Google" على النصوص البرمجية التالية:
Configuration
: مستمر للتعديل استنادًا إلى البيئة.ChatApp
: لمعالجة أحداث التفاعل في Google Chat، بما في ذلك الرسائل والنقرات على البطاقات والأوامر التي تبدأ بشرطة مائلة ومربّعات الحوار.Storage
: وظائف الأدوات المساعدة التي تعتمد على "خدمات المواقع".ChatAppAuth
: وظائف الأدوات التي تعتمد على مصادقة تطبيقات Google ChatDocs
: وظائف الأدوات التي تعتمد على "مستندات Google"VertexAi
: وظائف الأدوات التي تعتمد على Vertex AI
وإليك الأجزاء التي يتم استخدامها بفاعلية عند إنشاء مستندات التقارير باستخدام سجلات Gemini ومساحات المحادثات:
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 Cloud Console، فعِّل واجهات برمجة التطبيقات لمستندات Google وحزمة تطوير البرامج (SDK) لوحدة تحكُّم المشرف في Google وVertex AI:
- انقر على القائمة مؤهّلة > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات التي تم تفعيلها ثم تأكَّد من أنّ واجهات برمجة التطبيقات مُفعَّلة.
بدء حساب الخدمة
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة > + إنشاء حساب خدمة.
- اضبط اسم حساب الخدمة على
chat-app
. - اضبط وصف حساب الخدمة على
Chat app auth
. - انقر على إنشاء ومتابعة.
- انقر على تم. ستتم إعادة توجيهك إلى صفحة حسابات الخدمة ويمكنك الاطّلاع على حساب الخدمة الذي أنشأته.
- اختَر حساب الخدمة الذي تم إنشاؤه حديثًا.
- اختَر علامة التبويب المفاتيح.
- انقر على إضافة مفتاح.
- انقر على إنشاء مفتاح جديد.
- اختَر JSON.
- انقر على إنشاء.
يتم إغلاق مربّع الحوار ويتم تلقائيًا تنزيل زوج المفتاح العام/الخاص الذي تم إنشاؤه حديثًا إلى بيئتك المحلية كملف JSON. سيتم استخدام محتواها لاحقًا عند تعديل رمز المصدر لمشروع برمجة التطبيقات.
تعديل إعدادات واجهة Google Chat API
في Google Cloud Console، اتّبِع الخطوات التالية:
- أضِف أمرًا بشرطة مائلة.
- اضبط الاسم على
/create
. - اضبط معرِّف الطلب على
1
. - اضبط الوصف على
Create a new issue
. - ضَع علامة في مربّع الاختيار فتح مربّع حوار.
- أضِف أمرًا آخر بشرطة مائلة.
- اضبط الاسم على
/close
. - اضبط معرِّف الطلب على
2
. - اضبط الوصف على
Close an issue
. - انقر على حفظ.
تعديل مشروع "برمجة تطبيقات Google"
- غيِّر الدليل الحالي في الوحدة الطرفية المحلية إلى
issue-management/1-baseline
. يحتوي على رمز المصدر. قبل إرسال رمز المصدر إلى مشروع "برمجة تطبيقات Google"، عليك ضبط بعض الإعدادات.
إعداد رمز المصدر
- اضبط ثابت JSON المسمى
CHAT_CREDENTIALS
في ملفConfiguration.js
على محتوى ملف المفتاح الخاص الذي سبق لك تنزيله.
- في Google Cloud Console، انقر على القائمة اني > إدارة الهوية وإمكانية الوصول والمشرف > الإعدادات.
- انسخ رقم تعريف المشروع.
- اضبط عدد ثابت السلسلة المسمى
PROJECT_ID
في ملفConfiguration.js
على رقم تعريف المشروع.
ضبط clasp
الإعدادات
لإعداد إعدادات clasp
لدفع رمز المصدر إلى مشروع "برمجة تطبيقات Google" الصحيح، اتّبِع الخطوات التالية:
- في وحدة تحكُّم برمجة التطبيقات، اختَر مشروعك.
- اختَر إعدادات المشروع (Project Settings).
- ضمن المعرّفات، انقر على نسخ.
- في الدليل الحالي، أنشِئ ملف
.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.
تجربة هذا
- في Google Chat، أرسِل
Hello!
في رسالة مباشرة إلى التطبيق. لا يستجيب التطبيق، ولكن ستظهر رسالة تطلب منك الضبط.
- انقر على ضبط.
- اختَر حسابك على Google.
- مصادقة.
- مراجعة التطبيق والسماح بالوصول إليه
في حال إتمام الإجراء، ستظهر لك شاشة تأكيد أساسية على صفحة الويب وردًّا فعليًا من التطبيق على رسالتك الأصلية.
- يمكنك إرسال رسالة مباشرة أخرى إلى التطبيق، ولكن باستخدام أمر الشرطة المائلة
/create
.
- في مربع الحوار، اضبط العنوان على
Issue Title 1
. - اضبط الوصف على المشكلة
Description 1
. - انقر على إنشاء.
يجري التطبيق ما يلي:
- لإغلاق مربّع الحوار
- تنشئ مساحة مخصّصة للمشكلة التي تم إنشاؤها حديثًا تحمل العنوان نفسه.
- الانضمام إلى المساحة التي تم إنشاؤها حديثًا.
- لإرسال رسالة تحتوي على وصف المشكلة في المساحة التي تم إنشاؤها حديثًا.
- لإرسال رسالة مباشرة إليك تحتوي على رابط يؤدي إلى المساحة التي تم إنشاؤها حديثًا.
- في المساحة التي تم إنشاؤها حديثًا، أرسِل رسالة باستخدام الأمر الشرطة المائلة
/close
والدقة مثلNot reproducible
.
يجري التطبيق ما يلي:
- ينشئ مستند تقرير في "مستندات Google".
- يرسل رسالة إلى المساحة المخصّصة للمشكلة مع رابط يؤدي إلى مستند التقرير الذي تم إنشاؤه حديثًا.
- افتح مستند التقرير. فهو يحتوي على معلومات أساسية، والتاريخ، وملخص.
4. اختياري: التطبيق 1: إضافة الصفحة الرئيسية للتطبيق
مراجعة المفاهيم
صفحة التطبيق الرئيسية هي رسالة بطاقة قابلة للتخصيص يرسلها تطبيق Chat إلى مستخدم عندما يصل إلى علامة التبويب الصفحة الرئيسية من رسالة مباشرة مع تطبيق Chat. وتُستخدم هذه الرسالة عادةً لعرض مستندات التطبيق أو نظرة عامة. من الناحية الفنية، هناك فعالية مخصّصة يجب التعامل معها ويستند هذا إلى المبادئ الأساسية نفسها المتبعة في رسائل البطاقات.
خطوات المراجعة
إدارة المشاكل
مراجعة رمز المصدر
يجب تعديل مشروع "برمجة تطبيقات Google".
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
}}]}};
}
تعديل مشروع Google Cloud
في Google Cloud Console، اتّبِع الخطوات التالية:
في بيئتك المحلية، اتبع الخطوات التالية:
- عليك تغيير الدليل الحالي في الوحدة الطرفية إلى
issue-management/2-app-home
. يحتوي المستند على رمز المصدر الذي عليك استخدامه. - انسخ الملف
issue-management/1-baseline/.clasp.json
إلى الدليل الحالي. - انسخ الملف
issue-management/1-baseline/Configuration.js
إلى الدليل الحالي لكي يحلّ محلّ الملف الحالي. - نفِّذ الأمر التالي:
clasp push
التجربة الآن
في Google Chat، اتّبِع الخطوات التالية:
- أرسِل رسالة مباشرة إلى التطبيق باستخدام الأمر الشرطة المائلة
/create
. يفتح التطبيق مربّع حوار. - اضبط العنوان على
Issue Title 2
. - اضبط الوصف على المشكلة
Description 2
. - انقر على إنشاء.
- اختَر علامة التبويب الصفحة الرئيسية من مساحتك باستخدام تطبيق Google Chat. ويمكنك الاطّلاع على تفاصيل المشاكل التي أنشأتها.
5- اختياري: التطبيق 1: إضافة ميزة مراقبة المساحة
مراجعة المفاهيم
النشر/الاشتراك
النشر/الاشتراك هي خدمة مراسلة غير متزامنة وقابلة للتوسّع، تفصل بين الخدمات التي ينتج عنها الخدمات التي تعالج هذه الرسائل. يتيح لك أسلوب النشر/الاشتراك إنشاء أنظمة لمنتجي الأحداث والمستهلكين، وتسمى الناشرون والمشتركون. يتواصل الناشرون مع المشتركين بشكل غير متزامن عن طريق بث الأحداث، بدلاً من الاتصال المتزامن للإجراءات عن بُعد (RPC).
ويرسل الناشرون الأحداث إلى خدمة النشر/الاشتراك بغض النظر عن طريقة أو وقت معالجة هذه الأحداث. بعد ذلك، تقوم خدمة Pub/Sub بتسليم الأحداث إلى جميع الخدمات التي تتفاعل معها. في الأنظمة التي تتصل من خلال استدعاء إجراء عن بُعد (RPC)، يجب على الناشرين انتظار تلقي المشتركين للبيانات. ومع ذلك، يؤدي الدمج غير المتزامن في خدمة النشر/الاشتراك إلى زيادة مرونة النظام ككل ومتانته.
الموضوع: مورد مُسمّى يمثّل خلاصة الرسائل يجب إنشاء موضوع قبل أن تتمكن من نشره أو الاشتراك فيه.
اشتراك: لتلقّي الرسائل المنشورة حول موضوع معيّن، عليك إنشاء اشتراك في ذلك الموضوع. يتلقى العميل المشترك الرسائل المنشورة في الموضوع ويعالجها. يمكن أن يضم الموضوع عدة اشتراكات، ولكن هناك اشتراك معيّن ينتمي إلى موضوع واحد.
أحداث Google Workspace
تمثّل أحداث Google Workspace التغييرات في موارد Google Workspace، مثل عند إنشاء الموارد أو تعديلها أو حذفها. يمكن للتطبيقات الاشتراك في موارد Google Workspace لتلقّي الأحداث ذات الصلة ومعالجتها بشكل غير متزامن.
في ما يلي كيفية إرسال واجهة برمجة التطبيقات Google Workspace Events API للأحداث إلى أحد التطبيقات من خلال الاشتراك:
- يشترك التطبيق في مورد في تطبيق Google Workspace، مثل مساحة.
- يتغير المورد الذي اشترك التطبيق فيه.
- يعرض تطبيق Google Workspace حدثًا لموضوع في ميزة النشر/الاشتراك، وبذلك، يتم اعتبار نقطة نهاية الإشعارات لاشتراك Google Workspace الخاص بالتطبيق. يحتوي الحدث على بيانات عن ما تغيّر في المورد.
- يعالج التطبيق رسالة النشر/الاشتراك التي تحتوي على الحدث، ويتّخذ الإجراء اللازم إذا لزم الأمر.
خطوات المراجعة
إنشاء مشكلة (تعديل)
تحديد المشكلة وحلّها من المساحة المخصّصة (تعديل)
إغلاق المشكلة من المساحة المخصّصة (تعديل)
معالجة الاشتراكات
مراجعة رمز المصدر
يجب تعديل مشروع "برمجة تطبيقات Google".
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);
...
}
Storage.js
// 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 Cloud، فعِّل "أحداث Google Workspace" وPubSub.
- انقر على القائمة مؤهّلة > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات التي تم تفعيلها ثم تأكَّد من تفعيل كلّ منهما.
بدء الاشتراك
تحتاج إلى إنشاء موضوع نشر/اشتراك والاشتراك فيه حتى يتم نشر جميع أحداث مساحة العمل.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى القائمة مؤهّلة > النشر/الاشتراك > المواضيع.
- انقر على إنشاء موضوع.
- اضبط رقم تعريف الموضوع على
workspace-events
. - ضَع علامة في مربّع الاختيار Add a default subscription (إضافة اشتراك تلقائي).
- انقر على إنشاء.
لمنح الإذن بالوصول لنشر رسائل النشر/الاشتراك في الموضوع الذي تم إنشاؤه حديثًا من Google Chat، اتّبِع الخطوات التالية:
- اختَر الموضوع من القائمة.
- اختَر علامة التبويب الأذونات.
- أضِف
chat-api-push@system.gserviceaccount.com
إلى العناصر الرئيسية الجديدة. - اختَر ناشر/اشتراك في قناة للوصول إلى الدور.
- انقر على حفظ.
تعديل مشروع "برمجة تطبيقات Google"
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى القائمة مؤهّلة > إدارة الهوية وإمكانية الوصول والمشرف > الإعدادات.
- انسخ رقم تعريف المشروع.
في بيئتك المحلية، اتبع الخطوات التالية:
- عليك تغيير الدليل الحالي في الوحدة الطرفية إلى
issue-management/3-message-monitoring
. يحتوي المستند على رمز المصدر الذي تحتاج إليه. - اضبط قيمة ثابتة للسلسلة باسم
PROJECT_ID
في ملفConfiguration.js
على رقم تعريف المشروع المنسوخ. - اضبط ثابت JSON المسمى
CHAT_CREDENTIALS
في ملفConfiguration.js
على محتوى ملف المفتاح الخاص الذي نزّلته سابقًا. - انسخ الملف
issue-management/2-app-home/.clasp.json
إلى الدليل الحالي. - نفِّذ الأمر التالي:
clasp push
التجربة الآن
في Google Chat، اتّبِع الخطوات التالية:
- أرسِل رسالة مباشرة إلى التطبيق باستخدام الأمر الشرطة المائلة
/create
. يفتح التطبيق مربّع حوار. - اضبط العنوان على
Issue Title 3
. - اضبط الوصف على المشكلة
Description 3
. - انقر على إنشاء.
- في المساحة التي تم إنشاؤها حديثًا، أرسِل بعض الرسائل التي تناقش المشكلة.
- إرسال رسالة باستخدام أمر الشرطة المائلة
/close
ودرجة الدقة مثلFixed
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى القائمة مؤهّلة > النشر/الاشتراك > الاشتراكات.
- اختَر الاشتراك workspace-events-sub.
- اختَر علامة التبويب الرسائل.
- انقر على سحب. يعرض الجدول الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- اختَر محرِّر.
- اختَر ملف
WorkspaceEvent.gs
. - اختَر
processSubscription
في القسم Run (تشغيل). - انقر على
Run
.يَظهر سجلّ التنفيذ أنّه تمّت معالجة الرسائل.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى القائمة مؤهّلة > النشر/الاشتراك > الاشتراكات.
- اختَر الاشتراك workspace-events-sub.
- اختَر علامة التبويب الرسائل.
- انقر على سحب. لن يعرض الجدول بعد ذلك الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.
- في Google Chat، في المساحة المخصّصة للمشكلة الثالثة التي أنشأتها باستخدام أمر الشرطة المائلة
/create
، أرسِل بعض الرسائل الأخرى التي تناقش المشكلة.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى القائمة مؤهّلة > النشر/الاشتراك > الاشتراكات.
- اختَر الاشتراك workspace-events-sub.
- اختَر علامة التبويب الرسائل.
- انقر على سحب. لا يعرض الجدول الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.
6. اختياري: التطبيق 1: إضافة مساعدة بشأن الشمولية
مراجعة المفاهيم
الطلب من خلال الذكاء الاصطناعي التوليدي هي فن صياغة تعليمات أو أسئلة لتوجيه نموذج الذكاء الاصطناعي التوليدي من أجل تحقيق نوع محدّد من النتائج المطلوبة. من الممارسات الشائعة بوابة الإجابات من خلال إضافة قواعد وشروط في الطلبات. يمكن أن يساعد ذلك في جعل المخرجات آمنة وملائمة ومتسقة ومتوافقة مع التوقعات.
خطوات المراجعة
معالجة الاشتراكات (تعديل)
مراجعة رمز المصدر
يجب تعديل مشروع "برمجة تطبيقات Google".
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;
}
تعديل مشروع "برمجة تطبيقات Google"
في بيئتك المحلية، اتبع الخطوات التالية:
- عليك تغيير الدليل الحالي في الوحدة الطرفية إلى
issue-management/4-inclusivity-help
. ويتضمّن رمز المصدر الذي تحتاج إليه. - انسخ الملف
issue-management/3-message-monitoring/.clasp.json
إلى الدليل الحالي. - انسخ الملف
issue-management/3-message-monitoring/Configuration.js
إلى الدليل الحالي لكي يحلّ محلّ الملف الحالي. - نفِّذ الأمر التالي:
clasp push
التجربة الآن
في Google Chat، اتّبِع الخطوات التالية:
- أرسِل رسالة مباشرة إلى التطبيق باستخدام الأمر الشرطة المائلة
/create
. يفتح التطبيق مربّع حوار. - اضبط العنوان على
Issue Title 4
. - اضبط الوصف على المشكلة
Description 4
. - انقر على إنشاء.
- في المساحة التي تم إنشاؤها حديثًا، أرسِل
It happened to me last week as well
.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- اختَر محرِّر.
- اختَر ملف
WorkspaceEvent.gs
. - اختَر
processSubscription
في القسم Run (تشغيل). - انقر على تشغيل. من خلال سجلّ التنفيذ، يمكنك معرفة أنّه تمت معالجة الرسائل.
في Google Chat، اتّبِع الخطوات التالية:
- لاحظ أن التطبيق لم يرسل أي مساعدة بشأن الشمولية في المساحة التي تم إنشاؤها حديثًا.
- في المساحة التي تم إنشاؤها حديثًا، أرسِل الرسالة
I had to add myself from the master to fix it
.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- اختَر محرِّر.
- اختَر ملف
WorkspaceEvent.gs
. - اختَر
processSubscription
في القسم Run (تشغيل). - انقر على تشغيل. من خلال سجلّ التنفيذ، يمكنك معرفة أنّه تمت معالجة الرسائل. في Google Chat، أرسل التطبيق رسالة مساعدة بشأن الشمولية في المساحة التي تم إنشاؤها حديثًا.
7. اختياري: التطبيق 1: إضافة الإعدادات المفضّلة
.
مراجعة المفاهيم
التطبيقات المصغّرة الخاصة بالملحقات هي تطبيق مصغّر بلا حدود وملحق بأسفل رسالة أرسلها تطبيق. يُستخدَم عادةً هذا التطبيق لتفعيل التفاعلات السريعة من المستخدم في السياق المحدّد للرسائل. من الناحية الفنية، تستند إلى نفس المبادئ الأساسية مثل أزرار البطاقة.
خطوات المراجعة
إيقاف المساعدة بشأن الشمولية
مراجعة رمز المصدر
يجب تعديل مشروع "برمجة تطبيقات Google".
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);
}
}
Storage.js
// 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
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
تعديل مشروع "برمجة تطبيقات Google"
في بيئتك المحلية، اتبع الخطوات التالية:
- عليك تغيير الدليل الحالي في الوحدة الطرفية إلى
issue-management/5-disable-help
. يحتوي المستند على رمز المصدر الذي تحتاج إليه. - انسخ الملف
issue-management/4-inclusivity-help/.clasp.json
إلى الدليل الحالي. - انسخ الملف
issue-management/4-inclusivity-help/Configuration.js
إلى الدليل الحالي لكي يحلّ محلّ الملف الحالي. - نفِّذ الأمر التالي:
clasp push
التجربة الآن
إيقاف المساعدة
- في Google Chat، في المساحة المخصّصة للمشكلة الرابعة التي أنشأتها باستخدام أمر الشرطة المائلة
/create
، أرسِل الرسالةI had to add myself from the master to fix
.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- اختَر محرِّر.
- اختَر ملف
WorkspaceEvent.gs
. - اختَر
processSubscription
في القسم Run (تشغيل). - انقر على تشغيل. من خلال سجلّ التنفيذ، يمكنك معرفة أنّه تمت معالجة الرسائل.
في Google Chat، اتّبِع الخطوات التالية:
- لاحظ أن التطبيق أرسل رسالة تساعد في الشمولية إلى المساحة المخصصة للمشكلة باستخدام أداة ملحق.
- انقر على التطبيق المصغّر للملحق لإيقاف المساعدة بشأن الشمولية.
التحقق من الإيقاف
- في Google Chat، في المساحة المخصّصة للمشكلة الرابعة التي أنشأتها باستخدام أمر الشرطة المائلة
/create
، أرسِل الرسالةI had to add myself from the master to fix
.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- اختَر محرِّر.
- اختَر ملف
WorkspaceEvent.gs
. - اختَر
processSubscription
في القسم Run (تشغيل). - انقر على تشغيل. من خلال سجلّ التنفيذ، يمكنك معرفة أنّه تمت معالجة الرسائل. في Google Chat، لم يرسل التطبيق رسالة تتضمّن مساعدة بشأن الشمولية إلى المساحة المخصّصة للمشكلة بسبب إيقافها.
8. التطبيق 2: إنشاء
مراجعة المفاهيم
التأسيس للذكاء الاصطناعي التوليدي
يتعلق الأمر بجعل نماذج الذكاء الاصطناعي أكثر واقعية وموثوقية من خلال ربطها بمصادر معرفة يمكن التحقّق منها. وتساعد هذه الطريقة في منع الذكاء الاصطناعي من اختراع المعلومات، ويمكن أن تساعد في تقديم ردود ذات صلة بالسياق وأقل تحيزًا.
اللغة الطبيعية
أي لغة يتحدث بها أو يكتبها البشر للتواصل اليومي، على عكس اللغات الاصطناعية أو المستندة إلى الكمبيوتر.
التخزين في السحابة الإلكترونية
تتيح خدمة Cloud Storage إمكانية تخزين أي كمية بيانات واستردادها في أي وقت على مستوى العالم. ويمكن استخدامها لمجموعة من السيناريوهات، بما في ذلك عرض محتوى موقع إلكتروني أو تخزين البيانات لأرشفة البيانات واستعادتها في حالات الكوارث أو توزيع كائنات بيانات ضخمة على المستخدمين من خلال التنزيل المباشر.
مخزن بيانات Dialogflow CX
يتكامل Dialogflow CX مع مخازن البيانات التي تشكّل مجموعات من المواقع الإلكترونية والمستندات التي يستخدمها وكلاء مخزن البيانات للعثور على إجابات عن أسئلة المستخدم النهائي من بيانات محدّدة. بالنسبة إلى سؤال معيّن، يبحث وكيل مخزن البيانات عن إجابة من محتوى المصدر المعني ويلخّص النتائج في ردّ متماسك. كما يوفر أيضًا روابط داعمة لمصادر الرد حتى يتمكن المستخدم النهائي من معرفة المزيد.
بنية المراجعة
تم تصميم تطبيق Google Chat هذا باستخدام Dialogflow CX ويعمل على النحو التالي:
- يرسل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
- ويعالج التطبيق، وهو وكيل Dialogflow CX ومرتبط بمشروع على Google Cloud، الرسالة.
- يتكامل التطبيق مع مخزن بيانات موجود في Cloud Storage.
- يرسل التطبيق استجابة متزامنة، إما في رسالة مباشرة أو في المساحة الأصلية.
مراجعة التدفقات
الإجابة عن السؤال
مراجعة رمز المصدر
المصدر الوحيد الذي تحتاجه ليس الترميز، ولكن البيانات التي تستخدمها للتأريض.
google-chat-overview.pdf
يحتوي على معلومات غير منظَّمة لتطبيقات Google Chat، وهي نسخة مطبوعة من صفحة تم الحصول عليها من الموقع الإلكتروني لمطوّري Google Workspace.
تعديل مشروع Google Cloud
في وحدة التحكّم في Google Cloud، اتّبِع الخطوات التالية:
- تفعيل واجهات برمجة تطبيقات Dialogflow وCloud Storage
- تفعيل واجهة برمجة التطبيقات Vertex AI Agent Builder API
- انقر على القائمة مؤهّلة > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات التي تم تفعيلها ثم تأكَّد من أنّ جميع واجهات برمجة التطبيقات مُفعَّلة.
.
إنشاء وكيل مخزن بيانات Dialogflow CX
بدء البيانات المعرفية
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > التخزين في السحابة الإلكترونية > الحزم.
- انقر على إنشاء.
- اضبط name على
gchat-knowledge
. - انقر على إنشاء.
- اختَر الحزمة gchat-knowledge.
- انقر على تحميل الملفات.
- اختَر ملف
knowledge-app/grounding/google-chat-overview.pdf
من بيئتك المحلية.
إنشاء تطبيق
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > التطبيقات.
- انقر على تطبيق جديد.
- اختَر نوع المحادثة.
- اضبط
Company name
على اسم شركتك. - ضبط السمة
Agent name
علىknowledge
- انقر على متابعة.
- انقر على إنشاء مخزن بيانات جديد.
- اختَر Cloud Storage كمصدر للبيانات.
- اختَر ملف.
- انقر على تصفّح.
- اختَر ملف
google-chat-overview.pdf
. - انقر على متابعة.
- اضبط اسم مخزن البيانات على
gchat-knowledge-ds
. - انقر على إنشاء.
- اختَر مخزن بيانات gchat-knowledge-ds في الجدول.
- انقر على إنشاء.
- بعد بضع دقائق، انقر على القائمة مؤهّلة > أداة إنشاء الوكلاء > التطبيقات ولاحظ أنه يمكنك الوصول إلى التطبيق.
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > متاجر البيانات.
- انقر على مخزن بيانات gchat-knowledge-ds. يبلغ عدد المستندات
1
، ما يعني أنّها جاهزة.
إكمال التطبيق واختباره
في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:
- اختَر مشروعك على Google Cloud.
- اختَر الوكيل knowledge.
- اختَر إعدادات الوكيل > الذكاء الاصطناعي التوليدي > الوكيل التوليدي.
- بدِّل النموذج من Text Bison إلى Gemini Pro.
- انقر على حفظ.
- انقر على وكيل تجريبي.
- إرسال
What is Google Chat?
يردّ موظّف الدعم بعبارة مفيدة.
دمج تطبيق Google Chat
في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:
- اختَر مشروعك على Google Cloud.
- في صف وكيل المعلومات، انقر على > نسخ الاسم.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى إعدادات Google Chat API.
- ضِمن إعدادات الربط، اختَر Dialogflow.
- ضِمن إعدادات Dialogflow، اختَر Dialogflow CX.
- اضبط اسم مورد الوكيل أو البيئة على اسم الوكيل الذي نسخته.
- أزِل الأمرَين المائلَين.
- في Google Chat، أرسِل
What is Google Chat?
في رسالة مباشرة إلى تطبيق Google Chat. يستجيب الوكيل بعبارة مفيدة.
9. اختياري: التطبيق 2: إضافة المصادر
مراجعة المفاهيم
الرد التلقائي على الويب الخاص بـ Dialogflow CX
يشير ذلك المصطلح إلى خدمة تستضيف منطق النشاط التجاري أو تتصل بخدمات أخرى. أثناء جلسة Dialogflow CX، يمكن أن تعتمد الردود التلقائية على الويب على البيانات المستخرجة من معالجة اللغات الطبيعية لإنشاء ردود ديناميكية أو التحقّق من صحة البيانات التي تم جمعها أو تشغيل الإجراءات في الخلفية.
وظائف السحابة الإلكترونية
تُعد وظائف السحابة الإلكترونية رائعة في إنشاء خلفيات بدون خوادم وإجراء معالجة البيانات في الوقت الفعلي وإنشاء تطبيقات ذكية. لا توجد خوادم لتوفيرها أو إدارتها أو تصحيحها أو تحديثها. وهي قابلة للتوسّع تلقائيًا، وهي متاحة بدرجة كبيرة وتتحمّل الأخطاء.
مراجعة التدفقات
الإجابة عن السؤال (تعديل)
مراجعة رمز المصدر
إنّ رمز المصدر الوحيد الذي تحتاجه هو الوظيفة لتعديل ردود موظّف الدعم مع رسائل Google Chat. وهو يُستخدم كرد تلقائي على الويب.
package.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
}}]
}]}
}]
}}]
}});
});
تعديل مشروع Google Cloud
في وحدة التحكّم في Google Cloud، اتّبِع الخطوات التالية:
- تفعيل Cloud Build وCloud Functions وCloud Logging وArtifact Registry وCloud Run API
- انقر على القائمة مؤهّلة > واجهات برمجة التطبيقات والخدمات > واجهات برمجة التطبيقات والخدمات التي تم تفعيلها ثم تأكَّد من أنّ واجهات برمجة التطبيقات مُفعَّلة.
تعديل وكيل مخزن بيانات Dialogflow CX
يجب تفعيل دالة السحابة الإلكترونية وتعديل الرد التلقائي على الويب على Dialogflow CX ليتم تشغيله بمصادر متعددة عند الإمكان.
عرض مصادر متعددة
بشكل تلقائي، يعرض وكيل مخزن البيانات الجديد مصدرًا واحدًا فقط كحد أقصى، ولكن يمكنك إجراء تغيير لعرض المزيد.
في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:
- اختَر مشروعك على Google Cloud.
- اختَر الوكيل knowledge.
- انقر على الصفحة الرئيسية.
- انقر على تعديل مخازن البيانات.
- ضمن قسم ردود موظّفي الدعم، اضبط خيارات الردّ في متجر البيانات على
5
. - انقر على حفظ.
بدء دالة السحابة الإلكترونية
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > دوال السحابة الإلكترونية.
- انقر على إنشاء دالة.
- ضمن الأساسيات، اضبط الاسم على
function-1
. - ضمن المصادقة، اختَر زر الاختيار السماح باستدعاءات لم تتم مصادقتها.
- ضمن وقت التشغيل والإصدار والاتصالات وإعدادات الأمان، اضبط الحد الأقصى لعدد الأجهزة الافتراضية على
3
. - انقر على Next (التالي).
- اضبط نقطة الدخول على
agent-response-adapter
. - استبدِل المحتوى التلقائي بالملفات المتوفّرة في دليل
knowledge-app/agent-response-adapter
. - انقر على نشر.
- انسخ عنوان URL أثناء الانتظار لبضع دقائق حتى يتم نشر الدالة.
بدء الردّ التلقائي على الويب
يجب ضبط وكيل Dialogflow CX لاستخدام ردّ تلقائي على الويب يؤدي إلى تشغيل الوظيفة المنشورة حديثًا.
في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:
- اختَر مشروعك على Google Cloud.
- اختَر الوكيل knowledge.
- اختَر إدارة > الردود التلقائية على الويب > إنشاء.
- اضبط الاسم المعروض على
Google Chat Response Adapter
. - اضبط عنوان URL للردّ التلقائي على الويب على عنوان URL الذي نسخته سابقًا.
- انقر على حفظ.
- انقر على إنشاء.
- انقر على الصفحة الرئيسية.
- انقر على تعديل مخازن البيانات.
- ضمن إعدادات الردّ التلقائي على الويب، انقر على زر التبديل تفعيل الرد التلقائي على الويب.
- اختَر محوِّل استجابة Google Chat للردّ التلقائي على الويب.
- ضبط tag على
arbitrary_tag
. - انقر على حفظ.
تطبيق تجريبي
- في Google Chat، أرسِل
What is Google Chat?
في رسالة مباشرة إلى تطبيق Google Chat. يستجيب الوكيل بعبارات مفيدة بالإضافة إلى بطاقة تتضمّن المصادر، إن توفّرت.
10. التطبيق 3: إنشاء
مراجعة المفاهيم
التفاعلات الحوارية
إنها تبادل المعلومات أو الأفكار ذهابًا وإيابًا بين شخصين أو أكثر من خلال اللغة الطبيعية. وهذا على عكس الواجهات التقنية التي غالبًا ما تعتمد على تبادلات غير حالة، وذات بنية عالية، وغير مقبولة.
مواصفات OpenAPI
وهو يوفر وسيلة متسقة لنقل المعلومات خلال كل مرحلة من مراحل نشاط واجهة برمجة التطبيقات. هي لغة مواصفات لواجهات برمجة تطبيقات HTTP تحدد البنية والبنية بطريقة لا ترتبط بلغة البرمجة التي تم إنشاء واجهة برمجة التطبيقات بها. عادةً ما تتم كتابة مواصفات واجهة برمجة التطبيقات بلغة YAML أو JSON، ما يتيح سهولة مشاركة المواصفات واستخدامها.
وكيل Dialogflow CX
الوحدة الأساسية لتطبيقات الوكلاء. يتضمّن تطبيق الوكيل عادةً العديد من الوكلاء، حيث يتم تحديد كل وكيل للتعامل مع مهام معيّنة. يتم تقديم بيانات الوكيل إلى النموذج اللغوي الكبير، بحيث تتوفّر له المعلومات اللازمة للإجابة عن الأسئلة وتنفيذ المهام. يمكن لكل وكيل تقديم معلومات، أو إرسال طلبات البحث إلى خدمات خارجية، أو تأجيل معالجة المحادثات إلى مسار CX في Dialogflow أو وكيل آخر لمعالجة المهام الفرعية.
أداة Dialogflow CX
يتم استخدام الأدوات لربط تطبيقات الوكلاء بالأنظمة الخارجية. ويمكن لهذه الأنظمة زيادة المعرفة بتطبيقات برامج الوكيل وتمكينها من تنفيذ المهام المعقّدة بكفاءة.
بنية المراجعة
تم تصميم تطبيق Google Chat هذا باستخدام Dialogflow CX ويعمل على النحو التالي:
- يرسل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
- ويعالج التطبيق، وهو وكيل Dialogflow CX ومرتبط بمشروع على Google Cloud، الرسالة.
- يتكامل التطبيق مع وكيل.
- يرسل التطبيق استجابة متزامنة، إما في رسالة مباشرة أو في المساحة الأصلية.
مراجعة التدفقات
جمع المراجعات
مراجعة رمز المصدر
رمز المصدر الوحيد الذي تحتاجه هو الدالة التي تحاكي خدمة الخلفية التي يستخدمها الوكيل كأداة.
package.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
بدء نموذج تجريبي لخدمة الخلفية
يمكنك نشر دالة Cloud لمحاكاة خدمة الخلفية التي يحتاجها تطبيق وكيل Dialogflow CX لدمجها وطلبها كأداة.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > دوال السحابة الإلكترونية.
- انقر على إنشاء دالة.
- ضمن الأساسيات، اضبط الاسم على
function-2
. - ضمن المصادقة، ضَع علامة على زر الاختيار السماح باستدعاءات لم تتم مصادقتها.
- ضمن وقت التشغيل والإصدار والاتصالات وإعدادات الأمان، اضبط الحد الأقصى لعدد الأجهزة الافتراضية على
3
. - انقر على Next (التالي).
- اضبط نقطة الدخول على
feedback-app-backend
. - استبدِل المحتوى التلقائي بالملفات المتوفّرة في دليل
feedback-app
. - انقر على نشر.
- انسخ عنوان URL أثناء الانتظار لبضع دقائق حتى يتم نشر الدالة.
إنشاء تطبيق وكيل Dialogflow CX
إنشاء تطبيق
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > التطبيقات.
- انقر على تطبيق جديد.
- اختَر الوكيل.
- اضبط الاسم المعروض على
Feedback App
. - انقر على إنشاء.
بدء الأداة
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > التطبيقات.
- اختَر الوكيل Feedback App.
- انقر على الأدوات > + إنشاء.
- اضبط الاسم على
review
. - اختر OpenAPI.
- اضبط description على القيمة التالية:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- استبدِل
$URL
في ملفfeedback-app/service-openapi.yaml
بعنوان URL الذي نسخته سابقًا. - اضبط
YAML Schema
على محتوى ملفfeedback-app/service-openapi.yaml
المعدَّل. - انقر على حفظ.
بدء موظّف الدعم
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > التطبيقات.
- اختَر الوكيل Feedback App.
- اختَر الوكلاء > الوكيل التوليدي التلقائي.
- اضبط اسم الوكيل على
Feedback collector
. - اضبط
goal
على القيمة التالية:
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.
- اضبط instructions على القيمة التالية:
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.
- انقر على حفظ.
تطبيق تجريبي
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة ↓ > أداة إنشاء الوكلاء > التطبيقات.
- اختَر الوكيل Feedback App.
- انتقِل إلى معاينة الوكيل.
- ضمن الوكيل، اختَر جهة جمع الملاحظات.
- ضمن اختيار نموذج إنشاءي، اختَر gemini-pro.
- أرسِل الرسالة
Hello!
للبدء.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > دوال السحابة الإلكترونية.
- حدد الدالة 2 > السجلات. تعرض بعض السجلّات Google-Dialogflow على أنّه اتصال.
دمج تطبيق Google Chat
في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:
- اختَر مشروعك على Google Cloud.
- انقر على قائمة الإجراءات لوكيل
Feedback App
. - انقر على نسخ الاسم.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انتقِل إلى إعدادات Google Chat API.
- اضبط اسم مورد الوكيل أو البيئة على اسم الوكيل الذي نسخته سابقًا.
- في Google Chat، أرسِل
Hello!
في رسالة مباشرة إلى تطبيق Google Chat للبدء. يستجيب الوكيل بشكل مشابه للاختبار من وحدة تحكُّم Dialogflow CX.
11. تَنظيم
حذف مشروع Google Cloud
لتجنّب دفع رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس التطبيقي حول الترميز، ننصحك بحذف مشروع Google Cloud.
في Google Cloud Console، اتّبِع الخطوات التالية:
- انقر على القائمة مؤهّلة > إدارة الهوية وإمكانية الوصول والمشرف > الإعدادات.
- انقر على إيقاف التشغيل.
- أدخِل رقم تعريف المشروع.
- انقر على إيقاف التشغيل على أي حال.
حذف مشروع "برمجة تطبيقات Google"
ننصحك بحذف مشروع "برمجة تطبيقات Google" أيضًا.
في وحدة تحكم برمجة التطبيقات، اتبع الخطوات التالية:
- اختَر مشروعك.
- انقر على قائمة الإجراءات.
- انقر على إزالة.
12. تهانينا
تهانينا! لقد أنشأت تطبيقات Google Chat باستخدام Gemini.
ما هي الخطوات التالية؟
لقد عرضنا فقط حالات الاستخدام البسيطة في هذا الدرس التطبيقي حول الترميز، ولكن هناك الكثير من مجالات التوسيع التي يمكنك استخدامها في تطبيقات Google Chat، مثل ما يلي:
- يمكنك الدمج مع نماذج الذكاء الاصطناعي التوليدي الأخرى، بما في ذلك النماذج المخصّصة.
- دعم أنواع أخرى من الوسائط، مثل الصوت والصور والفيديو
- استخدام وسائل متعددة:
- يمكنك الاعتماد على نوافذ السياق الأطول وحلقات الملاحظات.
- نشر تطبيقات Google Chat الجاهزة للإنتاج في Marketplace هناك الكثير من الموارد المتاحة للمطورين مثل مقاطع فيديو YouTube ومواقع التوثيق وعينات التعليمات البرمجية والبرامج التعليمية.
- تفعيل Google Chat لمؤسستك تسهِّل ميزة وضع الاستيراد عملية البدء.
مزيد من المعلومات
- الموقع الإلكتروني لمستندات المطوّرين في Google Chat
- دمج Google Chat وDialogflow CX
- مستودع GitHub لجميع نماذج Google Chat
- وضع الاستيراد في Google Chat
- الموقع الإلكتروني لمستندات المطوّرين حول "برمجة تطبيقات Google"
- قناة Google Workspace Developers على YouTube
- مركز مطوّري Google Cloud
- الذكاء الاصطناعي التوليدي على Vertex AI
- نماذج الذكاء الاصطناعي التوليدي
- النماذج المخصّصة للذكاء الاصطناعي التوليدي
- الذكاء الاصطناعي التوليدي
- نوافذ السياق الطويل للذكاء الاصطناعي التوليدي
- تقرير ملاحظات الذكاء الاصطناعي التوليدي