docs(channels): cover WhatsApp replyToMode, Discord inheritParent, Sl… · openclaw/openclaw@30a5c44
vincentkoc
·
2026-04-23
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -655,6 +655,10 @@ Default slash command settings:
|
655 | 655 | - Discord threads are routed as channel sessions |
656 | 656 | - parent thread metadata can be used for parent-session linkage |
657 | 657 | - thread config inherits parent channel config unless a thread-specific entry exists |
| 658 | +- parent transcript inheritance into newly created auto-threads is opt-in via `channels.discord.thread.inheritParent` (default `false`). When `false`, newly created Discord thread sessions start isolated from the parent channel transcript; when `true`, the parent channel history seeds the new thread session |
| 659 | +- per-account overrides live under `channels.discord.accounts.<id>.thread.inheritParent` |
| 660 | +- message-tool reactions can resolve `user:<id>` DM targets in addition to channel targets |
| 661 | +- `channels.discord.guilds.<guild>.channels.<channel>.requireMention: false` is preserved during reply-stage activation fallback, so configured always-on channels stay always-on even when reply-stage fallback runs |
658 | 662 | |
659 | 663 | Channel topics are injected as **untrusted** context (not as system prompt). |
660 | 664 | Reply and quoted-message context currently stays as received. |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -267,6 +267,7 @@ Notes:
|
267 | 267 | - `progress` shows a status preview while generating and only posts the final answer at completion. |
268 | 268 | - `off` disables preview streaming. |
269 | 269 | - If the stream cannot be finalized in place (for example the post was deleted mid-stream), OpenClaw falls back to sending a fresh final post so the reply is never lost. |
| 270 | +- Reasoning-only payloads are suppressed from channel posts, including text that arrives as a `> Reasoning:` blockquote. Set `/reasoning on` to see thinking in other surfaces; the Mattermost final post keeps the answer only. |
270 | 271 | - See [Streaming](/concepts/streaming#preview-streaming-modes) for the channel-mapping matrix. |
271 | 272 | |
272 | 273 | ## Reactions (message tool) |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -710,6 +710,8 @@ Manual reply tags are supported:
|
710 | 710 | |
711 | 711 | Note: `replyToMode="off"` disables **all** reply threading in Slack, including explicit `[[reply_to_*]]` tags. This differs from Telegram, where explicit tags are still honored in `"off"` mode. The difference reflects the platform threading models: Slack threads hide messages from the channel, while Telegram replies remain visible in the main chat flow. |
712 | 712 | |
| 713 | +Focused Slack thread replies route through their bound ACP session when one exists, instead of preparing the reply against the default agent shell. That keeps `/focus` and `/acp spawn ... --bind here` bindings intact for follow-up messages in the thread. |
| 714 | + |
713 | 715 | ## Ack reactions |
714 | 716 | |
715 | 717 | `ackReaction` sends an acknowledgement emoji while OpenClaw is processing an inbound message. |
@@ -744,6 +746,7 @@ Notes:
|
744 | 746 | - Media and non-text payloads fall back to normal delivery. |
745 | 747 | - Media/error finals cancel pending preview edits without flushing a temporary draft; eligible text/block finals flush only when they can edit the preview in place. |
746 | 748 | - If streaming fails mid-reply, OpenClaw falls back to normal delivery for remaining payloads. |
| 749 | +- Slack Connect channels that reject a stream before the SDK flushes its local buffer fall back to normal Slack replies, so short replies are not silently dropped or reported as delivered before Slack acknowledges them. |
747 | 750 | |
748 | 751 | Use draft preview instead of Slack native text streaming: |
749 | 752 | |
@@ -1032,6 +1035,12 @@ openclaw pairing list slack
|
1032 | 1035 | snapshots, the HTTP account is configured but the current runtime could not |
1033 | 1036 | resolve the SecretRef-backed signing secret. |
1034 | 1037 | |
| 1038 | +Registered Request URL webhooks are dispatched through the same shared handler registry used by Slack monitor setup, so HTTP-mode Slack events keep routing through the registered path instead of 404ing after successful route registration. |
| 1039 | + |
| 1040 | +</Accordion> |
| 1041 | + |
| 1042 | +<Accordion title="File downloads with custom bot tokens"> |
| 1043 | +The `downloadFile` helper resolves its bot token from the runtime config when a caller passes `cfg` without an explicit `token` or prebuilt client, preserving cfg-only file downloads outside the action runtime path. |
1035 | 1044 | </Accordion> |
1036 | 1045 | |
1037 | 1046 | <Accordion title="Native/slash commands not firing"> |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -745,6 +745,10 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
745 | 745 | |
746 | 746 | </Accordion> |
747 | 747 | |
| 748 | +<Accordion title="Model picker authorization in groups"> |
| 749 | +Group model-picker inline buttons require the same authorization as `/models`. Unauthorized participants can browse and tap buttons, but OpenClaw rejects the callback before changing the session model. |
| 750 | +</Accordion> |
| 751 | + |
748 | 752 | <Accordion title="Long polling vs webhook"> |
749 | 753 | Default: long polling. |
750 | 754 | |
@@ -761,6 +765,8 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
|
761 | 765 | If your public endpoint differs, place a reverse proxy in front and point `webhookUrl` at the public URL. |
762 | 766 | Set `webhookHost` (for example `0.0.0.0`) when you intentionally need external ingress. |
763 | 767 | |
| 768 | +The grammY webhook callback returns a 200 within 5 seconds so Telegram does not retry long-running updates as read timeouts; longer work continues in the background. Polling rebuilds the HTTP transport after `getUpdates` 409 conflicts, so retries use a fresh TCP connection instead of looping on a Telegram-terminated keep-alive socket. |
| 769 | + |
764 | 770 | </Accordion> |
765 | 771 | |
766 | 772 | <Accordion title="Limits, retry, and CLI targets"> |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -331,6 +331,28 @@ When the linked self number is also present in `allowFrom`, WhatsApp self-chat s
|
331 | 331 | </Accordion> |
332 | 332 | </AccordionGroup> |
333 | 333 | |
| 334 | +## Reply quoting |
| 335 | + |
| 336 | +WhatsApp supports native reply quoting, where outbound replies visibly quote the inbound message. Control it with `channels.whatsapp.replyToMode`. |
| 337 | + |
| 338 | +| Value | Behavior | |
| 339 | +| -------- | ---------------------------------------------------------------------------------- | |
| 340 | +| `"auto"` | Quote the inbound message when the provider supports it; skip quoting otherwise | |
| 341 | +| `"on"` | Always quote the inbound message; fall back to a plain send if quoting is rejected | |
| 342 | +| `"off"` | Never quote; send as a plain message | |
| 343 | + |
| 344 | +Default is `"auto"`. Per-account overrides use `channels.whatsapp.accounts.<id>.replyToMode`. |
| 345 | + |
| 346 | +```json5 |
| 347 | +{ |
| 348 | + channels: { |
| 349 | + whatsapp: { |
| 350 | + replyToMode: "on", |
| 351 | + }, |
| 352 | + }, |
| 353 | +} |
| 354 | +``` |
| 355 | + |
334 | 356 | ## Reaction level |
335 | 357 | |
336 | 358 | `channels.whatsapp.reactionLevel` controls how broadly the agent uses emoji reactions on WhatsApp: |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -1042,6 +1042,7 @@ Hardening tips:
|
1042 | 1042 | OpenClaw loads workspace-local `.env` files for agents and tools, but never lets those files silently override gateway runtime controls. |
1043 | 1043 | |
1044 | 1044 | - Any key that starts with `OPENCLAW_*` is blocked from untrusted workspace `.env` files. |
| 1045 | +- Channel endpoint settings for Matrix, Mattermost, IRC, and Synology Chat are also blocked from workspace `.env` overrides, so cloned workspaces cannot redirect bundled connector traffic through local endpoint config. Endpoint env keys (such as `MATRIX_HOMESERVER`, `MATTERMOST_URL`, `IRC_HOST`, `SYNOLOGY_CHAT_INCOMING_URL`) must come from the gateway process environment or `env.shellEnv`, not from a workspace-loaded `.env`. |
1045 | 1046 | - The block is fail-closed: a new runtime-control variable added in a future release cannot be inherited from a checked-in or attacker-supplied `.env`; the key is ignored and the gateway keeps its own value. |
1046 | 1047 | - Trusted process/OS environment variables (the gateway's own shell, launchd/systemd unit, app bundle) still apply — this only constrains `.env` file loading. |
1047 | 1048 | |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。