إنشاء تطبيقات لاستخدامها في Google Chat باستخدام Gemini

1. قبل البدء

ما هي تطبيقات Google Chat التي تستخدم Gemini؟

في ما يلي الإجراءات التي تتّبعها تطبيقات Google Chat التي تستخدم Gemini:

  • يمكنك إضافة خدماتك ومواردك إلى Google Chat، ما يتيح للمستخدمين الحصول على المعلومات واتخاذ الإجراءات بدون مغادرة المحادثة.
  • ما عليك سوى دمج Gemini مع نموذج الذكاء الاصطناعي التوليدي كي يتمكّن من إنشاء بيانات، مثل النصوص أو الصور، أو البحث فيها في أوقات محدَّدة لتسهيل سير العمل.

لماذا يجب دمج تطبيقات Google Chat مع Gemini؟

تندرج حالات الاستخدام المعتادة لنماذج الذكاء الاصطناعي التوليدي، مثل Gemini، ضمن الفئات التالية:

  • إنشاء المحتوى وتحسينه: إنشاء نسخة تسويقية أو صياغة مشاركات على وسائل التواصل الاجتماعي أو إنشاء صور واقعية أو تأليف موسيقى أو المساعدة في إنشاء محتوى الفيديو
  • البحث عن البيانات: يمكنك استخراج الإحصاءات الرئيسية من قاعدة معلومات غير منظَّمة أو تلخيص النصوص الطويلة أو تصنيف المحتوى أو ترجمة اللغات بدقة وسرعة محسَّنة.
  • محادثة: شارك في محادثات طبيعية وغنية بالمعلومات ومبتكرة.

توفّر إمكانية دمج هذه الإمكانات مباشرةً في واجهة Google Chat المألوفة فرصة كبيرة لأي مستخدم يريد تحسين تجربة المستخدمين وإنتاجيتهم.

المتطلبات الأساسية

العناصر التي تنشئها

في هذا الدرس التطبيقي حول الترميز، يمكنك إنشاء ثلاثة تطبيقات من Google Chat باستخدام Gemini لتغطية حالات الاستخدام الثلاث التي تم تقديمها في القسم السابق.

تطبيق إدارة المشاكل (إنشاء المحتوى وتحسينه)

ينفّذ هذا التطبيق ما يلي:

  • تتولى هذه الأداة إدارة المشاكل بدءًا من الإنشاء وحتى الإغلاق من خلال التفاعلات الأساسية والصفحة الرئيسية للتطبيق ومصادقة التطبيقات.
  • تراقب الرسائل وتقدّم المساعدة بشكل شامل باستخدام الأحداث والتطبيقات المصغّرة للملحقات.

يمكنك استخدام Gemini لتنفيذ الإجراءات التالية:

  • إنشاء تقارير عن المشاكل استنادًا إلى سجلّ الرسائل وتفاصيل المشكلة
  • تصنيف الكلمات غير الشاملة في الرسائل باستخدام الطلبات المغلقة

إنّ التكنولوجيات الرئيسية المستخدَمة هي Vertex AI وGemini و"برمجة تطبيقات Google" وواجهات برمجة التطبيقات في Google Workspace ("المشرف" وChat و"مستندات Google" و"الأحداث").

22efdecff4601417.png

2d127c63518673b2.png

9aea694937f2f3ed.png

يعتمد هذا التطبيق على Gemini لفهم الأسئلة والإجابة عنها بلغة طبيعية وعرض المراجع المصدر من البيانات غير المنظَّمة.

إنّ التكنولوجيات الرئيسية المستخدَمة هي وكيل تخزين البيانات Dialogflow CX والردّ التلقائي على الويب Dialogflow CX وGoogle Cloud Functions وGemini.

9468866bfe848bb8.png

تطبيق الملاحظات (المحادثة)

يعتمد هذا التطبيق على Gemini لجمع المراجعات وتخزينها باستخدام المحادثات بلغة طبيعية.

إنّ التكنولوجيات الرئيسية المستخدَمة هي وكيل Dialogflow CX وأداة Dialogflow CX وOpenAPI وGoogle Cloud Functions وGemini.

99a7a0295f122f31.png

المعلومات التي تطّلع عليها

  • كيفية دمج تطبيقات Google Chat مع Gemini من خلال Vertex AI
  • كيفية دمج تطبيقات Google Chat مع وكلاء Dialogflow CX
  • طريقة استخدام أحدث ميزات Google Chat: الصفحة الرئيسية للتطبيقات و"أحداث Google Chat" والتطبيقات المصغّرة الملحقة

المتطلبات

2. الإعداد

إعداد الموارد

في هذا القسم، يمكنك الوصول إلى الموارد التالية وضبطها من متصفّح الويب المفضّل لديك.

مشروع "برمجة تطبيقات Google"

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. انقر على الإعدادات، ثم فعِّل Google Apps Script API.

ea06c593b347b9d1.png

  1. اختَر مشروعك.
  2. انقر على إعدادات المشروع.
  3. اختَر إظهار "appsscript.json" ملف البيان في المحرِّر.
  4. إعادة تسمية المشروع إلى "Chat Apps Gemini"

12c1485bd248b766.png

مشروع على Google Cloud

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. انقر على رمز القائمة 🥭 >. واجهات برمجة التطبيقات الخدمات > شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth > عدِّل التطبيق، ثم اضبط اسم التطبيق على Chat Apps Gemini.

  1. انتقِل إلى ضبط واجهة Google Chat API، ثم اضبط اسم التطبيق والوصف على Chat Apps Gemini.

a71f040755da3b8b.png

Google Chat

في Google Chat، اتّبِع الخطوات التالية:

  1. إذا لزم الأمر، ابدأ محادثة مع تطبيق Google Chat.
  2. أرسِل رسالة، مثل Hello، للتأكّد من عملها.

9625418251528ae9.png

تنزيل رمز المصدر والموارد على الجهاز

  1. نزِّل مستودع GitHub هذا.

  1. في بيئة التطوير المفضّلة، افتح دليل apps-script/chat-apps-gemini ثم انتقِل إلى الدليل نفسه في الوحدة الطرفية.

da9478df97c99194.png

تثبيت clasp وإعداده

نستخدم clasp لتعديل إصدارات رمز المصدر وإرسالها بسهولة من البيئة المحلية إلى مشروع "برمجة التطبيقات".

  1. في بيئتك المحلية، ثبِّت أحدث إصدارات node وnpm وclasp.
npm install -g @google/clasp
  1. تسجيل الدخول باستخدام حسابك:
clasp login

8bc2434e6dc6f22a.png

في حال نجاح الإجراء، ستظهر لك شاشة تأكيد أساسية في متصفّح الويب وسيتم تعديل ملف .clasprc.json الذي يحتوي على بيانات اعتماد العميل. يمكنك العثور على مكان الرمز في الوحدة الطرفية.

e1d833eb4d5b3a8f.png

3- التطبيق 1: إنشاء

مراجعة المفاهيم

Vertex AI

توفّر Vertex AI كل ما تحتاج إليه لإنشاء الذكاء الاصطناعي التوليدي واستخدامه، بما في ذلك حلول الذكاء الاصطناعي وأداة إنشاء الوكلاء وأكثر من 130 نموذجًا أساسيًا ومنصة موحّدة للذكاء الاصطناعي.

c9e9c7a1945b22ac.png

Gemini

Gemini هو نموذج لغوي كبير متعدد الوسائط من Google يمكن الوصول إليه من خلال Vertex AI. يساعد التطبيق الأشخاص في إطلاق العنان لقدراتهم البشرية كي يتمكّنوا من تعزيز مخيلتهم وإثارة فضولهم وتعزيز إنتاجيتهم.

خدمة Chat المتقدّمة

تتيح لك خدمة Chat المتقدّمة استخدام واجهة Google Chat API في "برمجة تطبيقات Google". يسمح هذا الإجراء للنصوص البرمجية بالعثور على مساحات Chat وإنشائها وتعديلها، وإضافة أعضاء إلى المساحات أو إزالتهم، وقراءة الرسائل أو نشرها التي تحتوي على نصوص وبطاقات ومرفقات وتفاعلات.

مراجعة البنية

8c9c7b7328a69ea6.png

صُمِّم تطبيق Google Chat هذا باستخدام "برمجة تطبيقات Google". وهي تعمل على النحو التالي:

  1. يُرسِل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
  2. يعالج التطبيق الذي تم تنفيذه في مشروع "برمجة تطبيقات Google" ومرتبط بمشروع على Google Cloud الرسالة.
  3. يتكامل التطبيق مع "مستندات Google" وGoogle Chat APIs.
  4. يستخدم التطبيق خدمة الخصائص للاحتفاظ بالبيانات في مواقع النص البرمجي.
  5. يرسل التطبيق ردًا متزامنًا، إما في رسالة مباشرة أو في المساحة الأصلية.

خطوات مراجعة

إنشاء مشكلة

7ca0e8ba3c8255bb.png

تحديد وحلّ المشكلة الناتجة من المساحة المخصّصة

51b47714c378a24b.png

إغلاق المشكلة من المساحة المخصّصة

89e50228deeab0f9.png

رمز المصدر الخاص بالمراجعة

يحتوي مشروع "برمجة تطبيقات Google" على النصوص البرمجية التالية:

  • Configuration: العناصر الثابتة التي يمكن تعديلها استنادًا إلى البيئة
  • ChatApp: يعالج هذا الإعداد أحداث التفاعل في Google Chat، بما في ذلك الرسائل والنقرات على البطاقة وأوامر الشرطة المائلة ومربّعات الحوار.
  • Storage: وظائف الأدوات المساعدة التي تعتمد على "خدمات المواقع"
  • ChatAppAuth: وظائف الأدوات التي تعتمد على مصادقة تطبيق Google Chat
  • Docs: وظائف الأدوات التي تعتمد على "مستندات Google"
  • VertexAi: وظائف الأداة التي تعتمد على Vertex AI

في ما يلي الأجزاء التي تُستخدَم بشكل نشط عند إنشاء مستندات التقارير باستخدام Gemini وسجلّ مساحات Chat:

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

تفعيل واجهات برمجة التطبيقات

  1. في وحدة تحكُّم Google Cloud، فعِّل واجهات برمجة التطبيقات "مستندات Google" وSDK لوحدة تحكُّم المشرف في Google وVertex AI:

  1. انقر على رمز القائمة 🥭 >. واجهات برمجة التطبيقات الخدمات > واجهات برمجة التطبيقات المفعّلة "الخدمات" ثم تأكَّد من تفعيل واجهات برمجة التطبيقات.

بدء حساب الخدمة

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. إدارة الهوية وإمكانية الوصول المشرف > حسابات الخدمة > + أنشئ حساب خدمة.

74cf57426419f39.png

  1. اضبط اسم حساب الخدمة على chat-app.
  2. اضبط وصف حساب الخدمة على Chat app auth.
  3. انقر على إنشاء ومتابعة.
  4. انقر على تم. سيُعاد توجيهك إلى صفحة حسابات الخدمة، ويمكنك الاطّلاع على حساب الخدمة الذي أنشأته.

ca0468f1f93990f9.png

  1. اختَر حساب الخدمة الذي تم إنشاؤه حديثًا.
  2. انقر على علامة التبويب المفاتيح.
  3. انقر على إضافة مفتاح.
  4. انقر على إنشاء مفتاح جديد.
  5. اختَر JSON.
  6. انقر على إنشاء.

9f7e6ea020978ab0.png

سيتم إغلاق مربّع الحوار وتنزيل زوج المفاتيح العام/الخاص الذي تم إنشاؤه حديثًا تلقائيًا إلى بيئتك المحلية كملف JSON. يمكنك استخدام محتواه لاحقًا عند تعديل رمز المصدر لمشروع "برمجة تطبيقات Google".

تعديل إعدادات Google Chat API

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. أضف أمر شرطة مائلة.
  2. اضبط الاسم على /create.
  3. اضبط رقم تعريف الطلب على 1.
  4. اضبط الوصف على Create a new issue.
  5. ضَع علامة في مربّع الاختيار فتح مربّع حوار.
  6. إضافة أمر شرطة مائلة آخر.
  7. اضبط الاسم على /close.
  8. اضبط رقم تعريف الطلب على 2.
  9. اضبط الوصف على Close an issue.
  10. انقر على حفظ.

bee2e7b63659ab33.png

تعديل مشروع "برمجة تطبيقات Google"

  • غيِّر الدليل الحالي في الوحدة الطرفية المحلية إلى issue-management/1-baseline. وهي تحتوي على رمز المصدر. قبل إرسال رمز المصدر إلى مشروع "برمجة تطبيقات Google"، يجب ضبط بعض الإعدادات.

ضبط رمز المصدر

  1. اضبط ثابت JSON المُسمّى CHAT_CREDENTIALS في ملف Configuration.js على محتوى ملف المفتاح الخاص الذي نزّلته سابقًا.

d721f6bff73c5304.png

  1. في Google Cloud Console، انقر على رمز القائمة أيضا >. إدارة الهوية وإمكانية الوصول المشرف > الإعدادات

  1. انسخ رقم تعريف المشروع.

82592fa0bd113469.png

  1. اضبط ثابت السلسلة المُسمّى PROJECT_ID في ملف Configuration.js على رقم تعريف المشروع.

383cee561130ceba.png

ضبط إعدادات clasp

لإعداد إعدادات clasp من أجل نقل رمز المصدر إلى مشروع "برمجة تطبيقات Google" الصحيح، اتّبِع الخطوات التالية:

  1. في وحدة تحكُّم "برمجة تطبيقات Google"، اختَر مشروعك.
  2. اختَر إعدادات المشروع (Project Settings).
  3. ضمن أرقام التعريف، انقر على نسخ.

20ea033b6de882c6.png

  1. في الدليل الحالي، أنشِئ ملف .clasp.json.
  2. استبدِل <your-script-id> برقم التعريف المنسوخ.
  3. انسخ النتيجة إلى ملف .clasp.json.
  4. احفظ ملف .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.

تجربتها

  1. في Google Chat، أرسِل "Hello!" في رسالة مباشرة إلى التطبيق. لا يستجيب التطبيق، ولكن تظهر رسالة تطلب منك إجراء الإعداد.

4c1fc68121dcffed.png

  1. انقر على إعداد.
  2. اختَر حسابك على Google.
  3. المصادقة.
  4. يُرجى مراجعة التطبيق والسماح بالوصول إليه.

4a2fd7ac5918bf1a.png

في حال إتمام الإجراء، سترى شاشة تأكيد أساسية على صفحة الويب وردًّا فعليًا من التطبيق على رسالتك الأصلية.

acb9065568fe47d2.png

2d6ef9c62f47e082.png

  1. يمكنك إرسال رسالة مباشرة أخرى إلى التطبيق، ولكن باستخدام أمر الشرطة المائلة /create.

be3f3c6eb0f929c1.png

  1. في مربّع الحوار، اضبِط العنوان على Issue Title 1.
  2. اضبط الوصف على المشكلة Description 1.
  3. انقر على إنشاء.

22efdecff4601417.png

وينفِّذ التطبيق ما يلي:

  1. يُستخدم لإغلاق مربع الحوار.
  2. إنشاء مساحة مخصّصة للمسألة التي تم إنشاؤها حديثًا بالعنوان نفسه
  3. الانضمام إلى المساحة التي تم إنشاؤها حديثًا
  4. يتم إرسال رسالة تحتوي على وصف المشكلة في المساحة التي تم إنشاؤها حديثًا.
  5. تُرسل رسالة مباشرة إليك تحتوي على رابط إلى المساحة التي تم إنشاؤها حديثًا.

3253cec2392e281f.png

  1. في المساحة التي تم إنشاؤها حديثًا، أرسِل رسالة تحتوي على أمر الشرطة المائلة /close ودرجة الدقة، مثل Not reproducible.

132cc4acfc10b98c.png

وينفِّذ التطبيق ما يلي:

  1. ينشئ مستند تقرير في "مستندات Google".
  2. يرسل رسالة إلى المساحة المخصّصة للمشكلة مع رابط إلى مستند التقرير الذي تم إنشاؤه حديثًا.

2d127c63518673b2.png

  1. افتح مستند التقرير. وهي تتضمّن معلومات أساسية وسجلّاً وملخّصًا.

9aea694937f2f3ed.png

4. اختياري: التطبيق 1: إضافة الصفحة الرئيسية للتطبيق

مراجعة المفاهيم

الصفحة الرئيسية للتطبيق هي رسالة بطاقة قابلة للتخصيص يرسلها تطبيق Chat إلى المستخدم عندما يصل إلى علامة التبويب الصفحة الرئيسية من رسالة مباشرة باستخدام تطبيق Chat. ويُستخدَم هذا عادةً لعرض مستندات التطبيق أو نظرة عامة. من الناحية الفنية، هناك حدث مخصّص لمعالجته يستند إلى المبادئ الأساسية نفسها المستخدَمة في رسائل البطاقات.

65f56f70f67a32e4.png

خطوات مراجعة

إدارة المشاكل

10663f5fc107fb3f.png

رمز المصدر الخاص بالمراجعة

يجب تعديل مشروع "برمجة تطبيقات 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، اتّبِع الخطوات التالية:

  1. ضمن قسم الميزات التفاعلية، ضع علامة في مربّع الاختيار الصفحة الرئيسية لتطبيق الدعم.

97159c1c69ca8303.png

في بيئتك المحلية، اتبع الخطوات التالية:

  1. تغيير الدليل الحالي في الوحدة الطرفية إلى issue-management/2-app-home يحتوي على رمز المصدر الذي تحتاج إلى استخدامه.
  2. انسخ الملف issue-management/1-baseline/.clasp.json إلى الدليل الحالي.
  3. انسخ الملف issue-management/1-baseline/Configuration.js إلى الدليل الحالي لكي يحل محل الملف الحالي.
  4. شغِّل الأمر التالي:
clasp push

التجربة الآن

في Google Chat، اتّبِع الخطوات التالية:

  1. يمكنك إرسال رسالة مباشرة إلى التطبيق باستخدام أمر الشرطة المائلة /create. يفتح التطبيق مربع حوار.
  2. اضبط العنوان على Issue Title 2.
  3. اضبط الوصف على المشكلة Description 2.
  4. انقر على إنشاء.

3b2a8690e758f965.png

  1. اختَر علامة التبويب الصفحة الرئيسية من مساحتك باستخدام تطبيق Google Chat. يمكنك الاطّلاع على تفاصيل المشاكل التي أنشأتها.

ed8e32da0e6f2ac6.png

5- اختياري: التطبيق 1: إضافة ميزة "مراقبة المساحة"

مراجعة المفاهيم

نشر/اشتراك

النشر/الاشتراك هو خدمة مراسلة غير متزامنة وقابلة للتوسع تفصل بين الخدمات التي تنتج رسائل عن الخدمات التي تعالج هذه الرسائل. تتيح لك ميزة "النشر/الاشتراك" إنشاء أنظمة لمنتجي ومستهلكي الأحداث، ويُطلق عليها اسم الناشرون والمشتركون. يتواصل الناشرون مع المشتركين بشكل غير متزامن عن طريق بث الأحداث، بدلاً من استدعاءات الإجراءات عن بُعد المتزامنة.

يرسل الناشرون الأحداث إلى خدمة النشر/الاشتراك بغض النظر عن طريقة أو وقت معالجة هذه الأحداث. بعد ذلك، توفّر ميزة "النشر/الاشتراك" الأحداث لجميع الخدمات التي تتفاعل معها. في الأنظمة التي تتواصل من خلال استدعاء إجراء عن بُعد، على الناشرين انتظار وصول المشتركين للبيانات. ومع ذلك، يؤدي الدمج غير المتزامن في النشر/الاشتراك إلى زيادة مرونة النظام الكلي وقوته.

الموضوع: مورد مُسمّى يمثّل خلاصة من الرسائل يجب إنشاء موضوع قبل أن تتمكن من نشره أو الاشتراك فيه.

الاشتراك: لتلقّي رسائل تم نشرها في موضوع معيّن، عليك إنشاء اشتراك في ذلك الموضوع. يتلقى عميل المشترك الرسائل المنشورة حول الموضوع ويعالجها. يمكن أن يتضمّن الموضوع اشتراكات متعددة، ولكن ينتمي اشتراك معيّن إلى موضوع واحد.

فعاليات Google Workspace

تمثّل أحداث Google Workspace التغييرات في موارد Google Workspace، مثل وقت إنشاء الموارد أو تعديلها أو حذفها. يمكن للتطبيقات الاشتراك في موارد Google Workspace لتلقّي الأحداث ذات الصلة ومعالجتها بشكل غير متزامن.

7816e477b112bfb6.png

في ما يلي الطريقة التي توفِّر بها واجهة برمجة التطبيقات Google Workspace Events API الأحداث لأحد التطبيقات من خلال الاشتراك:

  1. يشترك التطبيق في مورد في تطبيق Google Workspace، مثل مساحة.
  2. يتغير المورد الذي اشترك التطبيق فيه.
  3. يوفّر تطبيق Google Workspace حدثًا لموضوع في النشر/الاشتراك، والذي يعمل كنقطة نهاية للإشعارات لاشتراك التطبيق في Google Workspace. يحتوي الحدث على بيانات حول ما تم تغييره في المورد.
  4. يعالج التطبيق رسالة النشر/الاشتراك التي تحتوي على الحدث، ويتخذ الإجراء اللازم، إذا لزم الأمر.

خطوات مراجعة

إنشاء مشكلة (تعديل)

6d7a9d7a68666a80.png

تحديد وحلّ المشاكل المتعلّقة بالمساحة المخصّصة (تحديث)

17e60f052f222456.png

إغلاق المشكلة من المساحة المخصّصة (تحديث)

742d490ea0b6fe3a.png

معالجة الاشتراكات

de3017100dec6401.png

رمز المصدر الخاص بالمراجعة

يجب تعديل مشروع "برمجة تطبيقات 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

تفعيل واجهات برمجة التطبيقات

  1. في وحدة تحكُّم Google Cloud، فعِّل أحداث Google Workspace وPubSub.

  1. انقر على رمز القائمة 🥭 >. واجهات برمجة التطبيقات الخدمات > واجهات برمجة التطبيقات المفعّلة الخدمات ثم التأكد من تفعيل كلتا الخدمتين.

بدء الاشتراك

يجب إنشاء موضوع نشر/اشتراك والاشتراك فيه كي يتم نشر جميع أحداث Workspace.

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. الانتقال إلى رمز القائمة ⋮ > نشر/اشتراك > المواضيع:

  1. انقر على إنشاء موضوع.
  2. اضبط رقم تعريف الموضوع على workspace-events.
  3. ضَع علامة في مربّع الاختيار إضافة اشتراك تلقائي.
  4. انقر على إنشاء.

b39f9a0aec7c9939.png

لمنح Google Chat إذن الوصول لنشر رسائل النشر/الاشتراك في الموضوع الذي تم إنشاؤه حديثًا، يُرجى اتّباع الخطوات التالية:

  1. اختَر الموضوع من القائمة.
  2. اختَر علامة التبويب الأذونات.
  3. إضافة chat-api-push@system.gserviceaccount.com إلى قواعد رئيسية جديدة
  4. اختَر الناشر/الاشتراكات للدور الدور.
  5. انقر على حفظ.

8d4016c37532503.png

تعديل مشروع "برمجة تطبيقات Google"

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. الانتقال إلى رمز القائمة ⋮ > إدارة الهوية وإمكانية الوصول المشرف > الإعدادات

  1. انسخ رقم تعريف المشروع.

82592fa0bd113469.png

في بيئتك المحلية، اتبع الخطوات التالية:

  1. تغيير الدليل الحالي في الوحدة الطرفية إلى issue-management/3-message-monitoring يحتوي على رمز المصدر الذي تحتاجه.
  2. اضبط ثابت السلسلة المُسمّى PROJECT_ID في ملف Configuration.js على رقم تعريف المشروع المنسوخ.
  3. اضبط ثابت JSON المُسمّى CHAT_CREDENTIALS في ملف Configuration.js على محتوى ملف المفتاح الخاص الذي نزّلته سابقًا.
  4. انسخ الملف issue-management/2-app-home/.clasp.json إلى الدليل الحالي.
  5. شغِّل الأمر التالي:
clasp push

التجربة الآن

في Google Chat، اتّبِع الخطوات التالية:

  1. يمكنك إرسال رسالة مباشرة إلى التطبيق باستخدام أمر الشرطة المائلة /create. يفتح التطبيق مربع حوار.
  2. اضبط العنوان على Issue Title 3.
  3. اضبط الوصف على المشكلة Description 3.
  4. انقر على إنشاء.
  5. في المساحة التي تم إنشاؤها حديثًا، أرسِل بعض الرسائل التي تناقش المشكلة.
  6. أرسِل رسالة تحتوي على أمر الشرطة المائلة /close ودرجة الدقة، مثل Fixed.

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. الانتقال إلى رمز القائمة ⋮ > نشر/اشتراك > الاشتراكات:

  1. اختَر الاشتراك workspace-events-sub.
  2. اختَر علامة التبويب الرسائل.
  3. انقر على سحب. يعرض الجدول الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.

82631c9792d83889.png

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. اختَر محرِّر.
  3. اختَر الملف WorkspaceEvent.gs.
  4. اختَر processSubscription في القسم تشغيل.
  5. انقر على Run.سيظهر لك من سجلّ التنفيذ أنّه تمت معالجة الرسائل.

c612e8fa2bd0a163.png

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. الانتقال إلى رمز القائمة ⋮ > نشر/اشتراك > الاشتراكات:

  1. اختَر الاشتراك workspace-events-sub.
  2. اختَر علامة التبويب الرسائل.
  3. انقر على سحب. لم يعُد الجدول يعرض الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.

e185454cac862a7b.png

  • في Google Chat، في المساحة المخصّصة للمشكلة الثالثة التي أنشأتها باستخدام أمر الشرطة المائلة /create، أرسِل بضع رسائل أخرى تناقش المشكلة.

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. الانتقال إلى رمز القائمة ⋮ > نشر/اشتراك > الاشتراكات:

  1. اختَر الاشتراك workspace-events-sub.
  2. اختَر علامة التبويب الرسائل.
  3. انقر على سحب. لا يعرض الجدول الرسائل ذات الصلة بما أرسلته إلى المساحة التي تم إنشاؤها حديثًا.

6- اختياري: التطبيق 1: إضافة مساعدة حول الشمولية

مراجعة المفاهيم

إنّ الطلبات الموجَّهة إلى الذكاء الاصطناعي التوليدي هي فن صياغة تعليمات أو أسئلة لتوجيه نموذج الذكاء الاصطناعي التوليدي نحو النوع المحدّد من النتائج المطلوبة. من الممارسات الشائعة فرض قيود على الإجابات عن طريق إضافة القواعد والشروط في الطلبات. يمكن أن يساعد ذلك في جعل المخرجات آمنة وملائمة ومتسقة ومتوافقة مع التوقعات.

خطوات مراجعة

معالجة الاشتراكات (تعديل)

780d0802f77dd180.png

رمز المصدر الخاص بالمراجعة

يجب تعديل مشروع "برمجة تطبيقات 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"

في بيئتك المحلية، اتبع الخطوات التالية:

  1. تغيير الدليل الحالي في الوحدة الطرفية إلى issue-management/4-inclusivity-help إنه يحتوي على رمز المصدر الذي تحتاجه.
  2. انسخ الملف issue-management/3-message-monitoring/.clasp.json إلى الدليل الحالي.
  3. انسخ الملف issue-management/3-message-monitoring/Configuration.js إلى الدليل الحالي لكي يحل محل الملف الحالي.
  4. شغِّل الأمر التالي:
clasp push

التجربة الآن

في Google Chat، اتّبِع الخطوات التالية:

  1. يمكنك إرسال رسالة مباشرة إلى التطبيق باستخدام أمر الشرطة المائلة /create. يفتح التطبيق مربع حوار.
  2. اضبط العنوان على Issue Title 4.
  3. اضبط الوصف على المشكلة Description 4.
  4. انقر على إنشاء.
  5. في المساحة التي تم إنشاؤها حديثًا، أرسِل "It happened to me last week as well".

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. اختَر محرِّر.
  3. اختَر الملف WorkspaceEvent.gs.
  4. اختَر processSubscription في القسم تشغيل.
  5. انقر على تشغيل. سترى من خلال سجلّ التنفيذ أنّه تمت معالجة الرسائل.

في Google Chat، اتّبِع الخطوات التالية:

  1. يُرجى ملاحظة أنّ التطبيق لم يرسل أي مساعدة بخصوص الشمولية في المساحة التي تم إنشاؤها حديثًا.
  2. في المساحة التي تم إنشاؤها حديثًا، أرسِل الرسالة "I had to add myself from the master to fix it".

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. اختَر محرِّر.
  3. اختَر الملف WorkspaceEvent.gs.
  4. اختَر processSubscription في القسم تشغيل.
  5. انقر على تشغيل. سترى من خلال سجلّ التنفيذ أنّه تمت معالجة الرسائل. في Google Chat، أرسل التطبيق رسالة مساعدة بشأن الشمولية في المساحة التي تم إنشاؤها حديثًا.

7936342847acbe2d.png

7. اختياري: التطبيق 1: إضافة الإعدادات المفضّلة

.

مراجعة المفاهيم

أداة الملحقات هي تطبيق مصغّر بلا حدود متصل بأسفل رسالة أرسلها أحد التطبيقات. يُستخدم هذا عادةً لتفعيل التفاعلات السريعة من المستخدم في السياق المحدد للرسائل. من الناحية الفنية، تستند إلى المبادئ الأساسية نفسها لأزرار البطاقات.

eebe88238f6b13f.png

خطوات مراجعة

إيقاف المساعدة بخصوص الشمولية

1bb7a8592ee6221e.png

رمز المصدر الخاص بالمراجعة

يجب تعديل مشروع "برمجة تطبيقات 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"

في بيئتك المحلية، اتبع الخطوات التالية:

  1. تغيير الدليل الحالي في الوحدة الطرفية إلى issue-management/5-disable-help يحتوي على رمز المصدر الذي تحتاجه.
  2. انسخ الملف issue-management/4-inclusivity-help/.clasp.json إلى الدليل الحالي.
  3. انسخ الملف issue-management/4-inclusivity-help/Configuration.js إلى الدليل الحالي لكي يحل محل الملف الحالي.
  4. شغِّل الأمر التالي:
clasp push

التجربة الآن

إيقاف المساعدة

  • في Google Chat، وفي المساحة المخصّصة للمشكلة الرابعة التي أنشأتها باستخدام أمر الشرطة المائلة /create، أرسِل الرسالة I had to add myself from the master to fix.

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. اختَر محرِّر.
  3. اختَر الملف WorkspaceEvent.gs.
  4. اختَر processSubscription في القسم تشغيل.
  5. انقر على تشغيل. سترى من خلال سجلّ التنفيذ أنّه تمت معالجة الرسائل.

في Google Chat، اتّبِع الخطوات التالية:

  1. يُرجى العلم أنّ التطبيق أرسل رسالة تتضمّن مساعدة شاملة إلى المساحة المخصّصة للمشكلة في التطبيق المصغّر للملحق.
  2. انقر على التطبيق المصغّر لإيقاف ميزة المساعدة الشاملة.

de722cff1928dec9.png

التحقّق من الإيقاف

  • في Google Chat، وفي المساحة المخصّصة للمشكلة الرابعة التي أنشأتها باستخدام أمر الشرطة المائلة /create، أرسِل الرسالة I had to add myself from the master to fix.

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. اختَر محرِّر.
  3. اختَر الملف WorkspaceEvent.gs.
  4. اختَر processSubscription في القسم تشغيل.
  5. انقر على تشغيل. سترى من خلال سجلّ التنفيذ أنّه تمت معالجة الرسائل. في Google Chat، لم يرسل التطبيق رسالة تتضمّن مساعدة شاملة إلى المساحة المخصّصة للمشكلة لأنّه تم إيقافها.

347d659db53b73e9.png

8. التطبيق 2: إنشاء

مراجعة المفاهيم

تطوير الذكاء الاصطناعي التوليدي

إنّها تهدف إلى جعل نماذج الذكاء الاصطناعي أكثر واقعية وموثوقة من خلال ربطها بمصادر معرفة يمكن التحقّق منها. تساعد هذه التقنية على منع الذكاء الاصطناعي من اختراع المعلومات ويمكن أن تساعد في جعل الردود ذات صلة بسياق المحتوى وتكون أقل انحيازًا.

اللغة الطبيعية

يشير ذلك المصطلح إلى أي لغة يتحدث بها البشر أو يكتبونها للتواصل اليومي، على عكس اللغات الاصطناعية أو المستنِدة إلى الكمبيوتر.

التخزين في السحابة الإلكترونية

تتيح خدمة Cloud Storage إمكانية التخزين على مستوى العالم واسترداد أي كمية من البيانات في أي وقت. ويمكن استخدامها في مجموعة من السيناريوهات، بما في ذلك عرض محتوى موقع إلكتروني أو تخزين البيانات لأرشفتها واستعادتها في حالات الكوارث أو توزيع كائنات بيانات كبيرة على المستخدمين من خلال التنزيل المباشر.

مخزن بيانات Dialogflow CX

يمكن دمج Dialogflow CX مع مخازن البيانات التي هي عبارة عن مجموعات من المواقع الإلكترونية والمستندات التي يستخدمها وكلاء تخزين البيانات للعثور على إجابات لأسئلة المستخدمين النهائيين من بيانات محدّدة. عند طرح سؤال معيّن، يبحث وكيل تخزين البيانات عن إجابة من محتوى المصدر المحدّد ويلخّص النتائج في ردّ مترابط. كما يوفر روابط داعمة لمصادر الرد للمستخدم النهائي لمعرفة المزيد.

مراجعة البنية

9d3342d12f3b4dda.png

تم إنشاء تطبيق Google Chat هذا باستخدام Dialogflow CX ويعمل على النحو التالي:

  1. يُرسِل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
  2. يعالج التطبيق، وهو وكيل Dialogflow CX والمرتبط بمشروع على Google Cloud.
  3. يتكامل التطبيق مع مخزن بيانات موجود في Cloud Storage.
  4. يرسل التطبيق ردًا متزامنًا، إما في رسالة مباشرة أو في المساحة الأصلية.

مراجعة المسارات

الإجابة عن السؤال

aad9fb5a7ca48956.png

رمز المصدر الخاص بالمراجعة

والمصدر الوحيد الذي تحتاجه ليس التعليمات البرمجية، بل البيانات التي تستخدمها في التأسيس.

google-chat-overview.pdf

يحتوي على المعلومات غير المنظَّمة لتطبيقات Google Chat، وهي نسخة مطبوعة من صفحة من الموقع الإلكتروني لمطوّري Google Workspace.

e9b91c4587b1a3a0.png

تعديل مشروع على Google Cloud

في وحدة التحكّم في Google Cloud، اتّبِع الخطوات التالية:

  1. تفعيل واجهات برمجة تطبيقات Dialogflow وCloud Storage

  1. فعِّل واجهة برمجة تطبيقات Vertex AI Agent Builder API.

  1. انقر على رمز القائمة 🥭 >. واجهات برمجة التطبيقات الخدمات > واجهات برمجة التطبيقات المفعّلة الخدمات ثم التأكُّد من تفعيل جميع واجهات برمجة التطبيقات.

.

إنشاء وكيل تخزين بيانات Dialogflow CX

بدء استخدام بيانات المعرفة

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. التخزين السحابي > الحزم:

4f15978ae9f1b687.png

  1. انقر على إنشاء.
  2. اضبط الاسم على gchat-knowledge.
  3. انقر على إنشاء.

6b38c6d4d2c41bba.png

  1. اختَر الحزمة gchat-knowledge.
  2. انقر على تحميل الملفات.
  3. اختَر ملف knowledge-app/grounding/google-chat-overview.pdf من بيئتك المحلية.

df89acb22e1762af.png

إنشاء تطبيق

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > التطبيقات:

  1. انقر على تطبيق جديد.
  2. اختَر نوع المحادثة.

44276003074bcf14.png

  1. اضبط السمة Company name على اسم شركتك.
  2. ضبط السمة Agent name على knowledge
  3. انقر على متابعة.

c4fedfd7556f723b.png

  1. انقر على إنشاء مخزن بيانات جديد.
  2. اختَر Cloud Storage كمصدر البيانات.

6e2440ecf0f8f9bd.png

  1. اختَر ملف.
  2. انقر على تصفّح.
  3. اختَر الملف google-chat-overview.pdf.
  4. انقر على متابعة.
  5. اضبط اسم مخزن البيانات على gchat-knowledge-ds.
  6. انقر على إنشاء.

a675df7490b83900.png

  1. اختَر مخزن بيانات gchat-knowledge-ds في الجدول.
  2. انقر على إنشاء.

f121d580771ed96.png

  1. بعد مرور بضع دقائق، انقر على القائمة ⋮ > أداة إنشاء الوكلاء > التطبيقات وتلاحظ إمكانية اطّلاعك على التطبيق.

d929a7431dd84968.png

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > مخازن البيانات:

  1. انقر على مخزن بيانات gchat-knowledge-ds. يبلغ عدد المستندات 1، ما يعني أنّها جاهزة.

558319790a0accf2.png

إكمال التطبيق واختباره

في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:

  1. اختَر مشروعك على Google Cloud.
  2. اختَر وكيل المعرفة.

ca9b2fb4be92e8e4.png

  1. اختَر إعدادات الوكيل >. الذكاء الاصطناعي التوليدي > الوكيل التوليدي:
  2. بدِّل النموذج من Text Bison إلى Gemini Pro.
  3. انقر على حفظ.

68cc4713ec9b25a0.png

  1. انقر على وكيل اختباري.
  2. إرسال What is Google Chat? يستجيب موظّف الدعم بعبارة ذات معنى.

8e3a2cb02469041a.png

دمج تطبيق Google Chat

في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:

  1. اختَر مشروعك على Google Cloud.
  2. في صف وكيل المعرفة، انقر على 1e7ede7amae4aa3c.png >. نسخ الاسم

e19f61185158110d.png

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انتقِل إلى إعدادات Google Chat API.

  1. ضمن إعدادات الربط، اختَر Dialogflow.
  2. ضمن إعدادات Dialogflow، اختَر Dialogflow CX.
  3. اضبط اسم مورد الوكيل أو البيئة على اسم الوكيل الذي نسخته.
  4. أزِل الأمرَين بشرطة مائلة.

505ff39a50880904.png

  1. في Google Chat، أرسِل "What is Google Chat?" في رسالة مباشرة إلى تطبيق Google Chat. يستجيب موظّف الدعم بعبارة ذات معنى.

abda9e43b81fb0ea.png

9. اختياري: التطبيق 2: إضافة مصادر

مراجعة المفاهيم

الردّ التلقائي على الويب من Dialogflow CX

يشير ذلك المصطلح إلى خدمة تستضيف منطق الأنشطة التجارية أو تطلب خدمات أخرى. خلال جلسة Dialogflow CX، يمكن أن تعتمد الردود التلقائية على الويب على البيانات المستخرجة من خلال المعالجة باللغات الطبيعية لإنشاء ردود ديناميكية أو التحقّق من صحة البيانات المجمّعة أو تفعيل الإجراءات في الخلفية.

الوظائف السحابية

تُعدّ وظائف السحابة الإلكترونية رائعة لإنشاء خلفيات بدون خادم، وإجراء معالجة للبيانات في الوقت الفعلي، وإنشاء تطبيقات ذكية. لا توجد خوادم لتوفيرها أو إدارتها أو تصحيحها أو تحديثها. ويتم توسيع نطاقها تلقائيًا، كما أنها متاحة بدرجة كبيرة وتتحمّل الأخطاء.

مراجعة المسارات

الإجابة عن السؤال (تعديل)

92767c07c7b252aa.png

رمز المصدر الخاص بالمراجعة

رمز المصدر الوحيد الذي تحتاجه هو وظيفة تعديل ردود موظّف الدعم لتتوافق مع رسائل 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، اتّبِع الخطوات التالية:

  1. تفعيل Cloud Build وCloud Functions وCloud Logging وواجهة برمجة التطبيقات Artifact Registry وCloud Run API.

  1. انقر على رمز القائمة 🥭 >. واجهات برمجة التطبيقات الخدمات > واجهات برمجة التطبيقات المفعّلة الخدمات ثم التأكُّد من تفعيل واجهات برمجة التطبيقات.

تعديل وكيل تخزين بيانات Dialogflow CX

عليك تفعيل دالة Cloud وتعديل الردّ التلقائي على الويب Dialogflow CX لتشغيله باستخدام مصادر متعددة إن أمكن.

عرض مصادر متعددة

وفقًا للإعدادات التلقائية، لا يعرض وكيل تخزين البيانات الجديد سوى مصدر واحد كحد أقصى، ولكن يمكنك تغييره لعرض المزيد.

في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:

  1. اختَر مشروعك على Google Cloud.
  2. اختَر وكيل المعرفة.
  3. اختَر الصفحة الرئيسية.
  4. اختَر تعديل مخازن البيانات.
  5. ضمن قسم ردود الوكيل، اضبط خيارات الاستجابة في مخزن البيانات على 5.
  6. انقر على حفظ.

f5932d03057df645.png

بدء استخدام وظيفة السحابة الإلكترونية

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. وظائف السحابة الإلكترونية:

  1. انقر على إنشاء دالة.
  2. ضمن الأساسيات، اضبط الاسم على function-1.
  3. ضمن المصادقة، انقر على زر الاختيار السماح بالاستدعاءات التي لم تتم مصادقتها.
  4. ضمن وقت التشغيل والإنشاء والاتصالات وإعدادات الأمان، اضبط الحد الأقصى لعدد النُسخ الافتراضية على 3.
  5. انقر على التالي.

bd3790a9285f9c07.png

  1. اضبط نقطة الدخول على agent-response-adapter.
  2. استبدِل المحتوى التلقائي بالملفات الموجودة في دليل knowledge-app/agent-response-adapter.
  3. انقر على نشر.

b379bb8ca0fc1079.png

  1. انسخ عنوان URL أثناء الانتظار بضع دقائق حتى يتم نشر الدالة.

eaae08cf048b9b1c.png

بدء الرد التلقائي على الويب

عليك ضبط وكيل Dialogflow CX لاستخدام ردّ تلقائي على الويب يؤدي إلى تفعيل الدالة المنشورة حديثًا.

في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:

  1. اختَر مشروعك على Google Cloud.
  2. اختَر وكيل المعرفة.
  3. اختَر إدارة >. الردود التلقائية على الويب > إنشاء:
  4. اضبط الاسم المعروض على Google Chat Response Adapter.
  5. اضبط عنوان URL للردّ التلقائي على الويب على عنوان URL الذي نسخته سابقًا.
  6. انقر على حفظ.

5f3c6804d52b87c1.png

  1. انقر على إنشاء.
  2. اختَر الصفحة الرئيسية.
  3. اختَر تعديل مخازن البيانات.
  4. ضمن إعدادات الردّ التلقائي على الويب، انقر على مفتاح التبديل تفعيل الردّ التلقائي على الويب.
  5. اختَر مهايئ استجابة Google Chat للردّ التلقائي على الويب.
  6. اضبط العلامة على arbitrary_tag.
  7. انقر على حفظ.

442fcaaec9b8f2e3.png

تطبيق تجريبي

  • في Google Chat، أرسِل "What is Google Chat?" في رسالة مباشرة إلى تطبيق Google Chat. يردّ موظّف الدعم بعبارات مفيدة وبطاقة تتضمّن مصادر، إن توفّرت.

9468866bfe848bb8.png

10. التطبيق 3: إنشاء

مراجعة المفاهيم

التفاعلات الحوارية

هي عمليات التبادل المتبادلة للمعلومات أو الأفكار بين شخصين أو أكثر من خلال اللغة الطبيعية. وهذا يتناقض مع الواجهات التقنية التي غالبًا ما تعتمد على عمليات تبادل عديمة الحالة ومنظّمة للغاية وغير متساهلة.

مواصفات OpenAPI

وتوفّر هذه الواجهة وسيلة متسقة لنقل المعلومات خلال كل مرحلة من مراحل نشاط واجهة برمجة التطبيقات. وهي لغة مواصفات لواجهات برمجة تطبيقات HTTP تحدد البنية والبنية بطريقة لا تتقيّد بلغة البرمجة التي يتم إنشاء واجهة برمجة التطبيقات بها. عادةً ما تتم كتابة مواصفات واجهة برمجة التطبيقات بتنسيق YAML أو JSON، ما يتيح سهولة مشاركة واستخدام المواصفات.

وكيل Dialogflow CX

الوحدة الأساسية لتطبيقات الوكيل عادة ما يكون لتطبيق الوكيل العديد من الوكلاء، حيث يتم تحديد كل وكيل للتعامل مع مهام معينة. يتم تقديم بيانات الوكيل إلى النموذج اللغوي الكبير، حتى تحتوي على المعلومات التي يحتاجها للإجابة عن الأسئلة وتنفيذ المهام. ويمكن لكل وكيل تقديم معلومات أو إرسال طلبات إلى خدمات خارجية أو تأجيل معالجة المحادثة إلى مسار Dialogflow CX أو وكيل آخر لمعالجة المهام الفرعية.

أداة Dialogflow CX

تُستخدَم الأدوات لربط تطبيقات الوكيل بالأنظمة الخارجية. ويمكن لهذه الأنظمة زيادة المعرفة بتطبيقات الوكيل وتفعيلها لتنفيذ المهام المعقّدة بكفاءة.

مراجعة البنية

9d3342d12f3b4dda.png

تم إنشاء تطبيق Google Chat هذا باستخدام Dialogflow CX ويعمل على النحو التالي:

  1. يُرسِل المستخدم رسالة إلى التطبيق، إما في رسالة مباشرة أو في مساحة.
  2. يعالج التطبيق، وهو وكيل Dialogflow CX والمرتبط بمشروع على Google Cloud.
  3. يتكامل التطبيق مع وكيل.
  4. يرسل التطبيق ردًا متزامنًا، إما في رسالة مباشرة أو في المساحة الأصلية.

مراجعة المسارات

جمع المراجعات

a67a5b8b513bfc2c.png

رمز المصدر الخاص بالمراجعة

رمز المصدر الوحيد الذي تحتاجه هو الوظيفة لمحاكاة خدمة الخلفية التي يستخدمها الوكيل كأداة.

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، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. وظائف السحابة الإلكترونية:

  1. انقر على إنشاء دالة.
  2. ضمن الأساسيات، اضبط الاسم على function-2.
  3. ضمن المصادقة، انقر على زر الاختيار السماح بالاستدعاءات التي لم تتم مصادقتها.
  4. ضمن وقت التشغيل والإنشاء والاتصالات وإعدادات الأمان، اضبط الحد الأقصى لعدد النُسخ الافتراضية على 3.
  5. انقر على التالي.

e8cf0ee7441bf634.png

  1. اضبط نقطة الدخول على feedback-app-backend.
  2. استبدِل المحتوى التلقائي بالملفات الموجودة في دليل feedback-app.
  3. انقر على نشر.

bdb5cf9f503aa7f6.png

  1. انسخ عنوان URL أثناء الانتظار بضع دقائق حتى يتم نشر الدالة.

إنشاء تطبيق وكيل Dialogflow CX

إنشاء تطبيق

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > التطبيقات:

  1. انقر على تطبيق جديد.
  2. اختَر موظّف دعم.
  3. اضبط الاسم المعروض على Feedback App.
  4. انقر على إنشاء.

7ef3dbacee96c5aa.png

بدء الأداة

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > التطبيقات:

  1. اختَر وكيل تطبيق الملاحظات والآراء.
  2. انقر على الأدوات >. + إنشاء:
  3. اضبط الاسم على review.
  4. اختر OpenAPI.
  5. اضبط 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.
  1. استبدِل $URL في ملف feedback-app/service-openapi.yaml بعنوان URL الذي نسخته سابقًا.
  2. اضبط YAML Schema على المحتوى المعدَّل في ملف feedback-app/service-openapi.yaml.
  3. انقر على حفظ.

58085d6d56b603f7.png

إعداد موظّف الدعم

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > التطبيقات:

  1. اختَر وكيل تطبيق الملاحظات والآراء.
  2. اختَر الوكلاء > الوكيل التلقائي التوليدي
  3. اضبط اسم الوكيل على Feedback collector.
  4. اضبط 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.
  1. اضبط التعليمات على القيمة التالية:
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.
  1. انقر على حفظ.

ebee7fdfa826b487.png

تطبيق تجريبي

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. أداة إنشاء الوكلاء > التطبيقات:

  1. اختَر وكيل تطبيق الملاحظات والآراء.
  2. انتقِل إلى وكيل المعاينة.
  3. ضِمن الوكيل، اختَر أداة تجميع الملاحظات.
  4. ضمن اختيار نموذج من إنشاء الذكاء الاصطناعي التوليدي، انقر على gemini-pro.
  5. أرسِل الرسالة Hello! للبدء.

90ca8cb7b2c1cb4b.png

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. وظائف السحابة الإلكترونية:

  1. حدد الوظيفة-2 > السجلّات: تُظهر بعض السجلات Google-Dialogflow كمتصل.

48bfdf1788004d18.png

دمج تطبيق Google Chat

في وحدة تحكُّم Dialogflow CX، اتّبِع الخطوات التالية:

  1. اختَر مشروعك على Google Cloud.
  2. انقر على قائمة الإجراءات لوكيل Feedback App.
  3. انقر على نسخ الاسم.

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انتقِل إلى إعدادات Google Chat API.

  1. اضبط اسم مورد الوكيل أو البيئة على اسم الوكيل الذي نسخته سابقًا.

df16619a1cb85cf8.png

  • في Google Chat، أرسِل "Hello!" في رسالة مباشرة إلى تطبيق Google Chat للبدء. يستجيب الوكيل بشكل مشابه للاختبار من وحدة تحكّم Dialogflow CX.

99a7a0295f122f31.png

11. تَنظيم

حذف مشروع على Google Cloud

لتجنُّب تحمُّل أي رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس التطبيقي حول الترميز، ننصحك بحذف المشروع على Google Cloud.

في وحدة تحكُّم Google Cloud، اتّبِع الخطوات التالية:

  1. انقر على رمز القائمة 🥭 >. إدارة الهوية وإمكانية الوصول المشرف > الإعدادات

  1. انقر على إيقاف التشغيل.
  2. أدخِل رقم تعريف المشروع.
  3. انقر على إيقاف التشغيل على أي حال.

407699a4e03afea6.png

حذف مشروع "برمجة تطبيقات Google"

ننصحك بحذف مشروع "برمجة تطبيقات Google" أيضًا.

في وحدة تحكّم "برمجة تطبيقات Google"، اتّبِع الخطوات التالية:

  1. اختَر مشروعك.
  2. انقر على قائمة الإجراءات.
  3. انقر على إزالة.

fa3a42d7d2201eb9.png

12. تهانينا

تهانينا! لقد أنشأت تطبيقات Google Chat باستخدام Gemini

الخطوات التالية

لقد عرضنا فقط حالات استخدام بسيطة في هذا الدرس التطبيقي حول الترميز، ولكن هناك الكثير من جوانب التوسيع التي يمكنك أخذها في الاعتبار ضمن تطبيقات Google Chat، مثل ما يلي:

  • يمكنك الدمج مع نماذج الذكاء الاصطناعي التوليدي الأخرى، بما في ذلك النماذج المخصّصة.
  • إتاحة أنواع أخرى من الوسائط، مثل الصوت والصورة والفيديو
  • استخدام الوسائط المتعددة:
  • اعتمِد على نوافذ السياق الأطول وحلقات الملاحظات.
  • نشر تطبيقات Google Chat الجاهزة للاستخدام في Marketplace هناك الكثير من الموارد المتاحة للمطوّرين مثل الفيديوهات على YouTube والمواقع الإلكترونية للتوثيق وعيّنات التعليمات البرمجية والبرامج التعليمية.
  • تفعيل Google Chat لمؤسستك. تعمل ميزة وضع الاستيراد على تسهيل البدء.

مزيد من المعلومات