Responda a incidentes com o Google Chat, a Vertex AI e o Apps Script

Neste tutorial, mostramos como criar um app do Google Chat que responde a incidentes em tempo real. Ao responder a um incidente, o app cria e preenche um espaço do Chat, facilita o incidente a resolução com mensagens, comandos de barra e caixas de diálogo e usa IA para resumir a resposta a incidentes em um documento Google.

Um incidente é um evento que requer a atenção imediata de uma equipe. de pessoas resolver. Exemplos de incidentes:

  • Um caso urgente é criado em um sistema de gestão de relacionamento com o cliente (CRM). exigindo a colaboração de uma equipe de serviço para chegar a uma solução.
  • Um sistema fica off-line, alertando um grupo de engenheiros de confiabilidade do site (SREs) para que eles possam trabalhar juntos para colocá-los novamente on-line.
  • Há um terremoto de alta magnitude e os profissionais de emergência precisam para coordenar essas respostas.

Para este tutorial, o alerta de incidente começa quando alguém informa o incidente clicando em um botão em uma página da Web. A página da Web simula um incidente solicitando que os usuários insiram informações básicas do incidente: título, descrição e endereços de e-mail dos participantes.

Confira o app do Chat de gerenciamento de incidentes em ação:

  • O site que inicia um incidente.
    Figura 1. o site em que alguém pode denunciar um incidente.
  • Notificação de que o espaço do Chat do incidente foi criado.
    Figura 2. Notificação de que o espaço do Chat do incidente foi criado.
  • O espaço do Chat de resposta a incidentes.
    Figura 3. O espaço do Chat de resposta a incidentes.
  • Resolver o incidente com um comando de barra.
    Figura 4. Resolver o incidente com um comando de barra.
  • Caixa de diálogo de resolução de incidentes.
    Figura 5. Caixa de diálogo de resolução de incidentes.
  • Um documento do Documentos Google para resolução de incidentes compartilhado no espaço.
    Figura 6. um documento do Documentos Google para resolução de incidentes compartilhado no espaço.
  • O documento Google sobre a resolução de incidentes com o resumo da IA.
    Figura 7. O documento Google Docs sobre resolução de incidentes com resumo de IA.

Pré-requisitos

Se você precisa ativar algum desses pré-requisitos na sua organização, peça seu administrador do Google Workspace para ativá-las:

  • Uma empresa Conta do Google Workspace com acesso a Google Chat.
  • Ter Diretório (compartilhamento de contatos) ativado para o Google Workspace. O aplicativo do incidente usa no diretório para procurar os responsáveis pela resposta informações de contato, como nome e endereço de e-mail. Os responsáveis pela resposta a incidentes precisam ser usuários com uma conta do Google Chat do Google Workspace na sua organização.

Objetivos

  • Criar um app do Chat que responda a incidentes.
  • Para ajudar os usuários a responder a incidentes, faça o seguinte:
    • Criar espaços de resposta a incidentes.
    • Publicar mensagens resumindo incidentes e respostas.
    • Apoiar a colaboração com modelos Recursos do app de chat.
  • Resuma conversas e resoluções com a Vertex AI.

Arquitetura

O diagrama a seguir mostra a arquitetura do Google Workspace Recursos do Google Cloud usados pela resposta a incidentes app Google Chat.

Arquitetura do app de resposta a incidentes do Google Chat

A arquitetura mostra como a resposta a incidentes O app Google Chat processa um incidente e a resolução.

  1. Um usuário inicia um incidente em um site externo hospedado em Apps Script.

  2. O site envia uma solicitação HTTP assíncrona para o App Google Chat, também hospedado no Apps Script.

  3. O app do Google Chat de resposta a incidentes processa a solicitação:

    1. O serviço do SDK Admin do Apps Script recebe um membro da equipe informações, como ID do usuário e endereço de e-mail.

    2. Com um conjunto de solicitações HTTP para a API Chat usando o o serviço avançado de chat do Apps Script, da resposta a incidentes O app do Google Chat cria um incidente o espaço com as pessoas da equipe e envia uma mensagem para ele.

  4. Os membros da equipe discutem o incidente no espaço do Chat.

  5. Um membro da equipe invoca um comando de barra para sinalizar uma resolução para o o incidente.

    1. Uma chamada HTTP para a API Chat usando o Apps Script O serviço avançado do Chat lista todos os recursos do Chat mensagens do espaço.

    2. A Vertex AI recebe as mensagens listadas e gera um resumo.

    3. O serviço DocumentApp do Apps Script cria um do app Documentos Google e adiciona o resumo da Vertex AI ao documento.

    4. As chamadas do app Google Chat de resposta a incidentes API Chat para enviar uma mensagem compartilhando um link para o resumo do app Documentos Google.

Prepare o ambiente

Nesta seção, mostramos como criar e configurar um projeto do Google Cloud para a App Chat.

Criar um projeto do Google Cloud

Console do Google Cloud

  1. No console do Google Cloud, acesse o menu > IAM e Administrador > Criar um projeto.

    Acessar "Criar um projeto"

  2. No campo Nome do projeto, insira um nome descritivo para o projeto.

    Opcional: para editar o ID do projeto, clique em Editar. O ID do projeto não pode ser alterado após a criação do projeto, então escolha um ID que atenda às suas necessidades para o ciclo de vida projeto.

  3. No campo Local, clique em Procurar para mostrar os possíveis locais para sua projeto. Em seguida, clique em Selecionar.
  4. Clique em Criar. O console do Google Cloud acessa a página "Painel" e seu projeto é criado em alguns minutos.

CLI da gcloud

Em um dos ambientes de desenvolvimento a seguir, acesse o Google Cloud CLI (`gcloud`):

  • Cloud Shell: para usar um terminal on-line com a gcloud CLI configure o Cloud Shell.
    Ativar o Cloud Shell
  • Local Shell: para usar um ambiente de desenvolvimento local, instalar e inicializar a CLI gcloud.
    Para criar um projeto do Cloud, use o comando "gcloud projects create":
    gcloud projects create PROJECT_ID
    Substitua PROJECT_ID definindo o ID do projeto que você quer criar.

Ative o faturamento para o projeto do Cloud

Console do Google Cloud

  1. No console do Google Cloud, acesse Faturamento. Clique em Cardápio > Faturamento > Meus projetos.

    Acessar o faturamento dos meus projetos

  2. Em Selecionar uma organização, escolha a organização associada a seu projeto do Google Cloud.
  3. Na linha do projeto, abra o menu Ações. (), Clique em Alterar faturamento e escolha conta do Cloud Billing.
  4. Clique em Definir conta.

CLI da gcloud

  1. Para listar as contas de faturamento disponíveis, execute:
    gcloud billing accounts list
  2. Vincule uma conta de faturamento a um projeto do Google Cloud:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    Substitua:

    • PROJECT_ID é o ID do projeto da projeto do Google Cloud em que você quer ativar o faturamento.
    • BILLING_ACCOUNT_ID é o ID da conta de faturamento a ser vinculada. no projeto do Google Cloud.

Ative as APIs

Console do Google Cloud

  1. No console do Google Cloud, ative a API Google Chat, a API Google Docs as APIs Admin SDK e Vertex AI.

    Ativar as APIs

  2. Confirme se você está ativando as APIs projeto do Google Cloud e clique em Próxima.

  3. Confirme se você está ativando as APIs corretas e clique em Ativar.

CLI da gcloud

  1. Se necessário, defina o projeto do Cloud atual como o que você criou pelo comando gcloud config set project:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto da do Google Cloud que você criou.

  2. Ative a API Google Chat, a API Google Docs, a API Admin SDK e a API Vertex AI pelo comando gcloud services enable:

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

Configurar a autenticação e a autorização

Com a autenticação e a autorização, Recursos de acesso a apps do Chat no Google Workspace e o Google Cloud para processar uma resposta a incidentes.

Neste tutorial, você vai publicar o app internamente, então não há problema em usar o marcador de posição informações imprecisas ou inadequadas. Antes de publicar o app externamente, substitua o marcador informações reais para a tela de consentimento.

  1. No console do Google Cloud, acesse Cardápio > APIs e Serviços > Tela de permissão OAuth.

    Acessar a tela de permissão OAuth

  2. Em Tipo de usuário, selecione Interno e clique em Criar.

  3. Em Nome do app, digite Incident Management.

  4. Em E-mail para suporte do usuário, selecione seu endereço de e-mail ou uma grupo do Google.

  5. Em Dados de contato do desenvolvedor, insira seu endereço de e-mail.

  6. Clique em Salvar e continuar.

  7. Clique em Adicionar ou remover escopos. Será exibido um painel com uma lista de escopos. para cada API ativada no projeto do Cloud.

  8. Em Adicionar escopos manualmente, cole os seguintes escopos:

    • 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. Clique em Adicionar à tabela.

  10. Clique em Atualizar.

  11. Clique em Salvar e continuar.

  12. Leia o resumo do registro do app e clique em Voltar ao painel.

Criar e implantar o app do Chat

Na seção a seguir, você vai copiar e atualizar um Projeto do Apps Script que contém todos os aplicativos necessários para o app do Chat. Por isso, não é necessário copiar e e colar cada arquivo.

Algumas funções incluem sublinhados no final dos nomes, como processSlashCommand_() de ChatApp.gs. O sublinhado oculta a função da página da Web de inicialização do incidente quando ele é aberto em um navegador. Para mais informações, consulte Funções particulares.

O Apps Script oferece suporte a dois tipos de arquivo: scripts .gs e .html. . Para respeitar esse suporte, o JavaScript do lado do cliente do app é incluído nas tags <script />, e o CSS delas é incluído em tags <style /> na um arquivo HTML.

Outra opção é acessar o projeto inteiro no GitHub.

Ver no GitHub

Esta é uma visão geral de cada arquivo:

Consts.gs

Define as constantes referenciadas por outros arquivos de código, incluindo o ID do projeto do Cloud, o ID do local da Vertex AI e os ID de comando de barra para encerrar um incidente.

Ver código do app 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

Lida com eventos de interação do Chat, incluindo: mensagens, cliques em cards, comandos de barra e caixas de diálogo. Responde ao evento Comando de barra /closeIncident abrindo uma caixa de diálogo para coletar o incidente detalhes da resolução. Lê mensagens no espaço chamando Método spaces.messages.list na API Chat. Recebe IDs de usuário com o serviço Diretório do SDK Admin no Apps Script.

Ver código do app 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

Recebe os dados do formulário que os usuários inserem no incidente página da Web de inicialização do aplicativo e a usa para configurar criando e preenchendo-o e publicando uma mensagem sobre o o incidente.

Ver código do app 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

Chama a API Google Docs para criar um documento do Google Docs em um Google Drive do usuário e um resumo das informações do incidente, criado em VertexAiApi.gs ao documento.

Ver código do app 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

Resume a conversa no Chat usando a Vertex AI. Esse resumo é publicado em um espaço criado documento em DocsAPI.gs.

Ver código do app 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

Disponibiliza o site de inicialização do incidente.

Ver código do app 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

O HTML do site de inicialização de incidentes.

Ver código do app 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

Lida com o comportamento do formulário, incluindo envios, erros, e apaga, para o site de inicialização de incidentes. Está incluído em Index.html pela função include personalizada em WebController.gs.

Ver código do app 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

O CSS do site de inicialização do incidente. Está incluída em Index.html pela função include personalizada WebController.gs

Ver código do app 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>

Encontrar o número e o ID do projeto do Cloud

  1. No console do Google Cloud, acesse seu projeto do Cloud.

    Acessar o Console do Google Cloud

  2. Clique em "Configurações e utilitários" &gt; Configurações do projeto.

  3. Anote os valores nos campos Número do projeto e ID do projeto. Você usá-los nas seções a seguir.

Criar o projeto do Apps Script

Para criar um projeto do Apps Script e conectá-lo à sua Projeto do Google Cloud:

  1. Clique no botão a seguir para abrir o projeto do Apps Script Responder a incidentes com o Google Chat.
    Abrir o projeto.
  2. Clique em Overview.
  3. Na página de visão geral, clique em O ícone para fazer uma cópia Fazer uma cópia.
  4. Nomeie sua cópia do projeto do Apps Script:

    1. Clique em Cópia de Responder a incidentes com o Google Chat.

    2. Em Título do projeto, digite Incident Management Chat app.

    3. Clique em Renomear.

  5. Na sua cópia do projeto do Apps Script, acesse Consts.gs e substitua YOUR_PROJECT_ID pelo ID do seu do Google Cloud.

Definir o projeto do Cloud do projeto do Apps Script

  1. No seu projeto do Apps Script, Clique em O ícone das configurações do projeto Configurações do projeto.
  2. Em Projeto do Google Cloud Platform (GCP), clique em Mudar projeto.
  3. Em Número do projeto do GCP, cole o número do projeto do Cloud.
  4. Clique em Configurar projeto. O projeto do Cloud e o Apps Script estão conectadas.

Criar uma implantação do Apps Script

Agora que todo o código está no lugar, implante o Apps Script projeto. O ID de implantação é usado para configurar Chat no Google Cloud.

  1. No Apps Script, abra o projeto do app de resposta a incidentes.

    Acessar o Apps Script

  2. Clique em Implantar > Nova implantação.

  3. Se Complemento e App da Web ainda não estiverem selecionados, ao lado de Selecionar tipo, clique nos tipos de implantação O ícone das configurações do projeto e selecione Complemento e App da Web.

  4. Em Descrição, digite uma descrição para essa versão, como Complete version of incident management app

  5. Em Executar como, selecione Usuário acessando o app da Web.

  6. Em Quem pode acessar, selecione Qualquer pessoa na sua organização do Workspace. em que "sua organização do Workspace" é o nome do seu organização do Google Workspace.

  7. Clique em Implantar. Relatórios do Apps Script concluídos implantação e fornece um ID de implantação e um URL para a solicitação página da Web de inicialização.

  8. Anote o URL do app da Web para acessar mais tarde ao iniciar um incidente. Copie o ID da implantação. Ele é usado durante a configuração do App de chat no console do Google Cloud.

  9. Clique em Concluído.

Configurar o app do Chat no console do Google Cloud

Esta seção mostra como configurar a API Google Chat no console do Google Cloud com informações sobre o app do Chat, incluindo ID da implantação que você acabou de criar a partir do seu Apps Script projeto.

  1. No console do Google Cloud, clique em Menu &gt; Mais produtos &gt; Google Workspace &gt; Biblioteca de produtos &gt; API Google Chat &gt; Gerenciar &gt; Configuração.

    Acessar a configuração da API Chat

  2. Em Nome do app, digite Incident Management.

  3. No URL do avatar, digite https://developers.google.com/chat/images/quickstart-app-avatar.png.

  4. Em Descrição, digite Responds to incidents..

  5. Clique no botão Ativar recursos interativos para ativar essa opção.

  6. Em Funcionalidade, selecione Receber mensagens individuais, Participar de espaços e conversas em grupo.

  7. Em Configurações de conexão, selecione Projeto do Apps Script.

  8. Em Deployment ID, cole o ID de implantação do Apps Script que você copiou do projeto do Apps Script implantação do Google Workspace.

  9. Registre um comando de barra que usos do app do Chat totalmente implementado:

    1. Em Comandos de barra, clique em Adicionar um comando de barra.

    2. Em Nome, digite /closeIncident.

    3. Em ID do comando, digite 1.

    4. Em Descrição, digite Closes the incident being discussed in the space.

    5. Selecione Abre uma caixa de diálogo.

    6. Clique em Concluído. O comando de barra é registrado e listado.

  10. Em Visibilidade, selecione Disponibilizar este app do Chat para pessoas e grupos específicos na sua Workspace e digite seu endereço de e-mail.

  11. Em Registros, selecione Registrar erros no Logging.

  12. Clique em Salvar. Uma mensagem de configuração salva é exibida, indicando que o aplicativo é prontos para serem testados.

Teste o app do Chat

Para testar o app do Chat de gerenciamento de incidentes, inicie uma incidente da página da Web e verificar se o app do Chat funciona como esperado:

  1. Acesse o URL do app da Web de implantação do Apps Script.

  2. Quando o Apps Script pede permissão para acessar seus dados, clique em Analisar permissões e faça login com a Conta do Google apropriada. no domínio do Google Workspace e clique em Permitir.

  3. A página da Web de inicialização do incidente é aberta. Insira as informações do teste:

    1. Em Título do incidente, digite The First Incident.
    2. Em Responsáveis a incidentes, você também pode digitar os endereços de e-mail dos com outros profissionais de resposta a incidentes. Eles precisam ser usuários com conta do Google Chat na sua organização do Google Workspace ou falha ao criar um espaço. Não insira seu endereço de e-mail porque ele é incluído automaticamente.
    3. Em Mensagem inicial, digite Testing the incident management Chat app..
  4. Clique em Criar espaço do Chat. Uma mensagem creating space será exibida.

  5. Depois que o espaço é criado, a mensagem Space created! aparece. Clique em Abrir o espaço, que abre o espaço no Chat em uma nova guia.

  6. Opcionalmente, você e os outros responsáveis pela resposta a incidentes podem enviar mensagens no espaço. O app resume essas mensagens usando a Vertex AI e compartilha uma documento de retrospectiva.

  7. Para encerrar a resposta a incidentes e iniciar o processo de resolução, no Espaço do Chat. Digite /closeIncident. Um plano de gestão de incidentes a caixa de diálogo será aberta.

  8. Em Fechar incidente, digite uma descrição para a resolução do incidente. como Test complete.

  9. Clique em Fechar incidente.

O aplicativo de gerenciamento de incidentes lista as mensagens no espaço e as resume com a Vertex AI, cola o resumo em um arquivo dos Documentos Google e compartilha documento no espaço.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelo recursos usados neste tutorial, recomendamos que você exclua os do Google Cloud.

  1. No console do Google Cloud, acesse a página Gerenciar recursos. Clique em Cardápio &gt; IAM e Administrador &gt; Gerenciar recursos.

    Acessar o Resource Manager

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo o projeto.