پاسخ دادن به مشکلات با Google Chat،‏ Vertex AI،‏ Apps Script، و اصالت‌سنجی کاربر

این آموزش نشان می‌دهد چگونه برنامه Google Chat بسازید که به حوادث به‌صورت هم‌زمان پاسخ می‌دهد. هنگام پاسخ دادن به یک حادثه، برنامه فضای Chat ایجاد و آن را تکمیل می‌کند، با پیام‌ها، دستورات برنامه، و کادرهای گفتگو، حل‌وفصل حادثه را تسهیل می‌کند، و از هوش مصنوعی برای خلاصه کردن پاسخ حادثه در سند «سندنگار Google» استفاده می‌کند.

حادثه رویدادی است که برای حل آن نیاز به توجه فوری یک تیم از افراد دارد. نمونه‌هایی از حادثه عبارت‌اند از:

  • پرونده‌ای حساس به زمان در پلاتفرم «مدیریت ارتباط با مشتری» (CRM) ایجاد می‌شود که نیاز دارد تیم خدمات برای حل آن با هم مشارکت کنند.
  • سیستمی آفلاین می‌شود و گروهی از مهندسان قابلیت اطمینان سایت (SRE) را مطلع می‌کند تا بتوانند با هم کار کنند و آن را دوباره آنلاین کنند.
  • زلزله‌ای با بزرگی بالا رخ می‌دهد و امدادگران باید پاسخ خود را هماهنگ کنند.

برای اهداف این آموزش گام‌به‌گام، هشدار حادثه زمانی شروع می‌شود که فردی حادثه را با کلیک روی دکمه‌ای در صفحه وب گزارش کند. صفحه وب با درخواست از کاربران برای وارد کردن اطلاعات اولیه حادثه، حادثه‌ای را شبیه‌سازی می‌کند: عنوان، شرح، و نشانی‌های ایمیل پاسخ‌دهندگان.

برنامه Chat مدیریت حادثه را در عمل ببینید:

  • وب‌سایتی که حادثه را شروع می‌کند.
    شکل ۱. وب‌سایتی که در آن می‌توان حادثه‌ای را گزارش کرد.
  • اعلان ایجاد فضای Chat رویداد.
    شکل ۲. اعلان ایجاد فضای گپ حادثه.
  • فضای Chat پاسخ به حادثه.
    شکل ۳. فضای Chat پاسخ به رویداد.
  • حل‌وفصل کردن حادثه با یک فرمان سریع.
    شکل ۴. حل‌وفصل کردن حادثه با یک فرمان سریع.
  • کادر گفتگوی حل‌وفصل حادثه.
    شکل ۵. کادر گفتگوی حل‌وفصل حادثه.
  • سند «سندنگار Google» هم‌رسانی‌شده در فضا برای حل‌وفصل حادثه.
    شکل ۶. سند «سندنگار Google» هم‌رسانی‌شده در فضا برای حل‌وفصل کردن حادثه.
  • سندنگار Google مربوط به حل‌وفصل حادثه خلاصه هوش مصنوعی.
    شکل ۷. سند «سندنگار Google» مربوط به حل‌وفصل حادثه خلاصه هوش مصنوعی.

پیش‌نیازها

اگر نیاز دارید هریک از این پیش‌نیازها برای سازمانتان روشن شود، از سرپرست Google Workspace خود بخواهید آن‌ها را روشن کند:

  • حساب «کسب‌وکار» یا «سازمانی» Google Workspace با دسترسی به Google Chat.
  • برای اینکه دایرکتوری (هم‌رسانی مخاطب) برای Google Workspace روشن باشد. برنامه حادثه از فهرست راهنما برای جستجوی اطلاعات تماس پاسخ‌دهندگان حادثه، مانند نام و نشانی ایمیل، استفاده می‌کند. پاسخ‌دهندگان به رویداد باید کاربرانی با حساب Google Chat در سازمان Google Workspace شما باشند.

اهداف

  • برنامه Chat بسازید که به رخدادها پاسخ دهد.
  • با انجام کارهای زیر به کاربران کمک کنید به رخدادها پاسخ دهند:
    • درحال ایجاد فضاهای پاسخ به حادثه.
    • ارسال پیام‌هایی که حوادث و پاسخ‌ها را خلاصه می‌کنند.
    • پشتیبانی از مشارکت با ویژگی‌های تعاملی برنامه Chat.
  • مکالمه‌ها و راه‌حل‌ها را با Vertex AI خلاصه کنید.

معماری

نمودار زیر معماری منابع Google Workspace و Google Cloud را نشان می‌دهد که برنامه Google Chat پاسخ به حادثه از آن‌ها استفاده می‌کند.

معماری برنامه Google Chat پاسخ به حادثه

معماری نشان می‌دهد که برنامه Google Chat پاسخ به رویداد چگونه رویداد و وضوح را پردازش می‌کند.

  1. کاربری حادثه‌ای را از وب‌سایت خارجی میزبانی‌شده در Apps Script شروع می‌کند.

  2. وب‌سایت یک درخواست ناهمگام HTTP به برنامه Google Chat ارسال می‌کند که آن هم در Apps Script میزبانی می‌شود.

  3. برنامه Google Chat پاسخ به حادثه درخواست را پردازش می‌کند:

    1. خدمات «کیت توسعه نرم‌افزار سرپرست Apps Script» اطلاعات اعضای تیم را، مانند شناسه کاربر و نشانی ایمیل، دریافت می‌کند.

    2. با مجموعه‌ای از درخواست‌های HTTP به Chat API بااستفاده از سرویس پیشرفته Chat در Apps Script، برنامه Google Chat برای پاسخ به حادثه فضای Chat حادثه ایجاد می‌کند، آن را با اعضای تیم تکمیل می‌کند، و پیامی به فضا ارسال می‌کند.

  4. اعضای تیم درباره حادثه در فضای Chat بحث می‌کنند.

  5. یکی از اعضای تیم فرمان سریعی را فرا می‌خواند تا نشان دهد که حادثه حل‌وفصل شده است.

    1. تماس HTTP با Chat API بااستفاده از Apps Script سرویس پیشرفته Chat همه پیام‌های فضای Chat را فهرست می‌کند.

    2. ‫Vertex AI پیام‌های فهرست‌شده را دریافت می‌کند و خلاصه تولید می‌کند.

    3. سرویس Apps Script DocumentApp سند «سندنگار Google» را ایجاد می‌کند و خلاصه Vertex AI را به سند اضافه می‌کند.

    4. برنامه Google Chat پاسخ به حادثه با فراخوانی Chat API پیامی را ارسال می‌کند که پیوندی به خلاصه سند «سندنگار» را هم‌رسانی می‌کند.

آماده کردن محیط

این بخش نحوه ایجاد و پیکربندی پروژه Google Cloud را برای برنامه Chat نشان می‌دهد.

ایجاد پروژه Google Cloud

Google API Console

  1. در «کنسول Google API»، به «منو» > IAM و سرپرست > ایجاد پروژه بروید.

    رفتن به «ایجاد پروژه»

  2. در فیلد نام پروژه، نامی توصیفی برای پروژه خود وارد کنید.

    اختیاری: برای ویرایش شناسه پروژه، روی ویرایش کلیک کنید. شناسه پروژه را نمی‌توان پس‌از ایجاد پروژه تغییر داد، بنابراین شناسه‌ای را انتخاب کنید که در طول عمر پروژه نیازهای شما را برآورده کند.

  3. در فیلد مکان، روی مرور کردن کلیک کنید تا مکان‌های بالقوه برای پروژه‌تان نمایش داده شود. سپس روی انتخاب کلیک کنید.
  4. روی ایجاد کردن کلیک کنید. «کنسول Google API» به صفحه «داشبورد» هدایت می‌شود و پروژه شما ظرف چند دقیقه ایجاد می‌شود.

gcloud CLI

در یکی از محیط‌های توسعه زیر، به Google Cloud CLI (gcloud) دسترسی پیدا کنید:

  • Cloud Shell: برای استفاده از ترمینال آنلاین با gcloud CLI که ازقبل راه‌اندازی شده است، Cloud Shell را فعال کنید.
    فعال کردن Cloud Shell
  • صدف محلی: برای استفاده از محیط توسعه محلی، «رابط خط فرمان gcloud» را نصب و مقداردهی اولیه کنید.
    برای ایجاد پروژه Cloud، از دستور gcloud projects create استفاده کنید:
    gcloud projects create PROJECT_ID
    با تنظیم شناسه برای پروژه‌ای که می‌خواهید ایجاد کنید، PROJECT_ID را جایگزین کنید.

فعال کردن صورت‌حساب برای پروژه Cloud

Google API Console

  1. در «کنسول Google API»، به صورت‌حساب بروید. روی منو > صورت‌حساب > پروژه‌های من کلیک کنید.

    رفتن به «صورت‌حساب برای پروژه‌های من»

  2. در انتخاب سازمان، سازمانی را که با پروژه Google Cloud شما منسوب است انتخاب کنید.
  3. در ردیف پروژه، منو کنش‌ها () را باز کنید، روی تغییر صورت‌حساب کلیک کنید، و حساب Cloud Billing را انتخاب کنید.
  4. روی تنظیم حساب کلیک کنید.

gcloud CLI

  1. برای فهرست کردن حساب‌های صورت‌حساب دردسترس، این دستور را اجرا کنید:
    gcloud billing accounts list
  2. پیوند دادن حساب صورت‌حساب با پروژه Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    جایگزین کردن موارد زیر:

    • ‫PROJECT_ID شناسه پروژه برای پروژه Cloud است که می‌خواهید صورت‌حساب را برای آن فعال کنید.
    • ‫BILLING_ACCOUNT_ID شناسه حساب صورت‌حساب برای پیوند دادن با پروژه Google Cloud است.

فعال کردن میاناهای برنامه‌سازی کاربردی

Google API Console

  1. در «کنسول Google API»، «میانای برنامه‌سازی کاربردی Google Chat»، «میانای برنامه‌سازی کاربردی Google Docs»، «میانای برنامه‌سازی کاربردی Admin SDK»، و «میانای برنامه‌سازی کاربردی Vertex AI» را فعال کنید.

    فعال کردن میاناهای برنامه‌سازی کاربردی

  2. تأیید کنید که میاناهای برنامه‌سازی کاربردی را در پروژه Cloud صحیح فعال می‌کنید، سپس روی بعدی کلیک کنید.

  3. تأیید کنید که درحال فعال کردن «میاناهای برنامه‌سازی کاربردی» صحیح هستید، سپس روی فعال کردن کلیک کنید.

gcloud CLI

  1. درصورت لزوم، پروژه Cloud فعلی را روی پروژه‌ای که با دستور gcloud config set project ایجاد کرده‌اید تنظیم کنید:

    gcloud config set project PROJECT_ID

    PROJECT_ID را با شناسه پروژه پروژه Cloud که ایجاد کرده‌اید جایگزین کنید.

  2. «میانای برنامه‌سازی کاربردی Google Chat»، «میانای برنامه‌سازی کاربردی Google Docs»، «میانای برنامه‌سازی کاربردی Admin SDK»، و «میانای برنامه‌سازی کاربردی Vertex AI» را با فرمان gcloud services enable فعال کنید:

    gcloud services enable chat.googleapis.com docs.googleapis.com admin.googleapis.com aiplatform.googleapis.com

راه‌اندازی اصالت‌سنجی و مجوز

اصالت‌سنجی و صدور مجوز به برنامه Chat اجازه می‌دهد به منابع در Google Workspace و Google Cloud دسترسی داشته باشد تا پاسخ به حادثه را پردازش کند.

در این آموزش گام‌به‌گام، برنامه را به‌صورت داخلی منتشر می‌کنید، بنابراین استفاده از اطلاعات جای‌بان مشکلی ندارد. قبل‌از انتشار برنامه در خارج، اطلاعات جای‌بان را با اطلاعات واقعی برای صفحه موافقت جایگزین کنید.

  1. در «کنسول Google API»، به «منو» > پلاتفرم Google Auth > نمانام‌سازی بروید.

    رفتن به نمانام‌سازی

  2. اگر قبلاً پلاتفرم Google Auth را پیکربندی کرده‌اید، می‌توانید تنظیمات «صفحه رضایت OAuth» زیر را در نمانام‌سازی، مخاطب، و دسترسی به داده‌ها پیکربندی کنید. اگر پیامی با این مضمون دیدید: پلاتفرم «احراز هویت Google» هنوز پیکربندی نشده است، روی شروع به کار کلیک کنید:

    1. در بخش اطلاعات برنامه، در نام برنامه، Incident Management with User Auth را تایپ کنید.
    2. در ایمیل پشتیبانی کاربر، نشانی ایمیل خودتان یا گروه Google مناسبی را انتخاب کنید.
    3. روی بعدی کلیک کنید.
    4. در بخش مخاطبان، داخلی را انتخاب کنید. اگر نمی‌توانید داخلی را انتخاب کنید، خارجی را انتخاب کنید.
    5. روی بعدی کلیک کنید.
    6. در بخش اطلاعات تماس، نشانی ایمیلی وارد کنید که ازطریق آن بتوانید از هرگونه تغییر در پروژه‌تان مطلع شوید.
    7. روی بعدی کلیک کنید.
    8. در بخش تکمیل، خط‌مشی داده‌های کاربر سرویس‌های Google API را مرور کنید و درصورت موافقت، با «خط‌مشی داده‌های کاربر سرویس‌های Google API» موافقم را انتخاب کنید.
    9. روی ادامه کلیک کنید.
    10. روی ایجاد کردن کلیک کنید.
    11. اگر خارجی را برای نوع کاربر انتخاب کردید، کاربران آزمایش را اضافه کنید:
      1. روی مخاطبان کلیک کنید.
      2. در بخش کاربران آزمایش، روی افزودن کاربران کلیک کنید.
      3. نشانی ایمیل خود و سایر کاربران آزمایش مجاز را وارد کنید، سپس روی ذخیره کلیک کنید.
  3. روی دسترسی به داده‌ها > افزودن یا برداشتن محدوده‌ها کلیک کنید. پانلی با فهرستی از محدوده‌ها برای هر API که در پروژه Google Cloud فعال کرده‌اید ظاهر می‌شود.

    1. در بخش افزودن دستی محدوده‌ها، محدوده‌های زیر را جای‌گذاری کنید:

      • https://www.googleapis.com/auth/chat.spaces.create
      • https://www.googleapis.com/auth/chat.memberships
      • https://www.googleapis.com/auth/chat.memberships.app
      • https://www.googleapis.com/auth/chat.messages
      • https://www.googleapis.com/auth/documents
      • https://www.googleapis.com/auth/admin.directory.user.readonly
      • https://www.googleapis.com/auth/script.external_request
      • https://www.googleapis.com/auth/userinfo.email
      • https://www.googleapis.com/auth/cloud-platform
    2. روی افزودن به جدول کلیک کنید.

    3. روی به‌روزرسانی کلیک کنید.

    4. پس‌از انتخاب محدوده‌های موردنیاز برنامه‌تان، در صفحه دسترسی به داده‌ها، روی ذخیره کلیک کنید.

ایجاد و استقرار برنامه Chat

در بخش زیر، کل پروژه Apps Script را که حاوی همه کد برنامه موردنیاز برای برنامه Chat شما است کپی و به‌روزرسانی می‌کنید، بنابراین نیازی به کپی و جای‌گذاری هر فایل نیست.

برخی‌از توابع در انتهای نامشان خط زیرین دارند، مثل concatenateAllSpaceMessages_() از ChatApp.gs. خط زیرین تابع را از صفحه وب مقداردهی اولیه رویداد پنهان می‌کند وقتی در مرورگر باز است. برای اطلاعات بیشتر، به توابع خصوصی مراجعه کنید.

‫Apps Script از دو نوع فایل پشتیبانی می‌کند: .gs دستورگان و .html فایل. برای رعایت این پشتیبانی، جاوا اسکریپت سمت مشتری برنامه در برچسب‌های <script /> و CSS آن در برچسب‌های <style /> در فایل HTML قرار می‌گیرد.

درصورت تمایل، می‌توانید کل پروژه را در GitHub مشاهده کنید.

مشاهده در GitHub

در اینجا نمای کلی هر فایل آورده شده است:

Consts.gs

ثابت‌های ارجاع‌شده توسط فایل‌های کد دیگر را تعریف می‌کند، ازجمله شناسه پروژه Cloud، شناسه مکان Vertex AI، شناسه فرمان سریع برای بستن حادثه، و مدل Gemini.

مشاهده Consts.gs کد

apps-script/chat/incident-response-user-auth/Consts.gs
const PROJECT_ID = 'replace-with-your-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
const CLOSE_INCIDENT_COMMAND_ID = 1;
const MODEL_ID = 'gemini-2.5-flash-lite';
ChatApp.gs

رویدادهای تعامل Chat را مدیریت می‌کند، ازجمله پیام‌ها، کلیک‌های دکمه، فرمان‌های برنامه، و کادرهای گفتگو. با باز کردن کادر گفتگویی برای جمع‌آوری جزئیات حل‌وفصل حادثه، به فرمان سریع Close incident پاسخ می‌دهد. با فراخوانی روش spaces.messages.list در Chat API، پیام‌های فضا را می‌خواند. شناسه‌های کاربر را بااستفاده از سرویس «دایرکتوری» در «کیت توسعه نرم‌افزار سرپرست» در Apps Script دریافت می‌کند.

مشاهده ChatApp.gs کد

apps-script/chat/incident-response-user-auth/ChatApp.gs
/**
 * Responds to a MESSAGE event in Google Chat.
 * 
 * It always responds with a simple "Hello" text message.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    text: "Hello from Incident Response app!"
  }}}}};
}

/**
 * Responds to an APP_COMMAND event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onAppCommand(event) {
  if (event.chat.appCommandPayload.appCommandMetadata.appCommandId != CLOSE_INCIDENT_COMMAND_ID) {
    return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
      text: "Command not recognized. Use the quick command `Close incident` to close the incident managed by this space."
    }}}}};
  }
  return { action: { navigations: [{ pushCard: { sections: [{
    header: "Close Incident",
    widgets: [{
      textInput: {
        label: "Please describe the incident resolution",
        type: "MULTIPLE_LINE",
        name: "description"
      }
    }, {
      buttonList: { buttons: [{
        text: "Close Incident",
        onClick: { action: { function: "closeIncident" }}
      }]}
    }]
  }]}}]}};
}

/**
 * Responds to a BUTTON_CLICKED event in Google Chat from Close Incident dialog.
 *
 * @param {Object} event the event object from Google Chat
 */
function closeIncident(event) {
  if (event.chat.buttonClickedPayload.isDialogEvent) {
    if (event.chat.buttonClickedPayload.dialogEventType == 'SUBMIT_DIALOG') {
      return processSubmitDialog_(event);
    }
    return { action: { navigations: [{ endNavigation: {
      action: "CLOSE_DIALOG" }
    }]}};
  }
}

/**
 * Responds to a BUTTON_CLICKED event in Google Chat from Close Incident dialog submission.
 *
 * It creates a Doc with a summary of the incident information and posts a message
 * to the space with a link to the Doc.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSubmitDialog_(event) {
  const resolution = event.commonEventObject.formInputs.description.stringInputs.value[0];
  const space = event.chat.buttonClickedPayload.space;
  const chatHistory = concatenateAllSpaceMessages_(space.name);
  const chatSummary = summarizeChatHistory_(chatHistory);
  const docUrl = createDoc_(space.displayName, resolution, chatHistory, chatSummary);
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    text: `Incident closed with the following resolution: ${resolution}\n\nHere is the automatically generated post-mortem:\n${docUrl}`
  }}}}};
}

/**
 * Lists all the messages in the Chat space, then concatenate all of them into
 * a single text containing the full Chat history.
 *
 * For simplicity for this demo, it only fetches the first 100 messages.
 *
 * @return {string} a text containing all the messages in the space in the format:
 *          Sender's name: Message
 */
function concatenateAllSpaceMessages_(spaceName) {
  // Call Chat API method spaces.messages.list
  const response = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 });
  const messages = response.messages;
  // Fetch the display names of the message senders and returns a text
  // concatenating all the messages.
  let userMap = new Map();
  return messages
    .map(message => `${getUserDisplayName_(userMap, message.sender.name)}: ${message.text}`)
    .join('\n');
}

/**
 * Obtains the display name of a user by using the Admin Directory API.
 *
 * The fetched display name is cached in the provided map, so we only call the API
 * once per user.
 *
 * If the user does not have a display name, then the full name is used.
 *
 * @param {Map} userMap a map containing the display names previously fetched
 * @param {string} userName the resource name of the user
 * @return {string} the user's display name
 */
function getUserDisplayName_(userMap, userName) {
  if (userMap.has(userName)) {
    return userMap.get(userName);
  }
  let displayName = 'Unknown User';
  try {
    const user = AdminDirectory.Users.get(
      userName.replace("users/", ""),
      { projection: 'BASIC', viewType: 'domain_public' });
    displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
  } catch (e) {
    // Ignore error if the API call fails (for example, because it's an
    // out-of-domain user or Chat app) and just use 'Unknown User'.
  }
  userMap.set(userName, displayName);
  return displayName;
}
ChatSpaceCreator.gs

داده‌های فرمی را که کاربران در صفحه وب اولیه رویداد وارد می‌کنند دریافت می‌کند و از آن برای راه‌اندازی فضای Chat با ایجاد و پر کردن آن استفاده می‌کند، و سپس پیامی درباره رویداد پست می‌کند.

مشاهده ChatSpaceCreator.gs کد

apps-script/chat/incident-response-user-auth/ChatSpaceCreator.gs
/**
 * Handles an incident by creating a chat space with the provided title and members, and posting a message.
 * All the actions are done using user credentials.
 *
 * @param {Object} formData - The data submitted by the user. It should contain the fields:
 *                           - title: The display name of the chat space.
 *                           - description: The description of the incident.
 *                           - users: A comma-separated string of user emails to be added to the space.
 * @return {string} The resource name of the new space.
 */
function handleIncident(formData) {
  const users = formData.users.trim().length > 0 ? formData.users.split(',') : [];
  const spaceName = setUpSpace_(formData.title, users);
  addAppToSpace_(spaceName);
  createMessage_(spaceName, formData.description);
  return spaceName;
}

/**
 * Creates a chat space.
 *
 * @return {string} the resource name of the new space.
 */
function setUpSpace_(displayName, users) {
  const memberships = users.map(email => ({
    member: {
      name: `users/${email}`,
      type: "HUMAN"
    }
  }));
  const request = {
    space: {
      displayName: displayName,
      spaceType: "SPACE"
    },
    memberships: memberships
  };
  // Call Chat API method spaces.setup
  const space = Chat.Spaces.setup(request);
  return space.name;
}

/**
 * Adds this Chat app to the space.
 *
 * @return {string} the resource name of the new membership.
 */
function addAppToSpace_(spaceName) {
  const request = {
    member: {
      name: "users/app",
      type: "BOT"
    }
  };
  // Call Chat API method spaces.members.create
  const membership = Chat.Spaces.Members.create(request, spaceName);
  return membership.name;
}

/**
 * Creates a chat message.
 *
 * @param {string} spaceName - The resource name of the space.
 * @param {string} message - The text to be posted.
 * @return {string} the resource name of the new message.
 */
function createMessage_(spaceName, message) {
  const request = {
    text: message
  };
  // Call Chat API method spaces.messages.create
  const result = Chat.Spaces.Messages.create(request, spaceName);
  return result.name;
}
DocsApi.gs

«میانای برنامه‌سازی کاربردی سندنگار Google» را فرا می‌خواند تا سند «سندنگار Google» را در Google Drive کاربر ایجاد کند و خلاصه اطلاعات رویداد را که در VertexAiApi.gs ایجاد شده است در سند بنویسد.

مشاهده DocsApi.gs کد

apps-script/chat/incident-response-user-auth/DocsApi.gs
/**
 * Creates a Doc in the user's Google Drive and writes a summary of the incident information to it.
 *
 * @param {string} title The title of the incident
 * @param {string} resolution Incident resolution described by the user
 * @param {string} chatHistory The whole Chat history be included in the document
 * @param {string} chatSummary A summary of the Chat conversation to be included in the document
 * @return {string} the URL of the created Doc
 */
function createDoc_(title, resolution, chatHistory, chatSummary) {
  let doc = DocumentApp.create(title);
  let body = doc.getBody();
  body.appendParagraph(`Post-Mortem: ${title}`).setHeading(DocumentApp.ParagraphHeading.TITLE);
  body.appendParagraph("Resolution").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(resolution);
  body.appendParagraph("Summary of the conversation").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatSummary);
  body.appendParagraph("Full Chat history").setHeading(DocumentApp.ParagraphHeading.HEADING1);
  body.appendParagraph(chatHistory);
  return doc.getUrl();
}
VertexAiApi.gs

مکالمه را در فضای Chat بااستفاده از Vertex AI خلاصه می‌کند. این خلاصه در سندی که به‌طور ویژه در DocsAPI.gs ایجاد شده است پست می‌شود.

مشاهده VertexAiApi.gs کد

apps-script/chat/incident-response-user-auth/VertexAiApi.gs
/**
 * Summarizes a Chat conversation using the Vertex AI text prediction API.
 *
 * @param {string} chatHistory The Chat history that will be summarized.
 * @return {string} The content from the text prediction response.
 */
function summarizeChatHistory_(chatHistory) {
  const API_ENDPOINT = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}/publishers/google/models/${MODEL_ID}:generateContent`;
  const prompt =
    "Summarize the following conversation between Engineers resolving an incident"
      + " in a few sentences. Use only the information from the conversation.\n\n"
      + chatHistory;
  // Get the access token.
  const accessToken = ScriptApp.getOAuthToken();

  const headers = {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json',
  };
  const payload = {
    'contents': {
      'role': 'user',
      'parts' : [
        {
          'text': prompt
        }
      ]
    }
  }
  const options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true,
  };
  try {
    const response = UrlFetchApp.fetch(API_ENDPOINT, options);
    const responseCode = response.getResponseCode();
    const responseText = response.getContentText();

    if (responseCode === 200) {
      const jsonResponse = JSON.parse(responseText);
      console.log(jsonResponse)
      if (jsonResponse.candidates && jsonResponse.candidates.length > 0) {
        return jsonResponse.candidates[0].content.parts[0].text; // Access the summarized text
      } else {
        return "No summary found in response.";
      }

    } else {
      console.error("Vertex AI API Error:", responseCode, responseText);
      return `Error: ${responseCode} - ${responseText}`;
    }
  } catch (e) {
    console.error("UrlFetchApp Error:", e);
    return "Error: " + e.toString();
  }
}
WebController.gs

وب‌سایت اولیه رویداد را ارائه می‌دهد.

مشاهده WebController.gs کد

apps-script/chat/incident-response-user-auth/WebController.gs
/**
 * Serves the web page from Index.html.
 */
function doGet() {
  return HtmlService
    .createTemplateFromFile('Index')
    .evaluate();
}

/**
 * Serves the web content from the specified filename.
 */
function include(filename) {
  return HtmlService
    .createHtmlOutputFromFile(filename)
    .getContent();
}

/**
 * Returns the email address of the user running the script.
 */
function getUserEmail() {
  return Session.getActiveUser().getEmail();
}
Index.html

HTML تشکیل‌دهنده وب‌سایت اولیه حادثه.

مشاهده Index.html کد

apps-script/chat/incident-response-user-auth/Index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
    <?!= include('Stylesheet'); ?>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <h1>Incident Manager</h1>
        <form id="incident-form" onsubmit="handleFormSubmit(this)">
          <div id="form">
            <p>
              <label for="title">Incident title</label><br/>
              <input type="text" name="title" id="title" />
            </p>
            <p>
              <label for="users">Incident responders</label><br/>
              <small>
                Please enter a comma-separated list of email addresses of the users
                that should be added to the space.
                Do not include <?= getUserEmail() ?> as it will be added automatically.
              </small><br/>
              <input type="text" name="users" id="users" />
            </p>
            <p>
              <label for="description">Initial message</label></br>
              <small>This message will be posted after the space is created.</small><br/>
              <textarea name="description" id="description"></textarea>
            </p>
            <p class="text-center">
              <input type="submit" value="CREATE CHAT SPACE" />
            </p>
          </div>
          <div id="output" class="hidden"></div>
          <div id="clear" class="hidden">
            <input type="reset" value="CREATE ANOTHER INCIDENT" onclick="onReset()" />
          </div>
        </form>
      </div>
    </div>
    <?!= include('JavaScript'); ?>
  </body>
</html>
JavaScript.html

رفتار فرم را، ازجمله ارسال‌ها، خطاها، و پاک‌سازی‌ها، برای وب‌سایت مقداردهی اولیه رویداد مدیریت می‌کند. توسط تابع سفارشی include در WebController.gs در Index.html گنجانده شده است.

مشاهده JavaScript.html کد

apps-script/chat/incident-response-user-auth/JavaScript.html
<script>
  var formDiv = document.getElementById('form');
  var outputDiv = document.getElementById('output');
  var clearDiv = document.getElementById('clear');

  function handleFormSubmit(formObject) {
    event.preventDefault();
    outputDiv.innerHTML = 'Please wait while we create the space...';
    hide(formDiv);
    show(outputDiv);
    google.script.run
      .withSuccessHandler(updateOutput)
      .withFailureHandler(onFailure)
      .handleIncident(formObject);
  }

  function updateOutput(response) {
    var spaceId = response.replace('spaces/', '');
    outputDiv.innerHTML =
      '<p>Space created!</p><p><a href="https://mail.google.com/chat/#chat/space/'
        + spaceId
        + '" target="_blank">Open space</a></p>';
    show(outputDiv);
    show(clearDiv);
  }

  function onFailure(error) {
    outputDiv.innerHTML = 'ERROR: ' + error.message;
    outputDiv.classList.add('error');
    show(outputDiv);
    show(clearDiv);
  }

  function onReset() {
    outputDiv.innerHTML = '';
    outputDiv.classList.remove('error');
    show(formDiv);
    hide(outputDiv);
    hide(clearDiv);
  }

  function hide(element) {
    element.classList.add('hidden');
  }

  function show(element) {
    element.classList.remove('hidden');
  }
</script>
Stylesheet.html

«سی‌اس‌اس» برای وب‌سایت اولیه حادثه. این مورد توسط تابع سفارشی include در WebController.gs به Index.html اضافه شده است.

مشاهده Stylesheet.html کد

apps-script/chat/incident-response-user-auth/Stylesheet.html
<style>
  * {
    box-sizing: border-box;
  }
  body {
    font-family: Roboto, Arial, Helvetica, sans-serif;
  }
  div.container {
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
  }
  div.content {
    width: 80%;
    max-width: 1000px;
    padding: 1rem;
    border: 1px solid #999;
    border-radius: 0.25rem;
    box-shadow: 0 2px 2px 0 rgba(66, 66, 66, 0.08), 0 2px 4px 2px rgba(66, 66, 66, 0.16);
  }
  h1 {
    text-align: center;
    padding-bottom: 1rem;
    margin: 0 -1rem 1rem -1rem;
    border-bottom: 1px solid #999;
  }
 #output {
    text-align: center;
    min-height: 250px;
  }
  div#clear {
    text-align: center;
    padding-top: 1rem;
    margin: 1rem -1rem 0 -1rem;
    border-top: 1px solid #999;
  }
  input[type=text], textarea {
    width: 100%;
    padding: 1rem 0.5rem;
    margin: 0.5rem 0;
    border: 0;
    border-bottom: 1px solid #999;
    background-color: #f0f0f0;
  }
  textarea {
    height: 5rem;
  }
  small {
    color: #999;
  }
  input[type=submit], input[type=reset] {
    padding: 1rem;
    border: none;
    background-color: #6200ee;
    color: #fff;
    border-radius: 0.25rem;
    width: 25%;
  }
  .hidden {
    display: none;
  }
  .text-center {
    text-align: center;
  }
  .error {
    color: red;
  }
</style>

شماره و شناسه پروژه Cloud خود را پیدا کنید

  1. در «کنسول Google API»، به پروژه Cloud خود بروید.

    رفتن به Google API Console

  2. روی «تنظیمات و ابزارها» > تنظیمات پروژه کلیک کنید.

  3. مقادیر موجود در فیلدهای شماره پروژه و شناسه پروژه را یادداشت کنید. از آن‌ها در بخش‌های زیر استفاده می‌کنید.

ایجاد پروژه Apps Script

برای ایجاد پروژه Apps Script و متصل کردن آن به پروژه Cloud خود:

  1. برای باز کردن پروژه Apps Script برنامه «گپ مدیریت رخداد با اصالت‌سنجی کاربر»، روی دکمه زیر کلیک کنید.
    باز کردن پروژه
  2. روی نمای کلی کلیک کنید.
  3. در صفحه نمای کلی، روی نماد تهیه کپی تهیه رونوشت کلیک کنید.
  4. نام کپی پروژه Apps Script خود را وارد کنید:

    1. روی کپی برنامه «گپ مدیریت رویداد» با «احراز هویت کاربر» کلیک کنید.

    2. در عنوان پروژه، Incident Management Chat app with User Auth را تایپ کنید.

    3. روی تغییر نام کلیک کنید.

  5. در کپی پروژه Apps Script، به Consts.gs فایل بروید و PROJECT_ID را با شناسه پروژه Cloud خود تنظیم کنید.

تنظیم پروژه Cloud برای پروژه Apps Script

  1. در پروژه Apps Script خود، روی نماد تنظیمات پروژه تنظیمات پروژه کلیک کنید.
  2. در بخش پروژه Google Cloud Platform (GCP)، روی تغییر پروژه کلیک کنید.
  3. در شماره پروژه GCP، شماره پروژه Cloud خود را جای‌گذاری کنید.
  4. روی تنظیم پروژه کلیک کنید. پروژه Cloud و پروژه Apps Script اکنون متصل هستند.

ایجاد پیاده‌سازی آزمایشی Apps Script

اکنون که همه کدها در جای خود قرار دارند، پروژه Apps Script را پیاده‌سازی کنید. هنگام پیکربندی برنامه Chat در Google Cloud، از شناسه استقرار استفاده می‌کنید.

  1. در Apps Script، پروژه برنامه پاسخ به حادثه را باز کنید.

    رفتن به Apps Script

  2. روی استقرار > استقرارهای آزمایشی کلیک کنید.

  3. اگر برافزای Google Workspace و برنامه وب قبلاً انتخاب نشده‌اند، در کنار انتخاب نوع، روی انواع استقرار نماد تنظیمات پروژه کلیک کنید و برافزای Google Workspace و برنامه وب را انتخاب کنید.

  4. ‫Apps Script شناسه استقرار و نشانی وب برای برنامه وب ارائه می‌دهد.

  5. نشانی وب برنامه وب را یادداشت کنید تا بعداً هنگام شروع یک حادثه به آن مراجعه کنید. شناسه استقرار را کپی کنید. از این شناسه هنگام پیکربندی برنامه Chat در «کنسول Google API» استفاده می‌کنید.

  6. روی تمام کلیک کنید.

پیکربندی برنامه Chat در «کنسول Google API»

این بخش نحوه پیکربندی Google Chat API را در «کنسول Google API» با اطلاعاتی درباره برنامه Chat شما، ازجمله شناسه استقرار که به‌تازگی از پروژه Apps Script ایجاد کرده‌اید نشان می‌دهد.

  1. در «کنسول Google API»، روی منو > APIs و سرویس‌ها > APIs و سرویس‌های فعال > Google Chat API > پیکربندی کلیک کنید.

    رفتن به پیکربندی Chat API

  2. در نام برنامه، Incident Management with User Auth را تایپ کنید.

  3. در نشانی وب چهرک، https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png را تایپ کنید.

  4. در شرح، Responds to incidents را تایپ کنید.

  5. کلید فعال کردن ویژگی‌های تعاملی را به حالت روشن تغییر دهید.

  6. در بخش عملکرد، گزینه پیوستن به فضاها و مکالمه‌های گروهی را انتخاب کنید.

  7. در بخش تنظیمات اتصال، Apps Script را انتخاب کنید.

  8. در شناسه پیاده‌سازی، «شناسه پیاده‌سازی Apps Script» را که قبلاً از پیاده‌سازی پروژه Apps Script کپی کرده‌اید جای‌گذاری کنید.

  9. در بخش راه‌اندازها، کارکردهایی را که به رویدادهای تعامل پاسخ می‌دهند پیکربندی کنید:

    1. در فرمان برنامه، onAppCommand را تایپ کنید.
  10. فرمان سریعی را که برنامه Chat کاملاً پیاده‌سازی‌شده استفاده می‌کند ثبت کنید:

    1. در بخش فرمان‌ها، روی افزودن فرمان کلیک کنید.

    2. در شناسه فرمان، 1 را تایپ کنید.

    3. در شرح، تایپ کنید Closes the incident being discussed in the space.

    4. در بخش نوع فرمان، فرمان سریع را انتخاب کنید.

    5. در نام فرمان سریع، Close incident را تایپ کنید.

    6. باز کردن کادر گفتگو را انتخاب کنید.

    7. روی تمام کلیک کنید. فرمان ثبت و فهرست می‌شود.

  11. در بخش رؤیت‌پذیری، این برنامه Chat را برای افراد و گروه‌های خاصی در «دامنه Workspace» شما دردسترس قرار دهید و نشانی ایمیلتان را وارد کنید.

  12. در بخش گزارش‌ها، خطاهای گزارش به «گزارش‌گیری» را انتخاب کنید.

  13. روی ذخیره کلیک کنید. پیام ذخیره شدن پیکربندی نمایش داده می‌شود، یعنی برنامه برای آزمایش آماده است.

آزمایش کردن برنامه Chat

برای آزمایش برنامه Chat مدیریت رخداد، رخدادی را از صفحه وب شروع کنید و تأیید کنید که برنامه Chat طبق انتظار کار می‌کند:

  1. به نشانی وب برنامه وب پیاده‌سازی Apps Script بروید.

  2. وقتی Apps Script برای دسترسی به داده‌هایتان اجازه می‌خواهد، روی مرور اجازه‌ها کلیک کنید، با «حساب Google» مناسبی در دامنه Google Workspace خودتان به سیستم وارد شوید، و روی اجازه دادن کلیک کنید.

  3. صفحه وب اولیه رویداد باز می‌شود. اطلاعات آزمایش را وارد کنید:

    1. در عنوان حادثه، The First Incident را تایپ کنید.
    2. درصورت تمایل، در پاسخ‌دهندگان به حادثه، نشانی‌های ایمیل پاسخ‌دهندگان به حادثه همکارتان را وارد کنید. آن‌ها باید کاربرانی با حساب Google Chat در سازمان Google Workspace شما باشند، درغیراین‌صورت فضا ایجاد نمی‌شود. نشانی ایمیل خودتان را وارد نکنید زیرا به‌طور خودکار اضافه می‌شود.
    3. در پیام اولیه، Testing the incident management Chat app. را تایپ کنید
  4. روی ایجاد فضای گپ کلیک کنید. پیام creating space ظاهر می‌شود.

  5. پس‌از ایجاد فضا، پیام Space created! نشان داده می‌شود. روی باز کردن فضا کلیک کنید، که فضا را در Chat در زبانه جدیدی باز می‌کند.

  6. درصورت تمایل، شما و دیگر پاسخ‌دهندگان به حادثه می‌توانید در فضا پیام ارسال کنید. این برنامه بااستفاده از Vertex AI این پیام‌ها را خلاصه می‌کند و سند گذشته‌نگری هم‌رسانی می‌کند.

  7. برای پایان دادن به پاسخ به حادثه و شروع فرایند حل‌وفصل، در فضای Chat، فرمان سریع Close incident را راه‌اندازی کنید. کادر گفتگوی مدیریت رویداد باز می‌شود.

  8. در بستن حادثه، شرحی برای حل‌وفصل حادثه وارد کنید، مثلاً Test complete.

  9. روی بستن حادثه کلیک کنید.

برنامه «مدیریت رخداد» پیام‌های فضا را فهرست می‌کند، آن‌ها را با Vertex AI خلاصه می‌کند، خلاصه را در سند «سندنگار Google» جای‌گذاری می‌کند، و سند را در فضا هم‌رسانی می‌کند.

مرتب‌سازی

برای اینکه هزینه منابع استفاده‌شده در این آموزش به حساب Google Cloud شما اضافه نشود، توصیه می‌کنیم پروژه Cloud را حذف کنید.

  1. در «کنسول Google API»، به صفحه مدیریت منابع بروید. روی منو > IAM و سرپرست > مدیریت منابع کلیک کنید.

    به «مدیر منابع» بروید

  2. در فهرست پروژه، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی حذف کلیک کنید.
  3. در چارگوش گفتگو، شناسه پروژه را تایپ کنید و سپس روی خاموش کردن کلیک کنید تا پروژه حذف شود.