В этом руководстве объясняется, как использовать метод create() ресурса Message в Google Chat API для выполнения любого из следующих действий:
- Отправляйте сообщения, содержащие текст, открытки и интерактивные виджеты.
- Отправляйте личные сообщения конкретному пользователю чата.
- Начать или ответить на сообщение в цепочке.
- Присвойте сообщению имя, чтобы вы могли указывать его в других запросах к API чата.
Максимальный размер сообщения (включая текст или карточки) составляет 32 000 байт. Чтобы отправить сообщение, превышающее этот размер, ваше приложение для чата должно отправить несколько сообщений вместо одного.
Помимо вызова API чата для создания сообщений, приложения чата могут создавать и отправлять сообщения в ответ на действия пользователя, например, отправлять приветственное сообщение после того, как пользователь добавит приложение чата в пространство. При ответе на действия приложения чата могут использовать другие типы функций обмена сообщениями, включая интерактивные диалоги и интерфейсы предварительного просмотра ссылок. Чтобы ответить пользователю, приложение чата возвращает сообщение синхронно, без вызова API чата. Чтобы узнать больше об отправке сообщений в ответ на действия пользователя, см. раздел «Получение и ответ на действия пользователя с помощью приложения Google Chat» .
Как чат отображает и атрибутирует сообщения, созданные с помощью API чата.
Вы можете вызвать метод create() используя аутентификацию приложения и аутентификацию пользователя . Чат присваивает отправителю сообщения разные атрибуты в зависимости от типа используемой аутентификации.
Когда вы проходите аутентификацию в приложении «Чат», приложение «Чат» отправляет сообщение.
App .После аутентификации пользователя приложение «Чат» отправляет сообщение от его имени. Кроме того, приложение «Чат» указывает на причастность приложения к сообщению, отображая его имя.
Тип аутентификации также определяет, какие функции и интерфейсы обмена сообщениями можно включить в сообщение. При аутентификации приложения приложения чат могут отправлять сообщения, содержащие форматированный текст, интерфейсы на основе карточек и интерактивные виджеты. При аутентификации пользователя можно отправлять текстовые сообщения. В предварительной версии для разработчиков также можно отправлять карточки, как описано в разделе «Создание и обновление карточек» .
Чтобы узнать больше о функциях обмена сообщениями, доступных в API чата, см. обзор сообщений Google Chat .
В этом руководстве объясняется, как использовать любой из типов аутентификации для отправки сообщения с помощью API чата.
Предварительные требования
Node.js
- Корпоративный аккаунт Google Workspace с доступом к Google Chat .
- Настройте свою среду:
- Создайте проект в Google Cloud .
- Настройте экран согласия OAuth .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения чата.
- Установите библиотеку Node.js Cloud Client .
- Создайте учетные данные доступа в зависимости от того, как вы хотите аутентифицироваться в запросе к Google Chat API:
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
credentials.jsonв локальной директории. - Для аутентификации в приложении «Чат» создайте учетные данные сервисной учетной записи и сохраните их в JSON-файле с именем
credentials.json.
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
- Выберите область авторизации в зависимости от того, хотите ли вы аутентифицироваться как пользователь или как приложение чата.
- Пространство Google Chat, в котором аутентифицированный пользователь или приложение для чата является участником. Чтобы аутентифицироваться как приложение для чата, добавьте приложение для чата в это пространство .
Python
- Корпоративный аккаунт Google Workspace с доступом к Google Chat .
- Настройте свою среду:
- Создайте проект в Google Cloud .
- Настройте экран согласия OAuth .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения чата.
- Установите библиотеку Python Cloud Client .
- Создайте учетные данные доступа в зависимости от того, как вы хотите аутентифицироваться в запросе к Google Chat API:
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
credentials.jsonв локальной директории. - Для аутентификации в приложении «Чат» создайте учетные данные сервисной учетной записи и сохраните их в JSON-файле с именем
credentials.json.
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
- Выберите область авторизации в зависимости от того, хотите ли вы аутентифицироваться как пользователь или как приложение чата.
- Пространство Google Chat, в котором аутентифицированный пользователь или приложение для чата является участником. Чтобы аутентифицироваться как приложение для чата, добавьте приложение для чата в это пространство .
Java
- Корпоративный аккаунт Google Workspace с доступом к Google Chat .
- Настройте свою среду:
- Создайте проект в Google Cloud .
- Настройте экран согласия OAuth .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения чата.
- Установите библиотеку Java Cloud Client Library .
- Создайте учетные данные доступа в зависимости от того, как вы хотите аутентифицироваться в запросе к Google Chat API:
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
credentials.jsonв локальной директории. - Для аутентификации в приложении «Чат» создайте учетные данные сервисной учетной записи и сохраните их в JSON-файле с именем
credentials.json.
- Для аутентификации в качестве пользователя чата создайте учетные данные OAuth-клиента и сохраните их в виде JSON-файла с именем
- Выберите область авторизации в зависимости от того, хотите ли вы аутентифицироваться как пользователь или как приложение чата.
- Пространство Google Chat, в котором аутентифицированный пользователь или приложение для чата является участником. Чтобы аутентифицироваться как приложение для чата, добавьте приложение для чата в это пространство .
Apps Script
- Корпоративный аккаунт Google Workspace с доступом к Google Chat .
- Настройте свою среду:
- Создайте проект в Google Cloud .
- Настройте экран согласия OAuth .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения чата.
- Создайте автономный проект Apps Script и включите расширенную службу чата .
- В этом руководстве необходимо использовать либо аутентификацию пользователя, либо аутентификацию приложения . Для аутентификации в качестве приложения «Чат» создайте учетные данные сервисной учетной записи. Инструкции см. в разделе «Аутентификация и авторизация в качестве приложения Google Chat» .
- Выберите область авторизации в зависимости от того, хотите ли вы аутентифицироваться как пользователь или как приложение чата.
- Пространство Google Chat, в котором аутентифицированный пользователь или приложение для чата является участником. Чтобы аутентифицироваться как приложение для чата, добавьте приложение для чата в это пространство .
Отправьте сообщение через приложение «Чат».
В этом разделе объясняется, как отправлять сообщения, содержащие текст, открытки и интерактивные виджеты, используя аутентификацию приложения .
Для вызова метода CreateMessage() с использованием аутентификации приложения необходимо указать в запросе следующие поля:
- Область авторизации
chat.bot. - Ресурс
Space, в котором вы хотите опубликовать сообщение. Приложение «Чат» должно быть участником этого пространства. - Ресурс
Message, который необходимо создать. Для определения содержимого сообщения можно использовать форматированный текст (text), один или несколько карточных интерфейсов (cardsV2) или и то, и другое.
При желании вы можете включить следующее:
- Поле
accessoryWidgetsпозволяет добавить интерактивные кнопки в нижней части сообщения . - Поле
privateMessageViewerиспользуется для отправки сообщения в приватном режиме указанному пользователю. - Поле
messageIdпозволяет задать имя сообщения для использования в других запросах API. - Поля
thread.threadKeyиmessageReplyOptionиспользуются для начала или ответа на цепочку сообщений . Если в пространстве не используется цепочка сообщений, это поле игнорируется.
Приведенный ниже код демонстрирует пример того, как приложение чата может отправить сообщение, размещенное от имени приложения чата, которое содержит текст, карточку и кликабельную кнопку внизу сообщения:
Node.js
Python
Java
Apps Script
Для запуска этого примера замените SPACE_NAME на идентификатор из поля name пространства. Вы можете получить идентификатор, вызвав метод ListSpaces() или из URL-адреса пространства.
Добавьте интерактивные виджеты в нижнюю часть сообщения.
В первом примере кода этого руководства в сообщении приложения «Чат» внизу отображается кликабельная кнопка, известная как вспомогательный виджет . Вспомогательные виджеты появляются после любого текста или карточек в сообщении. Вы можете использовать эти виджеты, чтобы предложить пользователям взаимодействовать с вашим сообщением различными способами, в том числе следующими:
- Оцените точность сообщения или степень удовлетворенности им.
- Сообщите о проблеме, возникшей с приложением для сообщений или чата.
- Откройте ссылку на связанный контент, например, документацию.
- Отклонить или отложить похожие сообщения в приложении «Чат» на определенный период времени.
Чтобы добавить виджеты-аксессуары, включите поле accessoryWidgets[] в тело запроса и укажите один или несколько виджетов, которые вы хотите добавить.
На следующем изображении показано приложение для чата, которое добавляет к текстовому сообщению дополнительные виджеты, позволяющие пользователям оценить свой опыт использования приложения.

Ниже показан текст запроса, который создает текстовое сообщение с двумя дополнительными кнопками. Когда пользователь нажимает кнопку, соответствующая функция (например, doUpvote ) обрабатывает взаимодействие:
{
text: "Rate your experience with this Chat app.",
accessoryWidgets: [{ buttonList: { buttons: [{
icon: { material_icon: {
name: "thumb_up"
}},
color: { red: 0, blue: 255, green: 0 },
onClick: { action: {
function: "doUpvote"
}}
}, {
icon: { material_icon: {
name: "thumb_down"
}},
color: { red: 0, blue: 255, green: 0 },
onClick: { action: {
function: "doDownvote"
}}
}]}}]
}
Отправить личное сообщение
Приложения для чата могут отправлять сообщения в приватном режиме, так что сообщение будет видно только определенному пользователю в чат-пространстве. Когда приложение для чата отправляет приватное сообщение, в нем отображается метка, уведомляющая пользователя о том, что сообщение видно только ему.
Для отправки приватного сообщения с помощью API чата укажите поле privateMessageViewer в теле запроса. Чтобы указать пользователя, задайте значение ресурса User , представляющего пользователя чата. Вы также можете использовать поле name ресурса User , как показано в следующем примере:
{
text: "Hello private world!",
privateMessageViewer: {
name: "users/USER_ID"
}
}
Чтобы использовать этот пример, замените USER_ID уникальным идентификатором пользователя, например, 12345678987654321 или hao@cymbalgroup.com . Дополнительную информацию о задании пользователей см. в разделе «Идентификация и указание пользователей Google Chat» .
Для отправки личного сообщения необходимо опустить в запросе следующее:
Отправить текстовое сообщение от имени пользователя
В этом разделе объясняется, как отправлять сообщения от имени пользователя с использованием аутентификации пользователя . При аутентификации пользователя содержимое сообщения может содержать только текст и не должно включать функции обмена сообщениями, доступные только в приложениях чата, включая карточные интерфейсы и интерактивные виджеты. В предварительной версии для разработчиков вы можете создавать сообщения с карточками от имени пользователя. Подробнее см. раздел «Создание и обновление карточек» .
Для вызова метода CreateMessage() с использованием аутентификации пользователя необходимо указать в запросе следующие поля:
- Область авторизации , поддерживающая аутентификацию пользователя для этого метода. В следующем примере используется область авторизации
chat.messages.create. - Ресурс
Space, в котором вы хотите разместить сообщение. Авторизованный пользователь должен быть членом данного пространства. - Ресурс
Message, который необходимо создать. Для определения содержимого сообщения необходимо включитьtextполе.
При желании вы можете включить следующее:
- Поле
messageIdпозволяет задать имя сообщения для использования в других запросах API. - Поля
thread.threadKeyиmessageReplyOptionиспользуются для начала или ответа на цепочку сообщений . Если в пространстве не используется цепочка сообщений, это поле игнорируется.
Приведенный ниже код демонстрирует пример того, как приложение чата может отправить текстовое сообщение в заданное пространство от имени авторизованного пользователя:
Node.js
Python
Java
Apps Script
Для запуска этого примера замените SPACE_NAME на идентификатор из поля name пространства. Вы можете получить идентификатор, вызвав метод ListSpaces() или из URL-адреса пространства.
Начать обсуждение или ответить в ветке обсуждения.
В пространствах, использующих потоки , можно указать, начинает ли новое сообщение поток или отвечает на существующий поток.
По умолчанию сообщения, созданные с помощью Chat API, начинают новую ветку обсуждения. Чтобы вам было проще идентифицировать ветку и ответить на нее позже, вы можете указать ключ ветки в своем запросе:
- В теле запроса укажите поле
thread.threadKey. - Укажите параметр запроса
messageReplyOption, чтобы определить, что произойдет, если ключ уже существует.
Чтобы создать сообщение, которое является ответом на существующую ветку обсуждения:
- В теле запроса укажите поле
thread. Если оно задано, вы можете указать созданный вамиthreadKey. В противном случае необходимо использоватьnameпотока. - Укажите параметр запроса
messageReplyOption.
Приведенный ниже код демонстрирует пример того, как приложение чата может отправлять текстовое сообщение, которое начинает или отвечает на заданную ветку обсуждения, идентифицированную по ключу заданного пространства, от имени авторизованного пользователя:
Node.js
Python
Java
Apps Script
Для запуска этого примера замените следующее:
-
THREAD_KEY: существующий ключ потока в пространстве или, для создания нового потока, уникальное имя для потока. -
SPACE_NAME: идентификатор из поляnameпространства. Вы можете получить идентификатор, вызвав методListSpaces()или из URL-адреса пространства.
Назовите сообщение
Для получения или указания сообщения в будущих вызовах API вы можете присвоить сообщению имя, задав поле messageId в вашем запросе. Присвоение имени сообщению позволяет указать его без необходимости сохранять системный идентификатор, присвоенный из имени ресурса сообщения (представленный в поле name ).
Например, чтобы получить сообщение с помощью метода get() , вы используете имя ресурса, чтобы указать, какое сообщение нужно получить. Имя ресурса имеет формат spaces/{space}/messages/{message} , где {message} представляет собой системный идентификатор или пользовательское имя, которое вы задали при создании сообщения.
Чтобы присвоить сообщение имя, укажите пользовательский идентификатор в поле messageId при его создании. Поле messageId задает значение для поля clientAssignedMessageId ресурса Message .
Присвоить сообщение имя можно только при его создании. Нельзя присвоить имя или изменить пользовательский идентификатор для существующих сообщений. Пользовательский идентификатор должен соответствовать следующим требованиям:
- Начинается с
client-. Например,client-custom-name— это допустимый пользовательский идентификатор, аcustom-name— нет. - Содержит до 63 символов и только строчные буквы, цифры и дефисы.
- Уникален в пределах одного пространства. Приложение для чата не может использовать один и тот же пользовательский идентификатор для разных сообщений.
Приведенный ниже код демонстрирует пример того, как приложение чата может отправить текстовое сообщение с идентификатором в указанное пространство от имени авторизованного пользователя:
Node.js
Python
Java
Apps Script
Для запуска этого примера замените следующее:
-
SPACE_NAME: идентификатор из поляnameпространства. Вы можете получить идентификатор, вызвав методListSpaces()или из URL-адреса пространства. -
MESSAGE-ID: имя сообщения, начинающееся сcustom-. Должно быть уникальным и отличаться от имен других сообщений, созданных приложением «Чат» в указанном пространстве.
Цитировать сообщение
Вы можете процитировать другое сообщение, вызвав CreateMessage() ( rpc , rest ) и установив quotedMessageMetadata ( rpc , rest ) в запросе.
Вы можете цитировать сообщения внутри ветки обсуждения или в основном чате, но вы не можете цитировать сообщения из другой ветки обсуждения.
Следующий код показывает, как создать сообщение, которое цитирует другое сообщение:
Node.js
import {createClientWithUserCredentials} from './authentication-utils.js';
const USER_AUTH_OAUTH_SCOPES = ['https://www.googleapis.com/auth/chat.messages.create'];
// This sample shows how to create a message that quotes another message.
async function main() {
// Create a client
const chatClient = await createClientWithUserCredentials(USER_AUTH_OAUTH_SCOPES);
// Initialize request argument(s)
const request = {
// TODO(developer): Replace SPACE_NAME .
parent: 'spaces/SPACE_NAME',
message: {
text: 'I am responding to a quoted message!',
// quotedMessageMetadata lets chat apps respond to a message by quoting it.
quotedMessageMetadata: {
// TODO(developer): Replace QUOTED_MESSAGE_NAME
// and QUOTED_MESSAGE_LAST_UPDATE_TIME.
name: 'QUOTED_MESSAGE_NAME',
lastUpdateTime: 'QUOTED_MESSAGE_LAST_UPDATE_TIME'
}
}
};
// Make the request
const response = await chatClient.createMessage(request);
// Handle the response
console.log(response);
}
main().catch(console.error);
Python
from authentication_utils import create_client_with_user_credentials
from google.apps import chat_v1 as google_chat
from google.protobuf.timestamp_pb2 import Timestamp
SCOPES = ['https://www.googleapis.com/auth/chat.messages.create']
# This sample shows how to create a message that quotes another message.
def create_message_quote_message():
'''Creates a message that quotes another message.'''
# Create a client
client = create_client_with_user_credentials(SCOPES)
# Create a timestamp from the RFC-3339 string.
# TODO(developer): Replace QUOTED_MESSAGE_LAST_UPDATE_TIME.
last_update_time = Timestamp()
last_update_time.FromJsonString('QUOTED_MESSAGE_LAST_UPDATE_TIME')
# Initialize request argument(s)
request = google_chat.CreateMessageRequest(
# TODO(developer): Replace SPACE_NAME.
parent='spaces/SPACE_NAME',
# Create the message.
message = google_chat.Message(
text='I am responding to a quoted message!',
# quotedMessageMetadata lets chat apps respond to a message by quoting it.
quoted_message_metadata=google_chat.QuotedMessageMetadata(
name='QUOTED_MESSAGE_NAME',
last_update_time=last_update_time
)
)
)
# Make the request
response = client.create_message(request)
# Handle the response
print(response)
create_message_quote_message()
Java
import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.CreateMessageRequest;
import com.google.chat.v1.Message;
import com.google.chat.v1.QuotedMessageMetadata;
import com.google.protobuf.util.Timestamps;
import com.google.workspace.api.chat.samples.utils.AuthenticationUtils;
import java.text.ParseException;
// This sample shows how to create a message that quotes another message.
public class CreateMessageQuoteMessage {
public static void main(String[] args) throws Exception, ParseException {
// Create a client.
ChatServiceClient chatClient = AuthenticationUtils.createClientWithUserCredentials();
// Initialize request argument(s).
// TODO(developer): Replace SPACE_NAME, QUOTED_MESSAGE_NAME,
// and QUOTED_MESSAGE_LAST_UPDATE_TIME here.
String parent = "spaces/SPACE_NAME";
String quotedMessageName = "QUOTED_MESSAGE_NAME";
String lastUpdateTime = "QUOTED_MESSAGE_LAST_UPDATE_TIME";
QuotedMessageMetadata quotedMessageMetadata =
QuotedMessageMetadata.newBuilder()
.setName(quotedMessageName)
.setLastUpdateTime(Timestamps.parse(lastUpdateTime))
.build();
Message message = Message.newBuilder()
.setText("I am responding to a quoted message!")
.setQuotedMessageMetadata(quotedMessageMetadata)
.build();
CreateMessageRequest request =
CreateMessageRequest.newBuilder()
.setParent(parent)
.setMessage(message)
.build();
// Make the request.
Message response = chatClient.createMessage(request);
// Handle the response.
System.out.println(response);
}
}
Apps Script
/**
* Creates a message that quotes another message.
*
* Relies on the OAuth2 scope 'https://www.googleapis.com/auth/chat.messages.create'
* referenced in the manifest file (appsscript.json).
*/
function createMessageQuoteMessage() {
// Initialize request argument(s)
// TODO(developer): Replace SPACE_NAME here.
const parent = 'spaces/SPACE_NAME';
const message = {
// The text content of the message.
text: 'I am responding to a quoted message!',
// quotedMessageMetadata lets chat apps respond to a message by quoting it.
//
// TODO(developer): Replace QUOTED_MESSAGE_NAME
// and QUOTED_MESSAGE_LAST_UPDATE_TIME .
quotedMessageMetadata: {
name: 'QUOTED_MESSAGE_NAME',
lastUpdateTime: 'QUOTED_MESSAGE_LAST_UPDATE_TIME',
}
};
// Make the request
const response = Chat.Spaces.Messages.create(message, parent);
// Handle the response
console.log(response);
}
Для запуска этого примера замените следующее:
-
SPACE_NAME: идентификатор из поляnameпространства. Вы можете получить идентификатор, вызвав методListSpaces()(rpc,rest) или из URL-адреса пространства. -
QUOTED_MESSAGE_NAME:nameресурса сообщения (rpc,rest) для цитирования в форматеspaces/{space}/messages/{message}. -
QUOTED_MESSAGE_LAST_UPDATE_TIME: время последнего обновления сообщения, которое вы хотите процитировать. Если сообщение никогда не редактировалось, соответствуетcreateTime(rpc,rest). Если сообщение редактировалось, соответствуетlastUpdateTime(rpc,rest).
Устранение неполадок
Когда приложение или карточка Google Chat выдает ошибку, интерфейс чата отображает сообщение «Что-то пошло не так» или «Не удалось обработать ваш запрос». Иногда интерфейс чата не отображает никаких сообщений об ошибке, но приложение или карточка чата выдает неожиданный результат; например, сообщение на карточке может не появиться.
Хотя сообщение об ошибке может не отображаться в пользовательском интерфейсе чата, подробные сообщения об ошибках и данные журнала доступны для исправления ошибок, если включено ведение журнала ошибок для приложений чата. Для получения помощи по просмотру, отладке и исправлению ошибок см. раздел «Устранение неполадок и исправление ошибок Google Chat» .
Связанные темы
- Используйте конструктор карточек для создания и предварительного просмотра сообщений в формате JSON для чат-приложений.
- Форматирование сообщений .
- Получить подробную информацию о сообщении .
- Список сообщений в пространстве .
- Обновить сообщение .
- Удалить сообщение .
- Идентификация пользователей в сообщениях Google Chat .
- Отправляйте сообщения в Google Chat с помощью входящих веб-хуков .