با Google Chat، Vertex AI و Apps Script به حوادث پاسخ دهید

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

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

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

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

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

  • وب سایتی که یک حادثه را شروع می کند.
    شکل 1. وب سایتی که در آن شخصی می تواند یک حادثه را گزارش کند.
  • اعلان ایجاد فضای چت حادثه.
    شکل 2. اطلاع رسانی مبنی بر ایجاد فضای چت اتفاقی.
  • پاسخ حادثه فضای چت.
    شکل 3. پاسخ حادثه فضای چت.
  • حل حادثه با دستور اسلش.
    شکل 4. حل حادثه با دستور اسلش.
  • گفتگوی حل حادثه.
    شکل 5. گفتگوی حل حادثه.
  • سند Google Docs وضوح حادثه در فضا به اشتراک گذاشته شده است.
    شکل 6. سند Google Docs تفکیک رخداد به اشتراک گذاشته شده در فضا.
  • حل و فصل اتفاقات خلاصه هوش مصنوعی Google Doc.
    شکل 7. سند Google Docs حل و فصل خلاصه AI.

پیش نیازها

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

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

اهداف

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

معماری

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

معماری واکنش حادثه برنامه چت Google

این معماری نشان می‌دهد که برنامه چت Google چگونه یک حادثه و حل را پردازش می‌کند.

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

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

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

    1. سرویس Apps Script Admin SDK اطلاعات اعضای تیم مانند شناسه کاربر و آدرس ایمیل را دریافت می‌کند.

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

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

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

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

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

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

    4. پاسخ حادثه برنامه چت Google Chat API را برای ارسال پیامی که پیوندی به سند خلاصه اسناد را به اشتراک می‌گذارد، فرا می‌خواند.

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

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

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

کنسول Google Cloud

  1. در کنسول Google Cloud، به منو > IAM & Admin > ایجاد پروژه بروید.

    به Create a Project بروید

  2. در قسمت Project Name یک نام توصیفی برای پروژه خود وارد کنید.

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

  3. در قسمت Location ، روی Browse کلیک کنید تا مکان های احتمالی پروژه شما نمایش داده شود. سپس، روی انتخاب کلیک کنید.
  4. روی ایجاد کلیک کنید. کنسول Google Cloud به صفحه داشبورد می رود و پروژه شما در عرض چند دقیقه ایجاد می شود.

gcloud CLI

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

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

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

کنسول Google Cloud

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

    به Billing for My Projects بروید

  2. در انتخاب سازمان ، سازمان مرتبط با پروژه Google Cloud خود را انتخاب کنید.
  3. در ردیف پروژه، منوی Actions ( ) را باز کنید، روی Change billing کلیک کنید و حساب 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 است.

API ها را فعال کنید

کنسول Google Cloud

  1. در کنسول Google Cloud، Google Chat API، Google Docs API، Admin SDK API و Vertex AI API را فعال کنید.

    API ها را فعال کنید

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

  3. تأیید کنید که API های صحیح را فعال می کنید، سپس روی فعال کردن کلیک کنید.

gcloud CLI

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

    gcloud config set project PROJECT_ID
    

    PROJECT_ID با Project ID پروژه Cloud که ایجاد کردید جایگزین کنید.

  2. Google Chat API، Google Docs API، Admin SDK API و Vertex AI API را با دستور 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 Cloud، به منو > APIs & Services > صفحه رضایت OAuth بروید.

    به صفحه رضایت OAuth بروید

  2. در قسمت User type ، Internal را انتخاب کنید، سپس روی Create کلیک کنید.

  3. در نام برنامه ، Incident Management تایپ کنید.

  4. در ایمیل پشتیبانی کاربر ، آدرس ایمیل یا یک گروه Google مناسب را انتخاب کنید.

  5. در قسمت اطلاعات تماس برنامه‌نویس ، آدرس ایمیل خود را وارد کنید.

  6. روی ذخیره و ادامه کلیک کنید.

  7. روی Add or Remove Scopes کلیک کنید. یک پانل با لیستی از محدوده‌ها برای هر API که در پروژه Cloud خود فعال کرده‌اید ظاهر می‌شود.

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

    • 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
  9. روی افزودن به جدول کلیک کنید.

  10. روی Update کلیک کنید.

  11. روی ذخیره و ادامه کلیک کنید.

  12. خلاصه ثبت برنامه را مرور کنید، سپس روی بازگشت به داشبورد کلیک کنید.

برنامه Chat را ایجاد و اجرا کنید

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

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

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

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

در GitHub مشاهده کنید

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

Consts.gs

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

کد Consts.gs را مشاهده کنید

apps-script/incident-response/Consts.gs
const PROJECT_ID = 'replace-with-your-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
const CLOSE_INCIDENT_COMMAND_ID = 1;
ChatApp.gs

رویدادهای تعامل چت، از جمله پیام‌ها، کلیک‌های کارت، دستورات اسلش و دیالوگ‌ها را مدیریت می‌کند. به دستور اسلش /closeIncident با باز کردن یک گفتگو برای جمع‌آوری جزئیات حل حادثه پاسخ می‌دهد. با فراخوانی متد spaces.messages.list در Chat API، پیام‌ها را در فضا می‌خواند. شناسه های کاربر را با استفاده از سرویس Admin SDK Directory در Apps Script دریافت می کند.

کد ChatApp.gs را مشاهده کنید

apps-script/incident-response/ChatApp.gs
/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident").
 * It will respond to any other message with a simple "Hello" text message.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  if (event.message.slashCommand) {
    return processSlashCommand_(event);
  }
  return { "text": "Hello from Incident Response app!" };
}

/**
 * Responds to a CARD_CLICKED event in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 *
 * @param {Object} event the event object from Google Chat
 */
function onCardClick(event) {
  if (event.isDialogEvent) {
    if (event.dialogEventType == 'SUBMIT_DIALOG') {
      return processSubmitDialog_(event);
    }
    return {
      actionResponse: {
        type: "DIALOG",
        dialogAction: {
          actionStatus: "OK"
        }
      }
    };
  }
}

/**
 * Responds to a MESSAGE event with a Slash command in Google Chat.
 *
 * This app only responds to a slash command with the ID 1 ("/closeIncident")
 * by returning a Dialog.
 *
 * @param {Object} event the event object from Google Chat
 */
function processSlashCommand_(event) {
  if (event.message.slashCommand.commandId != CLOSE_INCIDENT_COMMAND_ID) {
    return {
      "text": "Command not recognized. Use the command `/closeIncident` to close the incident managed by this space."
    };
  }
  const 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"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ];
  return {
    actionResponse: {
      type: "DIALOG",
      dialogAction: {
        dialog: {
          body: {
            sections,
          }
        }
      }
    }
  };
}

/**
 * Responds to a CARD_CLICKED event with a Dialog submission in Google Chat.
 *
 * This app only responds to one kind of dialog (Close Incident).
 * 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.common.formInputs.description[""].stringInputs.value[0];
  const chatHistory = concatenateAllSpaceMessages_(event.space.name);
  const chatSummary = summarizeChatHistory_(chatHistory);
  const docUrl = createDoc_(event.space.displayName, resolution, chatHistory, chatSummary);
  return {
    actionResponse: {
      type: "NEW_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.
 *
 * Messages with slash commands are filtered out, so the returned history will
 * contain only the conversations between users and not app command invocations.
 *
 * @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
    .filter(message => message.slashCommand === undefined)
    .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

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

کد ChatSpaceCreator.gs را مشاهده کنید

apps-script/incident-response/ChatSpaceCreator.gs
/**
 * Creates a space in Google Chat with the provided title and members, and posts an
 * initial message to it.
 *
 * @param {Object} formData the data submitted by the user. It should contain the fields
 *                          title, description, and users.
 * @return {string} the resource name of the new space.
 */
function createChatSpace(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 space in Google Chat with the provided display name and members.
 *
 * @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",
      externalUserAllowed: true
    },
    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;
}

/**
 * Posts a text message to the space on behalf of the user.
 *
 * @return {string} the resource name of the new message.
 */
function createMessage_(spaceName, text) {
  const request = {
    text: text
  };
  // Call Chat API method spaces.messages.create
  const message = Chat.Spaces.Messages.create(request, spaceName);
  return message.name;
}
DocsApi.gs

Google Docs API را فراخوانی می‌کند تا یک سند Google Docs در Google Drive کاربر ایجاد کند و خلاصه‌ای از اطلاعات حادثه ایجاد شده در VertexAiApi.gs را در سند می‌نویسد.

کد DocsApi.gs را مشاهده کنید

apps-script/incident-response/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

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

کد VertexAiApi.gs را مشاهده کنید

apps-script/incident-response/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 prompt =
    "Summarize the following conversation between Engineers resolving an incident"
      + " in a few sentences. Use only the information from the conversation.\n\n"
      + chatHistory;
  const request = {
    instances: [
      { prompt: prompt }
    ],
    parameters: {
      temperature: 0.2,
      maxOutputTokens: 256,
      topK: 40,
      topP: 0.95
    }
  }
  const fetchOptions = {
    method: 'POST',
    headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
    contentType: 'application/json',
    payload: JSON.stringify(request)
  }
  const response = UrlFetchApp.fetch(
    `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
      + `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
      + "/publishers/google/models/text-bison:predict",
    fetchOptions);
  const payload = JSON.parse(response.getContentText());
  return payload.predictions[0].content;
}
WebController.gs

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

کد WebController.gs را مشاهده کنید

apps-script/incident-response/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/incident-response/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

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

کد JavaScript.html را مشاهده کنید

apps-script/incident-response/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)
      .createChatSpace(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

CSS برای وب سایت اولیه حادثه. این تابع در Index.html توسط تابع include سفارشی در WebController.gs گنجانده شده است.

مشاهده کد Stylesheet.html

apps-script/incident-response/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 Cloud، به پروژه Cloud خود بروید.

    به کنسول Google Cloud بروید

  2. روی Settings and Utilities > تنظیمات پروژه کلیک کنید.

  3. به مقادیر موجود در قسمت Project number و Project ID توجه کنید. شما از آنها در بخش های زیر استفاده می کنید.

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

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

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

    1. روی «کپی پاسخ به حوادث با Google Chat» کلیک کنید.

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

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

  5. در کپی پروژه Apps Script خود، به فایل Consts.gs بروید و YOUR_PROJECT_ID را با شناسه پروژه Cloud خود جایگزین کنید.

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

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

یک استقرار اسکریپت Apps ایجاد کنید

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

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

    به Apps Script بروید

  2. روی Deploy > New Deployment کلیک کنید.

  3. اگر افزونه و برنامه وب قبلاً انتخاب نشده‌اند، در کنار انتخاب نوع ، روی انواع استقرار کلیک کنید نماد تنظیمات پروژه و Add-on and Web app را انتخاب کنید.

  4. در توضیحات ، توضیحاتی را برای این نسخه وارد کنید، مانند Complete version of incident management app .

  5. در Execute as ، User accessing the web app را انتخاب کنید

  6. در چه کسی دسترسی دارد ، هر فردی را در سازمان Workspace خود انتخاب کنید، جایی که «سازمان Workspace شما» نام سازمان Google Workspace شما است.

  7. روی Deploy کلیک کنید. Apps Script استقرار موفقیت آمیز را گزارش می دهد و یک شناسه استقرار و یک URL برای صفحه وب اولیه سازی حادثه ارائه می دهد.

  8. URL برنامه وب را یادداشت کنید تا بعداً هنگام شروع یک حادثه از آن بازدید کنید. شناسه استقرار را کپی کنید. هنگام پیکربندی برنامه Chat در کنسول Google Cloud از این شناسه استفاده می‌کنید.

  9. روی Done کلیک کنید.

برنامه چت را در کنسول Google Cloud پیکربندی کنید

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

  1. در کنسول Google Cloud، > محصولات بیشتر > Google Workspace > کتابخانه محصول > Google Chat API > مدیریت > پیکربندی کلیک کنید.

    به تنظیمات Chat API بروید

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

  3. در URL آواتار ، https://developers.google.com/chat/images/quickstart-app-avatar.png را تایپ کنید.

  4. در توضیحات ، Responds to incidents. .

  5. روی گزینه فعال کردن ویژگی های تعاملی در موقعیت روشن کلیک کنید.

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

  7. در قسمت تنظیمات اتصال ، پروژه Apps Script را انتخاب کنید.

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

  9. یک دستور اسلش را ثبت کنید که برنامه Chat کاملاً پیاده‌سازی شده از آن استفاده می‌کند:

    1. در زیر دستورات اسلش ، روی افزودن دستور اسلش کلیک کنید.

    2. در نام ، /closeIncident تایپ کنید.

    3. در Command ID 1 را تایپ کنید.

    4. در توضیحات ، Closes the incident being discussed in the space.

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

    6. روی Done کلیک کنید. دستور اسلش ثبت و فهرست شده است.

  10. در قسمت Visibility ، این برنامه چت را برای افراد و گروه‌های خاصی در دامنه کاری خود در دسترس قرار دهید، انتخاب کنید و آدرس ایمیل خود را وارد کنید.

  11. در زیر گزارش‌ها ، Log errors to Logging را انتخاب کنید.

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

برنامه چت را تست کنید

برای آزمایش برنامه Chat مدیریت رویداد، یک حادثه را از صفحه وب شروع کنید و بررسی کنید که برنامه Chat همانطور که انتظار می رود کار می کند:

  1. به URL برنامه وب استقرار Apps Script بروید.

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

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

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

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

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

  7. برای پایان دادن به پاسخ حادثه و شروع فرآیند حل، در فضای چت، /closeIncident را تایپ کنید. یک گفتگوی مدیریت حادثه باز می شود.

  8. در Close event ، توضیحی را برای حل حادثه وارد کنید، مانند Test complete .

  9. روی Close Incident کلیک کنید.

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

پاک کردن

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

  1. در کنسول Google Cloud، به صفحه مدیریت منابع بروید. منو > IAM & Admin > Manage Resources کلیک کنید.

    به Resource Manager بروید

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