You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Signal/container mode: add REST API support for bbernhard/signal-cli-rest-api containerized deployments via a unified adapter layer, with automatic mode detection and `channels.signal.apiMode` config. (#10240) Thanks @Hua688.
- A phone number that can receive one verification SMS (for SMS registration path).
16
18
- Browser access for Signal captcha (`signalcaptchas.org`) during registration.
17
19
@@ -179,6 +181,63 @@ If you want to manage `signal-cli` yourself (slow JVM cold starts, container ini
179
181
180
182
This skips auto-spawn and the startup wait inside OpenClaw. For slow starts when auto-spawning, set `channels.signal.startupTimeoutMs`.
181
183
184
+
## Container mode (bbernhard/signal-cli-rest-api)
185
+
186
+
Instead of running `signal-cli` natively, you can use the [bbernhard/signal-cli-rest-api](https://github.com/bbernhard/signal-cli-rest-api) Docker container. This wraps `signal-cli` behind a REST API and WebSocket interface.
187
+
188
+
Requirements:
189
+
190
+
- The container **must** run with `MODE=json-rpc` for real-time message receiving.
191
+
- Register or link your Signal account inside the container before connecting OpenClaw.
|`"native"`| Force native signal-cli (JSON-RPC at `/api/v1/rpc`, SSE at `/api/v1/events`) |
228
+
|`"container"`| Force bbernhard container (REST at `/v2/send`, WebSocket at `/v1/receive/{account}`) |
229
+
230
+
When `apiMode` is `"auto"`, OpenClaw caches the detected mode for 30 seconds to avoid repeated probes. Container receive is only selected for streaming after `/v1/receive/{account}` upgrades to WebSocket, which requires `MODE=json-rpc`.
231
+
232
+
Container mode supports the same Signal channel operations as native mode where the container exposes matching APIs: sends, receives, attachments, typing indicators, read/viewed receipts, reactions, groups, and styled text. OpenClaw translates its native Signal RPC calls into the container's REST payloads, including `group.{base64(internal_id)}` group IDs and `text_mode: "styled"` for formatted text.
233
+
234
+
Operational notes:
235
+
236
+
- Use `autoStart: false` with container mode. OpenClaw should not spawn a native daemon when `apiMode: "container"` is selected.
237
+
- Use `MODE=json-rpc` for receiving. `MODE=normal` can make `/v1/about` look healthy, but `/v1/receive/{account}` does not WebSocket-upgrade, so OpenClaw will not select container receive streaming in `auto` mode.
238
+
- Set `apiMode: "container"` when you know the `httpUrl` points at bbernhard's REST API. Set `apiMode: "native"` when you know it points at native `signal-cli` JSON-RPC/SSE. Use `"auto"` when the deployment may vary.
239
+
- Container attachment downloads honor the same media byte limits as native mode. Oversized responses are rejected before being fully buffered when the server sends `Content-Length`, and while streaming otherwise.
240
+
182
241
## Access control (DMs + groups)
183
242
184
243
DMs:
@@ -202,7 +261,8 @@ Groups:
202
261
203
262
## How it works (behavior)
204
263
205
-
-`signal-cli` runs as a daemon; the gateway reads events via SSE.
264
+
- Native mode: `signal-cli` runs as a daemon; the gateway reads events via SSE.
265
+
- Container mode: the gateway sends via REST API and receives via WebSocket.
206
266
- Inbound messages are normalized into the shared channel envelope.
207
267
- Replies always route back to the same number or group.
208
268
@@ -302,6 +362,7 @@ Full configuration: [Configuration](/gateway/configuration)
0 commit comments