A OpenClaw channel plugin that connects Rocket.Chat directly — no external bridge server. The plugin speaks to Rocket.Chat over a real-time WebSocket/DDP connection for both inbound and outbound traffic, and routes messages into OpenClaw's agent runtime.
- Inbound: real-time DDP stream, deduplicated via an on-disk checkpoint, filtered (bot's own messages, system events, empty/duplicate messages), and dispatched to the agent.
- Outbound: agent replies posted back into the same Rocket.Chat room/thread.
- Control: a built-in
!-command interface for bot management (no native slash commands).
Install the plugin:
openclaw plugins install <plugin-package>This plugin will soon be published to npm. Once the official package is available you'll install it the same way — the setup steps below remain identical.
The plugin ships an interactive wizard that provisions everything for you — no manual editing of openclaw.json required.
- A Rocket.Chat server you have admin access to. The wizard uses admin rights once, only to create the bot account.
- An AI provider and a default agent already configured in OpenClaw. (The wizard can create a dedicated agent for the bot, or bind it to one you pick.)
openclaw rocketchat setupThe wizard will:
- Ask for your Rocket.Chat server URL and an admin login.
- Create a dedicated bot user on your server and issue a personal access token for it.
- Create a dedicated OpenClaw agent for the bot (e.g.
rc-<bot>) — or bind it to an existing agent. - Write the channel account and
bindingsinto~/.openclaw/openclaw.json. - Optionally invite the bot into a group or channel.
The bot is just a normal Rocket.Chat user — invite or @-mention it like anyone else. Its access token is stored by the plugin under the OpenClaw config dir, so you never handle it by hand.
In Rocket.Chat, DM the bot (or @-mention it in a group it's been invited to) and send:
!status
You should see gateway - online and runtime - ready. If you don't, see Troubleshooting below.
Prefer the wizard above — but if you want to edit config by hand, a complete, annotated reference of the plugin's settings is shipped in openclaw.example.json. Merge its channels.rocketchat and bindings blocks into your ~/.openclaw/openclaw.json and set:
channels.rocketchat.accounts.main.serverUrl→ your Rocket.Chat URL.auth.userId/auth.accessToken→ the bot user's ID and personal access token (created viaopenclaw rocketchat setup, or in Rocket.Chat → My Account → Personal Access Tokens).bindings[0].agentId→ the agent the bot should use.
The bindings entry is what connects the bot account to an agent — without it the bot will not respond. Plugin registration is handled by openclaw plugins install, so you don't need to touch plugins.load.
Each entry under channels.rocketchat.accounts.<id>:
| Field | Type | Default | Notes |
|---|---|---|---|
enabled |
boolean | — | Must be true to start the gateway. |
serverUrl |
string | — | Rocket.Chat base URL (https recommended). |
auth |
object | — | mode: "token" (userId + accessToken) or mode: "password" (username + password). |
transport.mode |
"websocket" |
— | Only WebSocket/DDP is supported. |
transport.reconnectDelayMs |
number | 2000 |
Delay before reconnecting the DDP socket. |
transport.maxConcurrent |
number | 50 |
Max rooms processed in parallel per bot account. |
mentionNames |
string[] | [] |
Names that trigger the bot in group chats (e.g. ["rocketbot"]). In DMs the bot always responds. |
agent |
string | — | Optional agent override; otherwise the bindings entry decides. |
owner |
string | — | Rocket.Chat username that always has access (and is exempt from denials). |
Send these in a DM to the bot, or @-mention the bot with the command in a group.
Bot management
| Command | Description |
|---|---|
!help |
Show the command menu. |
!status |
OpenClaw-side status: gateway, bot, agent, runtime. |
!access |
Who is allowed to use the bot. |
!add-bot <user> |
Create a new bot account + dedicated agent. |
!remove-bot <user...> |
Delete bot account(s). |
!add-group <group> [bot] |
Invite a bot into a group. |
!kick <user> [group] |
Remove a user from a group. |
!lend <group|dm> <user> |
Grant access to a group or DM. |
!revoke <group|dm> <user> |
Revoke access. |
Context & model
| Command | Description |
|---|---|
!compact |
Compress conversation history. |
!reset |
Wipe all context. |
!new [model] |
Fresh session (optionally switch model). |
!model [name|#] |
List or switch the model. |
Behavior
| Command | Description |
|---|---|
!think <level> |
Set reasoning depth (off..high). |
!abort |
Stop the in-flight reply. |
!reasoning on/off |
Show/hide reasoning text. |
!verbose on/off |
Show/hide debug detail. |
Tools & skills
| Command | Description |
|---|---|
!tools |
List the agent's tools. |
!skills |
List installed skills. |
!skill <name> |
Run a skill. |
!statusshowsgateway - offline/stopped— the DDP socket isn't connected. CheckserverUrl, that the bot user exists, and that OpenClaw was restarted after config changes (openclaw restart). Look at OpenClaw logs for[rocketchat:<id>] ddp status: ….- Bot doesn't reply in a group — make sure you @-mention it using one of its
mentionNames, and thatbindingspoints the account at a valid agent. runtime - unavailable— the agent runtime wasn't ready when the message arrived; restart OpenClaw and retry.- Duplicate/replayed messages — the plugin deduplicates via
~/.openclaw/rocketchat/<id>.db; if you suspect staleness, that file is the checkpoint.