На этой странице рассказывается, как приложение Google Chat может получать и обрабатывать действия пользователей в Google Chat.
Чтобы создавать интерактивные интерфейсы для приложений Chat, используйте следующие компоненты:
- Триггеры. Способы, с помощью которых пользователи Google Chat могут вызывать приложение Chat, например добавлять его в чат-группу или отправлять ему сообщение.
- Объекты событий. Данные, которые приложения Chat получают от триггеров или взаимодействий с интерфейсом.
- Действия. Способы, которыми приложения Chat могут реагировать на взаимодействия, например отправлять сообщения или возвращать пользовательский интерфейс на основе карточек.
Приложения Chat могут создавать и показывать интерфейсы следующими способами:
- Сообщения, которые могут содержать текст, статические или интерактивные карточки и кнопки аксессуаров.
- Главные страницы приложений, которые появляются на вкладке Главная в прямых переписках с приложением Chat.
- Диалоговые окна – карточки, которые открываются в новом окне и обычно предлагают пользователям отправить информацию.
- Предварительный просмотр ссылок – карточки с информацией о внешнем сервисе.
Требования
- Аккаунт Google Workspace версии Business или Enterprise с доступом к Google Chat.
- Создайте проект Google Cloud.
- Настройте окно запроса доступа OAuth.
- Включите и настройте Google Chat API.
Как работают взаимодействия с пользователем
Когда пользователь взаимодействует с приложением Chat, Google Chat вызывает настроенный триггер и отправляет объект события в конечную точку или функцию приложения Chat. Ваше приложение Chat обрабатывает объект события и может синхронно вернуть действие в течение 30 секунд или асинхронно ответить с помощью API Chat.
На следующей диаграмме показано, как приложения Google Chat обрабатывают действия пользователей и отвечают на них:
Триггеры
Триггеры – это способы, которыми пользователи вызывают приложение Chat через интерфейс Chat, например с помощью упоминаний или команд приложения.
В таблице ниже перечислены триггеры Chat, их описание и типичные ответы приложений Chat.
| Триггер | Описание | Типичный ответ |
|---|---|---|
| Добавлено в чат-группу |
Пользователь добавляет приложение Chat в чат-группу или администратор Google Workspace устанавливает приложение Chat в чат-группы с прямыми переписками для пользователей в организации. Чтобы узнать больше о приложениях Chat, установленных администраторами, ознакомьтесь со статьей Как установить приложения из каталога Marketplace в своем домене в Справочном центре Google Workspace. |
Приложение Chat отправляет сообщение с инструкциями, в котором объясняется, что оно делает и как пользователи чат-группы могут с ним взаимодействовать. |
| Сообщение |
Пользователь взаимодействует с приложением Chat в сообщении одним из следующих способов:
|
Приложение 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, когда они открывают пустую прямую переписку с ним. Вы можете настроить до трех стартовых подсказок.
Чтобы добавить и настроить стартовые запросы:
В консоли Google Cloud перейдите на страницу Configuration (Конфигурация) Chat API:
В разделе Интерактивные функции найдите Подсказки для начала и нажмите Добавить подсказку.
В поле Ранг (1–3) введите число от
1до3, чтобы задать порядок показа.В разделе Выбор типа укажите, как будет работать запрос:
- Текстовый запрос: При нажатии на чип запроса в поле чата появляется заданный текст.
- Командная строка: При нажатии выполняется зарегистрированная слеш-команда или быстрая команда. Команды, требующие дополнительных аргументов, выбрать нельзя.
Настройте запрос в зависимости от выбранного типа:
Если вы выбрали текстовый запрос:
- В поле Заголовок введите заголовок подсказки, который будет показываться на чипе (до 30 символов).
- В поле Текст запроса введите текст, который будет отображаться на панели создания письма (до 60 символов).
- Вы можете добавить локализованные названия и текст для пользователей, говорящих на других языках:
- В разделе Локализованные подсказки нажмите Добавить язык.
- В разделе Язык выберите поддерживаемый язык из раскрывающегося списка.
- В поле Локализованное название введите название на нужном языке (до 30 символов).
- В поле Локализованный текст запроса введите текст запроса на нужном языке (до 60 символов).
- Повторите эти действия, чтобы добавить другие языки.
Если вы выбрали "Командная строка":
- В разделе Слеш-команда / Быстрая команда выберите команду из раскрывающегося списка.
Нажмите Готово, а затем Сохранить внизу страницы.
Обрабатывайте повторные вызовы 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:
DataActions: создает или обновляет сообщения Chat (CreateMessageAction,UpdateMessageAction) или прикрепляет предпросмотр ссылок (UpdateInlinePreviewAction) с помощьюchatDataActionMarkup.RenderActions: создает, обновляет или закрывает главную страницу или диалоговое окно (pushCard,updateCard,endNavigation: "CLOSE_DIALOG"), а также предоставляет динамические подсказки для меню с возможностью выбора нескольких вариантов (modifyCard).AuthorizationError: Предлагает пользователям базовую карту авторизации (basic_authorization_prompt), чтобы войти в аккаунт или выполнить аутентификацию во внешнем сервисе.
В таблице ниже показано, как приложения 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.
Статьи по теме
- Как настроить Google Chat API
- Как отправить сообщение
- Как отвечать на команды
- Как открыть интерактивные диалоговые окна
- Как читать данные, введенные пользователями в формы на карточках
- Ссылки для предпросмотра
- Как создать главную страницу для приложения Chat
- Как проверить запросы от Chat
- Как тестировать интерактивные функции приложений Google Chat
Приложения 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, которое не является дополнением, для получения событий взаимодействия
В консоли Google Cloud перейдите на страницу Configuration (Конфигурация) Chat API:
В разделе Интерактивные функции снимите флажок Создать это приложение Chat как дополнение Google Workspace и настройте Функциональность, одну конечную точку Настроек подключения (URL конечной точки HTTP, Apps Script, название темы Cloud Pub/Sub или Dialogflow), Команды, Варианты запросов, Предварительный просмотр ссылок и Видимость.
Нажмите Сохранить.
Как ответить на сообщение в приложении 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`.'
};
}