Page Summary
-
The Google Chat API enables sending messages as a Chat app or on behalf of a user.
-
Chat apps can send rich messages with text, cards, and interactive elements, while user-sent messages are limited to text.
-
Messages can be sent to spaces, users directly, or within specific threads using a
thread_key. -
Developers can assign custom IDs to messages for easier retrieval and management.
-
Code examples in Node.js and Python are provided to guide developers in implementing message sending functionalities.
This guide explains how to use the
create()
method on the Message resource of the Google Chat API to do any of the following:
- Send messages that contain text, cards, and interactive widgets.
- Send messages privately to a specific Chat user.
- Start or reply to a message thread.
- Name a message, so that you can specify it in other Chat API requests.
The maximum message size (including any text or cards) is 32,000 bytes. To send a message that exceeds this size, your Chat app must send multiple messages instead.
In addition to calling the Chat API to create messages, Chat apps can create and send messages to reply to user interactions, such as posting a welcome message after a user adds the Chat app to a space. When responding to interactions, Chat apps can use other types of messaging features, including interactive dialogs and link preview interfaces. To reply to a user, the Chat app returns the message synchronously, without calling the Chat API. To learn about sending messages to respond to interactions, see Receive and respond to interactions with your Google Chat app.
How Chat displays and attributes messages created with the Chat API
You can call the create() method using
app authentication
and user authentication.
Chat attributes the message sender differently
depending on the type of authentication that you use.
When you authenticate as the Chat app, the Chat app sends the message.
App next to its name.When you authenticate as a user, the Chat app sends the message on behalf of the user. Chat also attributes the Chat app to the message by displaying its name.
The authentication type also determines which messaging features and interfaces that you can include in the message. With app authentication, Chat apps can send messages that contain rich text, card-based interfaces, and interactive widgets. With user authentication, you can send text messages. In Developer Preview, you can also send cards, as documented in Create and update cards.
To learn more about messaging features available for the Chat API, see the Google Chat messages overview.
This guide explains how to use either authentication type to send a message with the Chat API.
Prerequisites
Node.js
- A Business or Enterprise Google Workspace account with access to Google Chat.
- Set up your environment:
- Create a Google Cloud project.
- Configure the OAuth consent screen.
- Enable and configure the Google Chat API with a name, icon, and description for your Chat app.
- Install the Node.js Cloud Client Library.
- Create access credentials based on how you want to authenticate in your Google Chat API
request:
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
credentials.jsonto your local directory. - To authenticate as the Chat app,
create service account
credentials and save the credentials as a JSON file named
credentials.json.
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
- Choose an authorization scope based on whether you want to authenticate as a user or the Chat app.
- A Google Chat space where the authenticated user or calling Chat app is a member. To authenticate as the Chat app, add the Chat app to the space.
Python
- A Business or Enterprise Google Workspace account with access to Google Chat.
- Set up your environment:
- Create a Google Cloud project.
- Configure the OAuth consent screen.
- Enable and configure the Google Chat API with a name, icon, and description for your Chat app.
- Install the Python Cloud Client Library.
- Create access credentials based on how you want to authenticate in your Google Chat API
request:
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
credentials.jsonto your local directory. - To authenticate as the Chat app,
create service account
credentials and save the credentials as a JSON file named
credentials.json.
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
- Choose an authorization scope based on whether you want to authenticate as a user or the Chat app.
- A Google Chat space where the authenticated user or calling Chat app is a member. To authenticate as the Chat app, add the Chat app to the space.
Java
- A Business or Enterprise Google Workspace account with access to Google Chat.
- Set up your environment:
- Create a Google Cloud project.
- Configure the OAuth consent screen.
- Enable and configure the Google Chat API with a name, icon, and description for your Chat app.
- Install the Java Cloud Client Library.
- Create access credentials based on how you want to authenticate in your Google Chat API
request:
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
credentials.jsonto your local directory. - To authenticate as the Chat app,
create service account
credentials and save the credentials as a JSON file named
credentials.json.
- To authenticate as a Chat user,
create OAuth client ID
credentials and save the credentials as a JSON file named
- Choose an authorization scope based on whether you want to authenticate as a user or the Chat app.
- A Google Chat space where the authenticated user or calling Chat app is a member. To authenticate as the Chat app, add the Chat app to the space.
Apps Script
- A Business or Enterprise Google Workspace account with access to Google Chat.
- Set up your environment:
- Create a Google Cloud project.
- Configure the OAuth consent screen.
- Enable and configure the Google Chat API with a name, icon, and description for your Chat app.
- Create a standalone Apps Script project, and turn on the Advanced Chat Service.
- In this guide, you must use either user or app authentication. To authenticate as the Chat app, create service account credentials. For steps, see Authenticate and authorize as a Google Chat app.
- Choose an authorization scope based on whether you want to authenticate as a user or the Chat app.
- A Google Chat space where the authenticated user or calling Chat app is a member. To authenticate as the Chat app, add the Chat app to the space.
Send a message as the Chat app
This section explains how to send messages that contain text, cards, and interactive accessory widgets using app authentication.
To call the CreateMessage()
method using app authentication, you must specify the following fields in the
request:
- The
chat.botauthorization scope. - The
Spaceresource in which you want to post the message. The Chat app must be a member of the space. - The
Messageresource to create. To define the content of the message, you can include rich text (text), one or more card interfaces (cardsV2), or both.
Optionally, you can include the following:
- The
elementsfield to add citations to the message. - The
accessoryWidgetsfield to include interactive buttons at the bottom of the message. - The
privateMessageViewerfield to send the message privately to a specified user. - The
messageIdfield, which lets you name the message to use in other API requests. - The
thread.threadKeyandmessageReplyOptionfields to start or reply to a thread. If the space doesn't use threading, this field is ignored.
The following code shows an example of how a Chat app can send a message posted as the Chat app that contains text, a card, and a clickable button at the bottom of the message:
Node.js
Python
Java
Apps Script
To run this sample, replace SPACE_NAME with the ID from
the space's
name
field. You can obtain the ID by calling the
ListSpaces()
method or from the space's URL.
Add interactive widgets at the bottom of a message
In the first code sample of this guide, the Chat app message displays a clickable button at the bottom of the message, known as an accessory widget. Accessory widgets appear after any text or cards in a message. You can use these widgets to prompt users to interact with your message in many ways, including the following:
- Rate the accuracy or satisfaction of a message.
- Report an issue with the message or Chat app.
- Open a link to related content, such as documentation.
- Dismiss or snooze similar messages from the Chat app for a specific period of time.
To add accessory widgets, include the
accessoryWidgets[]
field in the body of your request and specify one or more widgets that you want
to include.
The following image shows a Chat app that appends a text message with accessory widgets so that users can rate their experience with the Chat app.
The following shows the body of the request that creates a text message with
two accessory buttons. When a user clicks a button, the corresponding
function (such as doUpvote) processes the interaction:
{
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"
}}
}]}}]
}
Send a message privately
Chat apps can send messages privately so that the message is only visible to a specific user in the space. When a Chat app sends a private message, the message shows a label that notifies the user that the message is only visible to them.
To send a message privately using the Chat API, specify the
privateMessageViewer
field in the body of your request. To specify the user, you set the value to
the
User
resource that represents the Chat user. You can also use the
name
field of the User resource, as shown in the following example:
{
text: "Hello private world!",
privateMessageViewer: {
name: "users/USER_ID"
}
}
To use this sample, replace USER_ID
with a unique ID for the user, such as 12345678987654321 or
hao@cymbalgroup.com. For more information about specifying users, see
Identify and specify Google Chat users.
To send a message privately, you must omit the following in your request:
Send forced notifications or silent messages
When a Chat app sends a message, it can use one of these options to notify users:
- Force a notification: Chat always sends a push notification to recipients, regardless of their notification settings or Do Not Disturb (DND) status. Inside Chat, the message triggers a bolding and bumping behavior in the recipients' roster or Home list, and shows a badge.
- Send a silent message: Chat suppresses push notifications for recipients. Inside Chat, the message doesn't trigger a bolding or bumping behavior in the recipients' roster or Home list, and doesn't show a badge. If the silent message is the last message in a conversation, its content isn't shown in the Home snippet.
Whether forced or silent, these messages include a visual indicator that notifies the recipients of the special notification behavior.
Forced notifications and silent messages are only available for Chat apps using app authentication.
Forced notification and silent messages have these limitations:
- External users: Forced notifications and silent messages don't apply to external users (guests) in a space. External users receive notifications according to their own settings.
- Mentions: Silent messages don't support mentioning users. If you include a mention in a silent message, it's treated as plain text.
- Threading: You can't start or reply to a thread with a silent message.
- Space type: Forced notifications and silent messages aren't supported in direct messages (DMs) or spaces owned by people who don't have a Google Workspace account.
- Email notifications: Silent messages don't trigger email notifications. Force-notified messages only trigger email notifications if they also include a mention for a specific user.
To force a notification or send a silent message, include the
createMessageNotificationOptions
field in your request and set notificationType to one of the following:
| Value | Behavior |
|---|---|
NOTIFICATION_TYPE_FORCE_NOTIFY |
Forces a notification. |
NOTIFICATION_TYPE_SILENT |
Sends the message silently. |
The following example shows the JSON body of a request to send a message with a forced notification:
{
"text": "Critical update: the server is down!",
"createMessageNotificationOptions": {
"notificationType": "NOTIFICATION_TYPE_FORCE_NOTIFY"
}
}
Send a text message on behalf of a user
This section explains how to send messages on behalf of a user using user authentication. With user authentication, the content of the message can only contain text and must omit messaging features that are only available to Chat apps, including card interfaces and interactive widgets. In Developer Preview, you can create messages with cards on behalf of a user. For details, see Create and update cards.
To call the CreateMessage() method using user authentication, you must specify
the following fields in the request:
- An authorization scope
that supports user authentication for this method. The following sample uses
the
chat.messages.createscope. - The
Spaceresource in which you want to post the message. The authenticated user must be a member of the space. - The
Messageresource to create. To define the content of the message, you must include thetextfield.
Optionally, you can include the following:
- The
createMessageNotificationOptionsfield to force a notification or send the message silently. - The
messageIdfield, which lets you name the message to use in other API requests. - The
thread.threadKeyandmessageReplyOptionfields to start or reply to a thread. If the space doesn't use threading, this field is ignored.
The following code shows an example of how a Chat app can send a text message in a given space on behalf of an authenticated user: