Если вы создали и опубликовали приложение Google Chat, использующее события взаимодействия API Google Chat, например, приложение, основанное на кратком руководстве по приложению Google Chat , на этой странице показано, как преобразовать его в дополнение Google Workspace, расширяющее возможности Google Chat.
После конвертации ваше приложение Google Chat сможет использовать фреймворк дополнений Google Workspace, открывая новые возможности для интеграции и расширения функций внутри Google Chat и всего Google Workspace. Например, вместо двух дистрибутивов — одного приложения Google Chat и одного дополнения Google Workspace — вы можете распространять одно дополнение Google Workspace через Google Workspace Marketplace, которое расширяет возможности приложений Chat и других приложений Google Workspace, таких как Gmail, Календарь и Документы.
Ограничения
Перед началом преобразования ознакомьтесь с ограничениями дополнений Google Workspace, расширяющих возможности Google Chat, чтобы убедиться, что ваше приложение Google Chat можно преобразовать без потери основных функций.
Шаг 1: Скопируйте существующий код приложения Google Chat
Процесс конвертации требует внесения изменений в код. Чтобы избежать влияния на работу вашего приложения Google Chat, создайте копию кода и работайте с ней.
Скрипт приложений
- Откройте существующий проект скрипта Google Apps для приложения Google Chat.
- Слева нажмите Обзорная .
- Справа нажмите Сделать копию .
- Слева нажмите проекта .
- В разделе «Проект Google Cloud» нажмите «Изменить проект» .
- Введите тот же номер проекта, который связан с вашим существующим проектом приложения Google Chat.
- Нажмите Установить проект .
HTTP
Создайте ответвление или копию существующей кодовой базы и разверните ее как новую службу, отдельную от вашего действующего приложения Google Chat.
Если ваше приложение развернуто в Google Cloud и использует функции, привязанные к проекту Google Cloud (например, идентификатор App Engine по умолчанию), новый код следует развернуть в службе, связанной с существующим проектом приложения Google Chat.
Шаг 2: Измените скопированный код.
Дополнения Google Workspace, расширяющие возможности Google Chat, используют структуры запросов и ответов, отличные от структур приложений Google Chat, созданных с использованием событий взаимодействия с API чата. Вам необходимо обновить код, чтобы использовать EventObject дополнения Google Workspace вместо Event API Google Chat для запросов и ответов. Чтобы изменить код, воспользуйтесь руководством по преобразованию кода.
Шаг 3: Включите конфигурацию надстройки Google Workspace для тестовых пользователей.
Используйте консоль Google Cloud для настройки параметров надстройки Google Workspace для вашего приложения Google Chat:
Перейдите на страницу конфигурации API Google Chat в консоли Google Cloud.
В разделе «Интерактивные функции» нажмите «Преобразовать в дополнение» .
Enable Turn on add-on configuration settings .
В разделе «Видимость» добавьте адреса электронной почты тестовых пользователей.
При необходимости обновите параметры подключения , указав URL-адрес конечной точки развертывания или идентификатор развертывания Apps Script скопированного и измененного вами кода приложения Google Chat из шага 2.
Нажмите «Сохранить и протестировать» .
Шаг 4: протестируйте преобразованное приложение
Тщательно протестируйте функциональность надстройки Google Workspace, используя тестовые учетные записи пользователей, настроенные на шаге 3. Проверьте все функции и взаимодействия.
Шаг 5: Завершите конвертацию для всех пользователей.
Убедившись, что преобразованное дополнение Google Workspace работает корректно, вы можете сделать его доступным для всех пользователей.
Перейдите на страницу конфигурации API Google Chat в консоли Google Cloud.
В разделе «Интерактивные функции» нажмите «Преобразовать в дополнение» . Откроется боковая панель.
На боковой панели нажмите Преобразовать в дополнение .
Введите идентификатор вашего проекта и нажмите «Конвертировать» .
Ваше приложение Google Chat теперь представляет собой дополнение Google Workspace, расширяющее возможности Google Chat.
Дополнительно: очистите или освободите неиспользуемые ресурсы Google Cloud.
При желании после преобразования приложения Google Chat в дополнение к Google Workspace рассмотрите возможность отключения этих ресурсов, чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые приложением Google Chat, которые больше не используются.
Руководство по перекодировке кодов
В этом разделе подробно описывается сопоставление формата Event взаимодействия API Google Chat и формата EventObject надстройки Google Workspace.
Запрос сопоставления
В следующей таблице показано, как поля в Event API Google Chat сопоставляются с соответствующими полями в надстройке Google Workspace EventObject .
Поле Event взаимодействия API Google Chat | Поле EventObject надстройки Google Workspace | Примечания |
|---|---|---|
action.actionMethodName | Н/Д | Для взаимодействия с картами имя метода можно передать в качестве параметра в commonEventObject.parameters . См. раздел Открытие начального диалога . |
action.parameters | commonEventObject.parameters | |
appCommandMetadata | chat.appCommandPayload.appCommandMetadata | |
common | commonEventObject | |
configCompleteRedirectUrl |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
dialogEventType |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
eventTime | chat.eventTime | |
isDialogEvent |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
message |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
space |
| |
thread |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
threadKey |
| Доступны различные варианты полезной нагрузки в зависимости от типа события. |
token | Н/Д | Проверка обрабатывается по-другому, см. Запрос проверки для HTTP-приложений . |
type | Н/Д | Тип события можно вывести из триггера . |
user | chat.user |
Запрос сопоставления по варианту использования
В следующей таблице показаны различия в полезной нагрузке запросов для распространенных вариантов использования между приложениями Google Chat, созданными с использованием событий взаимодействия Chat API, и надстройками Google Workspace, расширяющими Google Chat.
| Вариант использования | Взаимодействие API чата Полезная нагрузка Event | Дополнение Google Workspace EventObject Payload |
|---|---|---|
| Приложение добавлено в раздел | { "type": "ADDED_TO_SPACE", "space": { ... } } | { "chat": { "addedToSpacePayload": { "space": { ... } } } } |
| Удалить приложение из пространства | { "type": "REMOVED_FROM_SPACE", "space": { ... } } | { "chat": { "removedFromSpacePayload": { "space": { ... } } } } |
| Пользователь @-упоминает приложение | { "type": "MESSAGE", "message": { ... }, "space": { ... }, "configCompleteRedirectUrl": "..." } | { "chat": { "messagePayload": { "message": { ... }, "space": { ... }, "configCompleteRedirectUri": "..." } } } |
| Пользователь @-упоминает приложение, чтобы добавить его в пространство | Вам необходимо обработать один запрос из Google Chat:{ "type": "ADDED_TO_SPACE", "space": { ... }, "message": { ... } } | Вам необходимо обработать два запроса из Google Chat. Первый запрос: { "chat": { "addedToSpacePayload": { "space": { ... }, "interactionAdd": true } } } Второй запрос: { "chat": { "messagePayload": { "message": { ... }, "space": { ... } } } } |
| Команда «слэш» | { "type": "MESSAGE", "message": { "slashCommand": { ... } }, "space": { ... } } | { "chat": { "appCommandPayload": { "message": { ... }, "space": { ... }, "appCommandMetadata": { ... } } } } |
| Команда «слэш» для добавления приложения в пространство | Вам необходимо обработать один запрос из Google Chat: { "type": "ADDED_TO_SPACE", "space": { ... }, "message": { "slashCommand": { ... } } } | Вам необходимо обработать два запроса из Google Chat. Первый запрос: { "chat": { "addedToSpacePayload": { "space": { ... }, "interactionAdd": true } } } Второй запрос: { "chat": { "appCommandPayload": { "message": { ... }, "space": { ... }, "appCommandMetadata": { ... } } } } |
| Пользователь нажимает кнопку на карточке или в диалоговом окне | { "type": "CARD_CLICKED", "common": { ... }, "space": { ... }, "message": { ... }, "isDialogEvent": "...", "dialogEventType": "..." } Для событий диалога { "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }} } } }, "space": { ... }, "message": { ... }, "isDialogEvent": true, "dialogEventType": "..." } | { "commonEventObject": { ... }, "chat": { "buttonClickedPayload": { "message": { ... }, "space": { ... }, "isDialogEvent": "...", "dialogEventType": "..." } } } Для событий диалога { "commonEventObject": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] } } } }, "chat": { "buttonClickedPayload": { "message": { ... }, "space": { ... }, "isDialogEvent": "true", "dialogEventType": "..." } } } |
| Пользователь отправляет информацию на главную страницу приложения | { "type": "SUBMIT_FORM", "common": { ... }, "space": { ... }, "message": { ... }, "isDialogEvent": "...", "dialogEventType": "..." } | { "commonEventObject": { ... }, "chat": { "buttonClickedPayload": { "message": { ... }, "space": { ... }, "isDialogEvent": "...", "dialogEventType": "SUBMIT_DIALOG" } } } |
| Пользователь вызывает команду приложения с помощью быстрой команды | { "type": "APP_COMMAND", "space": { ... }, "isDialogEvent": "...", "dialogEventType": "..." } | { "chat": { "appCommandPayload": { "message": { ... }, "space": { ... }, "appCommandMetadata": { ... } } } } |
| Предварительный просмотр ссылки | { "type": "MESSAGE", "message": { "matchedUrl": "..." }, "space": { ... } } | { "chat": { "messagePayload": { "message": { "matchedUrl": "..." }, "space": { ... } } } } |
| Пользователь обновляет виджет в карточном сообщении или диалоге. | { "type": "WIDGET_UPDATED", "space": { ... }, "common": { ... } } | { "commonEventObject": { ... }, "chat": { "widgetUpdatedPayload": { "space": { ... } } } } |
Картирование ответов по вариантам использования
Дополнения Google Workspace, расширяющие возможности Google Chat, возвращают действия вместо объекта Message . В следующей таблице типы Message Google Chat API сопоставляются с их эквивалентами действий в дополнениях Google Workspace.
| Вариант использования | Ответ Message API чата Google | Ответ на действие чата в дополнении Google Workspace |
|---|---|---|
| Создайте сообщение в вызванном пространстве. | { "actionResponse": { "type": "NEW_MESSAGE" }, "text": "..." }
| { "hostAppDataAction": { "chatDataAction": { "createMessageAction": { "message": { "text": "..." } } } } } Более подробную информацию можно узнать в разделе Отправить сообщение . |
| Обновить сообщение | { "actionResponse": { "type": "UPDATE_MESSAGE" }, "text": "..." } Более подробную информацию см. в разделе Обновление сообщения (чат) . | { "hostAppDataAction": { "chatDataAction": { "updateMessageAction": { "message": { "text": "..." } } } } } Более подробную информацию см. в разделе Обновление сообщения (дополнения) . |
| Предварительный просмотр ссылки | { "actionResponse": { "type": "UPDATE_USER_MESSAGE_CARDS" }, "cardsV2": [{ ... }] } Более подробную информацию см. в разделе Предварительный просмотр ссылки (чат) . | { "hostAppDataAction": { "chatDataAction": { "updateInlinePreviewAction": { "cardsV2": [{ ... }] } } } } Более подробную информацию см. в разделе Предварительный просмотр ссылки (дополнения) . |
| Открыть начальный диалог | { "actionResponse": { "type": "DIALOG", "dialogAction": { "dialog": { "body": { /* Card object */ } } } } } Более подробную информацию см. в разделе Открыть диалог (чат) . | { "action": { "navigations": [{ "pushCard": { /* Card object */ } }] } } Карточка, которую вы отправляете, может содержать виджеты с действиями onClick . Для HTTP-надстроек Google Workspace настройте эти действия на вызов конечной точки функции:{ "onClick": { "action": { "function": "https://...", "parameters": [{ "key": "clickedButton", "value": "submit" }] } } } Более подробную информацию см. в разделе Открытие диалога (дополнения) . |
| Закрыть диалог | { "actionResponse": { "type": "DIALOG", "dialogAction": { "actionStatus": { "userFacingMessage": "..." } } } } Более подробную информацию см. в разделе Закрыть диалог (чат) . | { "action": { "navigations": [{ "endNavigation": "CLOSE_DIALOG" }], "notification": { "text": "..."} } } Более подробную информацию см. в разделе Закрыть диалоговое окно (дополнения) . |
| Подключиться к внешней системе (запросить конфигурацию) | { "actionResponse": { "type": "REQUEST_CONFIG", "url": "..." } } Более подробную информацию см. в разделе Подключение к внешней системе . | { "basic_authorization_prompt": { "authorization_url": "...", "resource": "..." } } Дополнительную информацию см. в статье Подключение надстройки Google Workspace к сторонней службе . |
| Автозаполнение элементов в интерактивных виджетах | { "actionResponse": { "type": "UPDATE_WIDGET", "updatedWidget": { "suggestions": { "items": ["..."] }, "widget": "widget_id" } } } To learn more, see Add a multiselect menu . | { "action": { "modifyOperations": [{ "updateWidget": { "widgetId": "widget_id", "selectionInputWidgetSuggestions": { "suggestions": ["..."] } } }] } } Более подробную информацию см. в статье Сбор и обработка информации от пользователей Google Chat . |
Обработка взаимодействий с картами в сообщениях, созданных до конвертации
При преобразовании HTTP-приложения Google Chat в дополнение Google Workspace взаимодействие с карточками в сообщениях, созданных до преобразования, требует особой обработки. Дополнения Google Workspace используют полный HTTP-URL для action.function карточки, в то время как приложения Google Chat, созданные с использованием событий взаимодействия API Google Chat, используют имя функции. В следующей таблице перечислены эти различия.
| Приложение Google Chat, созданное с использованием событий взаимодействия API Google Chat | Дополнение Google Workspace, расширяющее возможности Google Chat | |
|---|---|---|
| Конфигурация | Вы настраиваете единую конечную точку для всех событий в консоли Google Cloud. При реализации взаимодействия с картой action карты содержит только имя функции, которую необходимо выполнить. Общая конечная точка HTTP вызывается для событий нажатия на карту.Более подробную информацию см. в разделе Открыть диалог (чат) . { "onClick": { "action": { "function": "submit" } } } | При желании вы можете настроить конечные точки для каждого события в консоли Google Cloud, но это не относится к событиям нажатия на карту. При реализации взаимодействия с картой action карты должно содержать полный URL-адрес конечной точки HTTP, которую необходимо вызвать. Вы можете настроить уникальную конечную точку HTTP для каждой кнопки или использовать общую конечную точку и передать действие в качестве параметра в action.parameters .Более подробную информацию см. в разделе Открытие диалога (дополнения) . { "onClick": { "action": { "function": "https://...", "parameters": [{ "key": "method", "value": "submit" }] } } } |
Чтобы обеспечить функциональность взаимодействия с картами для сообщений, созданных до конвертации, настройте URL-адрес взаимодействия с картами на странице конфигурации API Google Chat.
Этот URL-адрес используется только для взаимодействия с сообщениями, созданными до конвертации вашего приложения. Когда пользователь взаимодействует с одним из этих сообщений, исходное значение action.function передаётся как параметр с именем __action_method_name__ .
Пример: щелчок по карте
Если вы настроили URL-адрес взаимодействия с картой как https://.../card-interaction-handler и пользователь нажимает на карточку в историческом сообщении со следующим действием:
{
"onClick": {
"action": {
"function": "submit"
}
}
}
Событие доставляется на настроенный вами URL-адрес взаимодействия с картой в следующем формате:
{
"commonEventObject": {
"parameters": {
"__action_method_name__": "submit"
}
},
"chat": {
"buttonClickedPayload": { ... }
}
}
Пример: меню с множественным выбором
Если пользователь взаимодействует с меню множественного выбора с внешним источником данных:
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"externalDataSource": {
"function": "getContacts"
}
}
}
Событие доставляется на настроенный вами URL-адрес взаимодействия с картой в следующем формате:
{
"commonEventObject": {
"parameters": {
"__action_method_name__": "getContacts",
}
},
"chat": {
"widgetUpdatedPayload": { ... }
}
}
Если вы включите опцию Использовать общий URL-адрес конечной точки HTTP для всех триггеров для ваших триггеров HTTP, то общий URL-адрес будет также использоваться для событий нажатия кнопки .
Проверка запросов на HTTP-надстройки Google Workspace, расширяющие возможности чата
Для приложений Google Chat на базе HTTP логику проверки того, что запросы исходят от Google, необходимо обновить при преобразовании в дополнение Google Workspace.
- Событие взаимодействия API Google Chat. Проверка приложения HTTP Google Chat: проверка запросов от Google Chat.
- Проверка HTTP надстройки Google Workspace: проверка запросов от Google
Ключевые отличия в проверке запросов:
| Тип приложения | Поддерживаемая аудитория | Электронная почта учетной записи службы |
|---|---|---|
| Приложение Google Chat, созданное с использованием событий взаимодействия API Google Chat | Номер проекта | chat@system.gserviceaccount.com |
| Дополнение Google Workspace, расширяющее возможности Google Chat | Только конечная точка HTTP | Адрес электронной почты для учетной записи службы по каждому проекту |
Уникальный адрес электронной почты учетной записи службы для вашего дополнения Google Workspace можно найти в разделе «Преобразование в дополнения Google Workspace» на странице конфигурации API Google Chat в консоли Google Cloud.
Чтобы проверить запросы в обновленном дополнении Google Workspace:
- При использовании функций Cloud Run предоставьте роль
roles/cloudfunctions.invokerучётной записи службы для каждого дополнения. См. раздел Авторизация доступа с помощью IAM . - Обновите код подтверждения токена, чтобы использовать адрес электронной почты учётной записи службы Google Workspace для проверки подписи токена Bearer. См. раздел Проверка запросов от Google .