





















@@ -279,6 +279,8 @@ Generic model:
279279- Slack plugin approvals can use Slack's native approval client when the request comes from Slack
280280 and Slack plugin approvers resolve; `approvals.plugin` can also route plugin approvals to Slack
281281 sessions or targets even when Slack exec approvals are disabled
282+- WhatsApp emoji approval delivery is gated by `approvals.exec` and `approvals.plugin`, while
283+ approval reactions require explicit WhatsApp approvers from `channels.whatsapp.allowFrom` or `"*"`
282284283285Native approval clients auto-enable DM-first delivery when all of these are true:
284286@@ -296,6 +298,7 @@ FAQ: [Why are there two exec approval configs for chat approvals?](/help/faq-fir
296298- Discord: `channels.discord.execApprovals.*`
297299- Slack: `channels.slack.execApprovals.*`
298300- Telegram: `channels.telegram.execApprovals.*`
301+- WhatsApp: use `approvals.exec` and `approvals.plugin` to route approval prompts to WhatsApp
299302300303These native approval clients add DM routing and optional channel fanout on top of the shared
301304same-chat `/approve` flow and shared approval buttons.
@@ -313,6 +316,9 @@ Shared behavior:
313316 routing, not Slack exec approvers
314317- Slack native buttons preserve approval id kind, so `plugin:` ids can resolve plugin approvals
315318 without a second Slack-local fallback layer
319+- WhatsApp emoji approvals handle both exec and plugin prompts only when the matching top-level
320+ forwarding family is enabled and routes to WhatsApp; target-only WhatsApp forwarding stays on
321+ the shared forwarding path unless it matches the same native origin target
316322- Matrix native DM/channel routing and reaction shortcuts handle both exec and plugin approvals;
317323 plugin authorization still comes from `channels.matrix.dm.allowFrom`
318324- Matrix native prompts include `com.openclaw.approval` custom event content on the first prompt
@@ -358,6 +364,70 @@ Security notes:
358364- Same-UID peer check.
359365- Challenge/response (nonce + HMAC token + request hash) + short TTL.
360366367+## FAQ
368+369+### When would `accountId` and `threadId` be used on an approval target?
370+371+Use `accountId` when the channel has multiple configured identities and the approval prompt must
372+leave through one specific account. Use `threadId` when the destination supports topics or
373+threads and the prompt should stay inside that thread instead of the top-level chat.
374+375+A concrete Telegram case is an operations supergroup with forum topics and two Telegram bot
376+accounts. The `to` value names the supergroup, `accountId` selects the bot account, and `threadId`
377+selects the forum topic:
378+379+```json5
380+{
381+ approvals: {
382+ exec: {
383+ enabled: true,
384+ mode: "targets",
385+ targets: [
386+ {
387+ channel: "telegram",
388+ to: "-1001234567890",
389+ accountId: "ops-bot",
390+ threadId: "77",
391+ },
392+ ],
393+ },
394+ },
395+ channels: {
396+ telegram: {
397+ accounts: {
398+ default: {
399+ name: "Primary bot",
400+ botToken: "env:TELEGRAM_PRIMARY_BOT_TOKEN",
401+ },
402+"ops-bot": {
403+ name: "Operations bot",
404+ botToken: "env:TELEGRAM_OPS_BOT_TOKEN",
405+ },
406+ },
407+ },
408+ },
409+}
410+```
411+412+With that setup, forwarded exec approvals are posted by the `ops-bot` Telegram account into topic
413+`77` of chat `-1001234567890`. A target without `accountId` uses the channel's default account, and
414+a target without `threadId` posts to the top-level destination.
415+416+### When approvals are sent to a session, can anyone in that session approve them?
417+418+No. Session delivery only controls where the prompt appears. It does not by itself authorize every
419+participant in that chat to approve.
420+421+For generic same-chat `/approve`, the sender must already be authorized for commands in that
422+channel session. If the channel exposes explicit approval approvers, those approvers can authorize
423+the `/approve` action even when they are not otherwise command-authorized in that session.
424+425+Some channels are stricter. Discord, Telegram, Matrix, Slack native approval DMs, and similar
426+native approval clients use their resolved approver lists for approval authorization. For example,
427+a Telegram forum-topic approval prompt can be visible to everyone in the topic, but only numeric
428+Telegram user IDs resolved from `channels.telegram.execApprovals.approvers` or
429+`commands.ownerAllowFrom` can approve or deny it.
430+361431## Related
362432363433- [Exec approvals](/tools/exec-approvals) — core policy and approval flow
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。