Google Chat
Google Chat integration for spaces, messages, memberships, and reactions
The Google Chat integration lets your agents post into spaces and direct messages, read space and membership information, manage reactions, and receive Google Chat events through Agent Network.
Prerequisites
You need:
- A Google Cloud project with the Chat API enabled — Enable it from the Google Chat API library page, then configure your Chat app under Chat API → Configuration (name, avatar, description).
- A Google account to connect — Fruxon authenticates as this user, so messages the agent sends are attributed to that account. Use a dedicated Workspace service user if you don't want messages appearing under a person's name.
Setup
- Open Integrations from the sidebar
- Select Google Chat from the catalog
- Click Add Integration Config
- Give the config a display name (e.g., "Google Chat - Company Workspace")
- Click Connect to start the Google OAuth flow, and grant the scopes the agent needs
- Save the config
Scopes
Google splits the Chat API across several scopes. The recommended set covers the common case — find a space, see who's in it, and post:
| Scope | Grants |
|---|---|
| View spaces | List spaces and direct messages, and read their names and metadata. |
| Send messages | Post messages and thread replies. Write-only — no access to messages the agent didn't send. |
| View space members | List the people and apps that belong to a space. |
| Manage spaces | Create spaces and change names and descriptions. |
| Manage space members | Add and remove members. |
| Manage reactions | Add and list emoji reactions. |
| Read message history | Read the text of existing messages. Google restricted scope. |
| Read and manage messages | Read, send, edit, and delete messages. Google restricted scope. |
Restricted scopes require a third-party security assessment and an annual audit, so they are off by default. Reading message history and editing or deleting messages need them; sending does not.
Receiving Messages
To let agents receive Google Chat messages:
- In the Fruxon deployment dialog, generate the config webhook URL
- In the Google Cloud console, open Chat API → Configuration
- Under Interactive features, enable Receive 1:1 messages and Join spaces and group conversations
- Set Connection settings to HTTP endpoint URL and paste the Fruxon webhook URL
- Set the Authentication Audience — either your Cloud project number or the endpoint URL
- Copy that same value into the config's
audienceparameter in Fruxon - Add the Chat app to the spaces it should watch
Fruxon verifies the bearer token Google signs each event with against the audience value. Inbound events are rejected until the two match, so the parameter is required for receiving — leave it blank for outbound-only use.
A Chat app accepts exactly one HTTP endpoint URL, so Fruxon uses one webhook per Google Chat integration config and dispatches to triggers and participants from there.
Google delivers messages to a Chat app when it is @-mentioned in a space, and for every message in a direct message with the app. Ambient space chatter never reaches Fruxon.
Using in Your Agent
- Open your agent in Agent Studio and select an Agent Step
- Under Attached Integration Configurations, click Attach configuration and choose your config
- Attach Google Chat tools from the tools panel
- Tools are referenced as
google_chat.send_message,google_chat.list_spaces, etc.
Channels
Google Chat exposes one channel descriptor for Agent Network participants:
| Channel | Description |
|---|---|
space | A Google Chat space — a named room, a group conversation, or a direct message. All three use the same spaces/... resource name. |
Use the full resource name (spaces/AAQAtjsc9v4), not the display name. Copy it from the space's URL — the segment after /room/ or /dm/ — or read it off list_spaces.
Triggers
| Trigger | Description |
|---|---|
google_chat.message.received | Fires when the Chat app receives a message — an @-mention in a space, or any message in a direct message with the app. |
google_chat.space.added | Fires when the Chat app is added to a space or a direct message is opened with it. |
Both triggers require a Google Chat integration config with the audience parameter set and the HTTP endpoint wired to Fruxon. Their payloads include the standard inbound-message fields (payload.text, payload.from, payload.from_name, payload.conversation_name, payload.conversation_address, payload.session_id, payload.event_type) plus Chat-specific fields: payload.message_attributes.space_name, payload.message_attributes.thread_name, payload.message_attributes.message_name, and payload.message_attributes.user_id.
Available Tools
Spaces
| Tool | Description | Action Type |
|---|---|---|
list_spaces | List the spaces and direct messages the connected account belongs to | ReadOnly |
get_space | Fetch one space by resource name | ReadOnly |
find_direct_message | Find the existing direct message space with one other user | ReadOnly |
create_space | Create a named space | Reversible |
Messages
| Tool | Description | Action Type |
|---|---|---|
send_message | Post a message to a space or direct message | Irreversible |
reply_to_thread | Post a reply inside an existing thread | Irreversible |
list_messages | List messages in a space (needs a restricted read scope) | ReadOnly |
get_message | Fetch one message by resource name (needs a restricted read scope) | ReadOnly |
update_message | Replace the text of a message the connected account sent | Reversible |
delete_message | Delete a message the connected account sent | Irreversible |
Memberships and reactions
| Tool | Description | Action Type |
|---|---|---|
list_members | List the people and apps in a space | ReadOnly |
add_member | Add a person to a space | Reversible |
add_reaction | Add an emoji reaction to a message | Reversible |
list_reactions | List the reactions on a message and who left them | ReadOnly |
Limitations
- Replies are attributed to the connected user, not to the Chat app, because Fruxon authenticates with that user's OAuth credential.
- File attachments on inbound messages are described, not downloaded. Fetching the bytes needs the restricted read-message scope, so the agent sees the file name and content type in the message text rather than the file itself.
- Card interactions (
CARD_CLICKED,WIDGET_UPDATED) andREMOVED_FROM_SPACEevents are not handled.