Получение и обработка действий пользователей

На этой странице рассказывается, как приложение Google Chat может получать и обрабатывать действия пользователей в Google Chat.

Чтобы создавать интерактивные интерфейсы для приложений Chat, используйте следующие компоненты:

  • Триггеры. Способы, с помощью которых пользователи Google Chat могут вызывать приложение Chat, например добавлять его в чат-группу или отправлять ему сообщение.
  • Объекты событий. Данные, которые приложения Chat получают от триггеров или взаимодействий с интерфейсом.
  • Действия. Способы, которыми приложения Chat могут реагировать на взаимодействия, например отправлять сообщения или возвращать пользовательский интерфейс на основе карточек.
Приложение Chat получает объект события от триггера "Добавлено в чат-группу"
Рисунок 1. Когда пользователь добавляет приложение Chat в чат-группу, срабатывает триггер Добавлено в чат-группу и отправляется объект события. Чтобы ответить сообщением, приложение Chat обрабатывает объект события и возвращает действие, которое создает сообщение.

Приложения Chat могут создавать и показывать интерфейсы следующими способами:

Требования

Как работают взаимодействия с пользователем

Когда пользователь взаимодействует с приложением Chat, Google Chat вызывает настроенный триггер и отправляет объект события в конечную точку или функцию приложения Chat. Ваше приложение Chat обрабатывает объект события и может синхронно вернуть действие в течение 30 секунд или асинхронно ответить с помощью API Chat.

На следующей диаграмме показано, как приложения Google Chat обрабатывают действия пользователей и отвечают на них:

Архитектура обработки взаимодействий пользователей приложениями Google Chat.

Триггеры

Триггеры – это способы, которыми пользователи вызывают приложение Chat через интерфейс Chat, например с помощью упоминаний или команд приложения.

В таблице ниже перечислены триггеры Chat, их описание и типичные ответы приложений Chat.

Триггер Описание Типичный ответ
Добавлено в чат-группу

Пользователь добавляет приложение Chat в чат-группу или администратор Google Workspace устанавливает приложение Chat в чат-группы с прямыми переписками для пользователей в организации. Чтобы узнать больше о приложениях Chat, установленных администраторами, ознакомьтесь со статьей Как установить приложения из каталога Marketplace в своем домене в Справочном центре Google Workspace.

Приложение Chat отправляет сообщение с инструкциями, в котором объясняется, что оно делает и как пользователи чат-группы могут с ним взаимодействовать.
Сообщение

Пользователь взаимодействует с приложением Chat в сообщении одним из следующих способов:

  • Отправляет сообщение в прямой переписке (DM) с приложением Chat.
  • упоминает приложение Chat в чат-группе любого типа.
  • Отправляет сообщение, содержащее ссылку, которая соответствует шаблону URL для предварительного просмотра ссылок.
  • Вводит текст в меню с множественным выбором виджета selectionInput.
Приложение Chat отвечает на основе содержания сообщения. Например, чат-приложение отвечает на сообщение, прикрепляет карточку с предпросмотром ссылки или предлагает варианты в меню с возможностью выбора нескольких пунктов.
Удалено из чат-группы

Пользователь удаляет приложение Chat из чат-группы или администратор Google Workspace удаляет приложение Chat для пользователя в организации.

Пользователи не могут удалять приложения Chat, установленные администратором. Если пользователь ранее установил приложение Chat, оно останется на устройстве независимо от того, попытается ли администратор Google Workspace удалить его.

Приложение Chat удаляет все входящие уведомления, настроенные для чат-группы (например, удаляет веб-перехватчик), и очищает внутреннее хранилище. Приложения для обмена сообщениями не могут отвечать на этот триггер, поскольку они больше не являются участниками чат-группы.
Команда приложения

Пользователь вызывает команду приложения Chat (например, слеш-команду, быструю команду или действие с сообщением).

Приложение Chat ответит на команду. Например, он может ответить сообщением или открыть диалоговое окно.
Приложение Home

Пользователь открывает вкладку Главная в прямой переписке с приложением Chat или взаимодействует с виджетом на карточке главной страницы.

Приложение Chat возвращает объект RenderActions, который отправляет карточку главной страницы (pushCard) или обновляет отображаемую карточку главной страницы (updateCard).

Настроить конечные точки или функции обратного вызова для этих триггеров можно в консоли Google Cloud на странице Конфигурация Chat API. Пошаговые инструкции приведены в статье Как настроить Google Chat API.

Как настроить начальные запросы

Стартовые подсказки помогают пользователям узнать о функциях приложения Chat, когда они открывают пустую прямую переписку с ним. Вы можете настроить до трех стартовых подсказок.

Чтобы добавить и настроить стартовые запросы:

  1. В консоли Google Cloud перейдите на страницу Configuration (Конфигурация) Chat API:

    Перейти на страницу конфигурации Chat API

  2. В разделе Интерактивные функции найдите Подсказки для начала и нажмите Добавить подсказку.

  3. В поле Ранг (1–3) введите число от 1 до 3, чтобы задать порядок показа.

  4. В разделе Выбор типа укажите, как будет работать запрос:

    • Текстовый запрос: При нажатии на чип запроса в поле чата появляется заданный текст.
    • Командная строка: При нажатии выполняется зарегистрированная слеш-команда или быстрая команда. Команды, требующие дополнительных аргументов, выбрать нельзя.
  5. Настройте запрос в зависимости от выбранного типа:

    • Если вы выбрали текстовый запрос:

      1. В поле Заголовок введите заголовок подсказки, который будет показываться на чипе (до 30 символов).
      2. В поле Текст запроса введите текст, который будет отображаться на панели создания письма (до 60 символов).
      3. Вы можете добавить локализованные названия и текст для пользователей, говорящих на других языках:
      4. В разделе Локализованные подсказки нажмите Добавить язык.
      5. В разделе Язык выберите поддерживаемый язык из раскрывающегося списка.
      6. В поле Локализованное название введите название на нужном языке (до 30 символов).
      7. В поле Локализованный текст запроса введите текст запроса на нужном языке (до 60 символов).
      8. Повторите эти действия, чтобы добавить другие языки.
    • Если вы выбрали "Командная строка":

      1. В разделе Слеш-команда / Быстрая команда выберите команду из раскрывающегося списка.
  6. Нажмите Готово, а затем Сохранить внизу страницы.

Обрабатывайте повторные вызовы HTTP к сервису.

Если HTTPS-запрос к вашему сервису не удастся выполнить (например, из-за истечения времени ожидания, временного сбоя сети или кода статуса HTTPS, отличного от 2xx), Google Chat может повторить попытку доставки несколько раз в течение нескольких минут (но это не гарантируется). В результате приложение Chat может получить одно и то же событие несколько раз. Если запрос выполнен успешно, но возвращает недопустимую полезную нагрузку ответа, Google Chat не повторяет запрос.

Объекты событий

Приложения Chat получают объекты событий, когда запускается триггер Chat или когда пользователи Chat взаимодействуют с интерфейсом приложения Chat (например, нажимают кнопку или отправляют диалоговое окно). Объект события позволяет использовать данные о взаимодействии для ответа или обновления пользовательского интерфейса.

Полезная нагрузка объекта события

Каждый объект события Chat содержит объект commonEventObject с информацией о хосте и платформе (hostApp: "CHAT", clientPlatform, userLocale, userTimezone, parameters и formInputs) и объект chat с контекстом, относящимся к Chat:

  • Для триггера Главная страница приложения (когда пользователь открывает вкладку Главная в прямом чате с приложением Chat) объект chat содержит поля chat.user и chat.eventTime без поля объединения payload. Когда пользователь нажимает кнопку на карточке главной страницы, объект события включает chat.buttonClickedPayload, а также commonEventObject.parameters (и commonEventObject.formInputs, если на карточке есть поля формы).
  • Для взаимодействий с чат-группами и сообщениями (Добавлено в чат-группу, Сообщение, Удалено из чат-группы, Команда приложения или взаимодействия с кнопками и виджетами) объект chat включает chat.user, chat.space, chat.eventTime и соответствующую полезную нагрузку взаимодействия:
    • messagePayload: содержит space, message и configCompleteRedirectUri, когда пользователь отправляет сообщение.
    • addedToSpacePayload – содержит space, interactionAdd и configCompleteRedirectUri, когда приложение Chat добавляется в чат-группу.
    • removedFromSpacePayload: содержит space, когда приложение Chat удаляется из чат-группы.
    • buttonClickedPayload: содержит space, message, isDialogEvent и dialogEventType, когда пользователь нажимает кнопку на карточке или в диалоговом окне.
    • widgetUpdatedPayload: содержит space, когда пользователь взаимодействует с виджетом, например вводит текст в меню с множественным выбором и внешним источником данных.
    • appCommandPayload – содержит space, message, appCommandMetadata, isDialogEvent, dialogEventType и configCompleteRedirectUri, когда пользователь вызывает команду приложения.

Чтобы узнать больше об объектах событий дополнений в Chat и других приложениях Google Workspace, ознакомьтесь со статьей Объекты событий.

Как предоставить ответ

В этом разделе рассказывается, как приложения Chat используют действия для синхронного ответа на действия пользователей.

Чтобы ответить действием, приложение Chat должно ответить в течение 30 секунд, и ответ должен относиться к чат-группе, в которой произошло взаимодействие. Для этих синхронных ответов аутентификация не требуется. Если приложению Chat требуется больше 30 секунд или нужно выполнить действие за пределами чат-группы, настройте аутентификацию и асинхронный ответ с помощью API Google Chat.

Чтобы синхронно реагировать на действия пользователей, приложение Chat обрабатывает входящий объект события и возвращает один из следующих объектов JSON:

В таблице ниже показано, как приложения Chat могут отвечать с помощью действий. Приложения Chat могут возвращать объекты JSON напрямую или создавать ответ с помощью функций AddOnResponseService и CardService Apps Script.

Ответ приложения для чата Обязательное действие для возврата (JSON) Действие, необходимое для возврата (Apps Script)
Отправить сообщение или изменить сообщение. DataActions (createMessageAction или updateMessageAction) DataActionsResponse
Предварительный просмотр ссылок в сообщениях, которые пользователи Chat отправляют в чат-группу. DataActions (updateInlinePreviewAction) DataActionsResponse
Отображать или обновлять главную страницу на вкладке Главная в чате. RenderActions (pushCard или updateCard) ActionResponse
Открыть, обновить или закрыть диалоговое окно. RenderActions (pushCard, updateCard или endNavigation: "CLOSE_DIALOG") ActionResponse
Чтобы собирать информацию с карточки или диалогового окна, предлагайте варианты выбора на основе того, что пользователи вводят в меню с множественным выбором. RenderActions (modifyCard) ActionResponse
Запросить конфигурацию или авторизацию для внешнего сервиса. AuthorizationError (basic_authorization_prompt) AuthorizationException

Отправить в ответ сообщение

Приложения Chat могут отвечать на следующие триггеры и взаимодействия:

  • Сообщение активирует, например когда пользователи упоминают чат-приложение через символ @или отправляют ему прямое сообщение.
  • Триггеры "Добавлено в чат-группу", например когда пользователи устанавливают приложение Chat из Google Workspace Marketplace или добавляют его в чат-группу.
  • Триггеры команд приложения, например когда пользователи вызывают слеш-команду или быструю команду.
  • Нажатия кнопок на карточках в сообщениях или диалоговых окнах. Например, когда пользователи вводят информацию и нажимают кнопку отправки.

Приложения Chat могут включать в сообщения следующие элементы:

  • Текст, содержащий гиперссылки, упоминания и эмодзи. Подробнее о том, как форматировать текст письма…
  • Одна или несколько карточек, которые могут быть встроены в письмо или открываться в новом окне в виде диалогового окна. Подробнее о том, как создавать карточки для приложений Google Chat…
  • Один или несколько дополнительных виджетов, которые представляют собой кнопки, появляющиеся после текста или карточек в письме.

Чтобы ответить на сообщение, верните DataActions с объектом CreateMessageAction:

{
  "hostAppDataAction": {
    "chatDataAction": {
      "createMessageAction": {
        "message": <var>MESSAGE</var>
      }
    }
  }
}

Замените MESSAGE на Message ресурс из Chat API.

В следующем примере приложение Chat создает и отправляет текстовое сообщение с инструкциями при каждом добавлении в чат-группу. Это происходит в ответ на триггер Добавлено в чат-группу с помощью DataActions:

Node.js

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} req The request object from Google Chat.
 * @param {Object} res The response object from the Chat app.
 */
exports.cymbalApp = function cymbalApp(req, res) {
  const chatEvent = req.body.chat;
  // Send an onboarding message when added to a Chat space
  if (chatEvent.addedToSpacePayload) {
    res.json({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
      text: 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
    }}}}});
  }
};

Python

from flask import Flask, request, json
app = Flask(__name__)

@app.route('/', methods=['POST'])
def cymbal_app():
  """Sends an onboarding message when the Chat app is added to a space.

  Returns:
    Mapping[str, Any]: The response object from the Chat app.
  """
  chat_event = request.get_json()["chat"]
  if "addedToSpacePayload" in chat_event:
    return json.jsonify({ "hostAppDataAction": { "chatDataAction": {
      "createMessageAction": { "message": {
        "text": 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
        'To learn what else I can do, type `/help`.'
      }}
    }}})

Java

@SpringBootApplication
@RestController
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }

  /*
   * Sends an onboarding message when the Chat app is added to a space.
   *
   * @return The response object from the Chat app.
   */
  @PostMapping("/")
  @ResponseBody
  public GenericJson onEvent(@RequestBody JsonNode event) throws Exception {
    JsonNode chatEvent = event.at("/chat");
    if (!chatEvent.at("/addedToSpacePayload").isEmpty()) {
      return new GenericJson() { {
        put("hostAppDataAction", new GenericJson() { {
          put("chatDataAction", new GenericJson() { {
            put("createMessageAction", new GenericJson() { {
              put("message", new Message().setText(
                "Hi, Cymbal at your service. I help you manage your calendar " +
                "from Google Chat. Take a look at your schedule today by typing " +
                "`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. " +
                "To learn what else I can do, type `/help`."
              ));
            } });
          } });
        } });
      } };
    }
    return new GenericJson();
  }
}

Apps Script

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} event The event object from Google Chat.
 * @return {Object} Response from the Chat app.
 */
function onAddedToSpace(event) {
  return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
    text: 'Hi, Cymbal at your service. I help you manage your calendar ' +
          'from Google Chat. Take a look at your schedule today by typing ' +
          '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. ' +
          'To learn what else I can do, type `/help`.'
  }}}}};
}

Пример кода возвращает следующее текстовое сообщение:

Пример сообщения для регистрации.

Как изменить сообщение

Приложения для чата также могут изменять отправленные ими сообщения. Например, приложение для чата может обновить сообщение после того, как пользователь отправит диалоговое окно или нажмет кнопку на карточке в сообщении.

Чтобы обновить сообщение приложения Chat в ответ на взаимодействие, верните DataActions с UpdateMessageAction:

{
  "hostAppDataAction": {
    "chatDataAction": {
      "updateMessageAction": {
        "message": <var>MESSAGE</var>
      }
    }
  }
}

Замените MESSAGE на Message ресурс из Chat API.

Приложения для Chat также могут обновлять сообщения, отправленные пользователем, чтобы прикрепить к ним карточку предпросмотра ссылки с помощью updateInlinePreviewAction. Подробнее о предварительном просмотре ссылок…

Как отвечать асинхронно с помощью API Google Chat

Вместо того чтобы возвращать действие синхронно, приложения Chat могут вызывать Google Chat API, чтобы ответить на взаимодействие или отправить проактивные сообщения. Например, приложения Chat должны вызывать Google Chat API, чтобы выполнять следующие действия:

  • Отвечать на взаимодействие через 30 секунд (например, после завершения длительной задачи).
  • Отправлять сообщения по расписанию или уведомления об изменениях во внешних ресурсах.
  • выполнять задачи за пределами чат-группы, в которой произошло взаимодействие;
  • Выполнять в Chat задачи, которые недоступны в виде синхронных действий, например составлять список чат-групп или добавлять участников в чат-группу.
  • Выполнять задачи от имени пользователя Chat (требуется аутентификация пользователя).

Чтобы избежать пользовательского сообщения об ошибке, которое будет показано пользователю и сообщит, что ваше приложение Chat не отвечает, при ответе на взаимодействие, которое произошло более 30 секунд назад, вы должны подтвердить получение объекта события в течение 30 секунд, вернув пустой ответ:

Node.js

async function onEvent(req, res) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return res.send({});
};

Python

def on_event(event) -> dict:
  # Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return {}

Java

public String onEvent(JsonNode event) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return "{}";
}

Apps Script

function onEvent(event) {
  // Trigger asynchronous job that will respond using the Google Chat API.
  ...

  // Respond with an empty response to the Google Chat platform.
  return null;
}

Чтобы отправить сообщение с помощью Chat API, настройте аутентификацию и вызовите метод spaces.messages.create. Подробнее о том, как отправить сообщение… Руководства по использованию дополнительных методов Chat API можно найти в обзоре Chat API.

Приложения Chat, не являющиеся дополнениями: получение и обработка действий пользователей

Приложения Chat, которые не являются дополнениями Google Workspace, получают события взаимодействия с Chat API (Event) вместо объектов событий дополнения Google Workspace (EventObject) и отвечают, возвращая ресурс Message вместо действия.

Чтобы преобразовать приложение Chat, которое не является дополнением, в дополнение Google Workspace, ознакомьтесь со статьей Как преобразовать приложение Google Chat в дополнение Google Workspace.

Типы событий взаимодействия

Для каждого типа взаимодействия с пользователем Google Chat отправляет приложению Chat, которое не является дополнением, объект Event, тип которого представлен полем eventType:

Взаимодействие с пользователем eventType Типичный ответ приложения Chat, не являющегося дополнением
Пользователь отправляет сообщение приложению Chat, например упоминает его с помощью символа @ или использует слеш-команду. MESSAGE Приложение Chat отвечает на основе содержимого сообщения. Например, приложение Chat отвечает на слеш-команду /about сообщением с описанием задач, которые оно может выполнять.
Пользователь добавляет приложение Chat в чат-группу. ADDED_TO_SPACE Приложение Chat отправляет приветственное сообщение, в котором рассказывается о его функциях и о том, как пользователи чат-группы могут с ним взаимодействовать.
Пользователь удаляет приложение Chat из чат-группы. REMOVED_FROM_SPACE Приложение Chat удаляет все входящие уведомления, настроенные для чат-группы (например, удаляет веб-перехватчик), и очищает внутреннее хранилище.
Пользователь нажимает кнопку на карточке в сообщении, диалоговом окне или на главной странице приложения Chat. CARD_CLICKED Приложение Chat обрабатывает и сохраняет все данные, отправленные пользователем, или возвращает другую карточку.
Пользователь открывает главную страницу приложения Chat, нажав на вкладку Главная в переписке 1:1. APP_HOME Приложение Chat возвращает статическую или интерактивную карточку с главной страницы.
Пользователь отправляет форму с главной страницы приложения Chat. SUBMIT_FORM Приложение Chat обрабатывает и сохраняет все данные, отправленные пользователем, или возвращает другую карточку.
Пользователь вызывает команду с помощью быстрой команды. APP_COMMAND Приложение Chat отвечает на основе вызванной команды. Например, приложение Chat отвечает на команду О приложении сообщением с описанием задач, которые оно может выполнять.

Чтобы посмотреть все поддерживаемые события взаимодействия и примеры полезной нагрузки JSON, ознакомьтесь с разделом Типы событий взаимодействия с приложениями Chat и справочной документацией по объекту EventType.

События взаимодействия в диалоговых окнах

Если приложение Chat, которое не является дополнением, открывает диалоговые окна, событие взаимодействия содержит следующую дополнительную информацию, которую можно использовать для обработки ответа:

  • В поле isDialogEvent задано значение true.
  • DialogEventType (REQUEST_DIALOG, SUBMIT_DIALOG или CANCEL_DIALOG) указывает, приводит ли взаимодействие к открытию, отправке или закрытию диалогового окна.

Как настроить приложение Chat, которое не является дополнением, для получения событий взаимодействия

  1. В консоли Google Cloud перейдите на страницу Configuration (Конфигурация) Chat API:

    Перейти на страницу конфигурации Chat API

  2. В разделе Интерактивные функции снимите флажок Создать это приложение Chat как дополнение Google Workspace и настройте Функциональность, одну конечную точку Настроек подключения (URL конечной точки HTTP, Apps Script, название темы Cloud Pub/Sub или Dialogflow), Команды, Варианты запросов, Предварительный просмотр ссылок и Видимость.

  3. Нажмите Сохранить.

Как ответить на сообщение в приложении Chat, которое не является дополнением

Чтобы ответить синхронно в приложении Chat, которое не является дополнением, верните объект Message напрямую. В примере ниже показано, как ответить на событие взаимодействия ADDED_TO_SPACE текстовым сообщением:

Node.js

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} req The event object from Chat API.
 * @param {Object} res The response object from the Chat app.
 */
exports.cymbalApp = function cymbalApp(req, res) {
  // Send an onboarding message when added to a Chat space
  if (req.body.type === 'ADDED_TO_SPACE') {
    res.json({
      'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
        'from Google Chat. Take a look at your schedule today by typing ' +
        '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To ' +
        'learn what else I can do, type `/help`.'
    });
  }
};

Python

from flask import Flask, request, json
app = Flask(__name__)

@app.route('/', methods=['POST'])
def cymbal_app():
  """Sends an onboarding message when the Chat app is added to a space.

  Returns:
    Mapping[str, Any]: The response object from the Chat app.
  """
  event = request.get_json()
  if event['type'] == 'ADDED_TO_SPACE':
    return json.jsonify({
      'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
      'from Google Chat. Take a look at your schedule today by typing ' +
      '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To ' +
      'learn what else I can do, type `/help`.'
    })
  return json.jsonify({})

Java

@SpringBootApplication
@RestController
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }

  /*
   * Sends an onboarding message when the Chat app is added to a space.
   *
   * @return The response object from the Chat app.
   */
  @PostMapping("/")
  @ResponseBody
  public Message onEvent(@RequestBody JsonNode event) {
    switch (event.get("type").asText()) {
      case "ADDED_TO_SPACE":
        return new Message().setText(
          "Hi, Cymbal at your service. I help you manage your calendar " +
          "from Google Chat. Take a look at your schedule today by typing " +
          "`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. " +
          "To learn what else I can do, type `/help`.");
      default:
        return new Message();
    }
  }
}

Apps Script

/**
 * Sends an onboarding message when the Chat app is added to a space.
 *
 * @param {Object} event The event object from Chat API.
 * @return {Object} Response from the Chat app.
 */
function onAddToSpace(event) {
  return {
    'text': 'Hi, Cymbal at your service. I help you manage your calendar ' +
      'from Google Chat. Take a look at your schedule today by typing ' +
      '`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To learn ' +
      'what else I can do, type `/help`.'
  };
}