openclaw - 💡(How to fix) Fix Slack channel sends fail: `reconcileUnknownSend` required but no channel adapter implements it

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

When an agent attempts to send a message into a Slack channel via the message tool, the call fails with:

Required durable message send is unsupported for slack: missing reconcileUnknownSend

DMs work because they use the natural assistant-emit path. Channel sends route through the message tool, which requires durable delivery, which requires reconcileUnknownSend — and no channel adapter implements it.

Root Cause

DMs work because they use the natural assistant-emit path. Channel sends route through the message tool, which requires durable delivery, which requires reconcileUnknownSend — and no channel adapter implements it.

Fix Action

Fix / Workaround

Local workaround we're running

Re-applied idempotently in our upgrade script. Detailed patch + rationale at: host/infra/patches/openclaw-slack-channel-reconcile.patch in our deployment repo.

Code Example

Required durable message send is unsupported for slack: missing reconcileUnknownSend

---

{
  "action": "send",
  "channel": "slack",
  "target": "channel:C0XXXXX",
  "accountId": "consultant",
  "message": "[[reply_to_current]]some reply"
}

---

const requirements = { reconcileUnknownSend: true };

---

if (required === true && capability === "reconcileUnknownSend" && typeof messageDurableFinal?.reconcileUnknownSend !== "function") return { ok: false, reason: "capability_mismatch", capability };

---

- const requirements = { reconcileUnknownSend: true };
+ const requirements = {};
RAW_BUFFERClick to expand / collapse

Summary

When an agent attempts to send a message into a Slack channel via the message tool, the call fails with:

Required durable message send is unsupported for slack: missing reconcileUnknownSend

DMs work because they use the natural assistant-emit path. Channel sends route through the message tool, which requires durable delivery, which requires reconcileUnknownSend — and no channel adapter implements it.

Reproduction

  • OpenClaw 2026.5.12 (also verified on 2026.5.19)
  • @openclaw/slack plugin 2026.5.12 (also verified on 2026.5.19)
  • Slack channel with bot invited + chat:write + channels:history scopes
  • Agent uses the message tool with target: "channel:<id>"

Tool call payload that triggers it:

{
  "action": "send",
  "channel": "slack",
  "target": "channel:C0XXXXX",
  "accountId": "consultant",
  "message": "[[reply_to_current]]some reply"
}

Stack location: dist/message-22rGu__T.jsderiveRequiredMessageSendCapabilities hardcodes:

const requirements = { reconcileUnknownSend: true };

And asserts via assertRequiredMessageSendDurabilityresolveOutboundDurableFinalDeliverySupport:

if (required === true && capability === "reconcileUnknownSend" && typeof messageDurableFinal?.reconcileUnknownSend !== "function") return { ok: false, reason: "capability_mismatch", capability };

What I observed

I greped every channel-*.js in /usr/lib/node_modules/openclaw/dist/:

  • @openclaw/slack declares deliveryCapabilities.durableFinal: { text, media, payload, replyTo, thread, messageSendingHooks } — no reconcileUnknownSend
  • @openclaw/mattermost declares the same shape — no reconcileUnknownSend
  • @openclaw/msteams, @openclaw/tlon — same
  • Telegram adapter — same
  • Only dist/channel-message-CmG6T1ry.js (the runtime, not an adapter) mentions reconcileUnknownSend

So the requirement is asserted but no shipping adapter satisfies it.

Why it doesn't fire for other channels in practice

Other channels' agent sends apparently don't reach queuePolicy === "required". The exact branching is non-obvious from the minified bundle, but our Telegram setup works end-to-end with the same channel-send pattern. Slack is hitting the required branch for some channel-targeted sends.

Suggested fix

Either:

  1. Drop the unconditional requirement and let adapters opt-in to reconcileUnknownSend when they actually implement it (the safest — matches the current actual ship state); or
  2. Have @openclaw/slack provide a message.durableFinal.reconcileUnknownSend implementation. For Slack channel sends via chat.postMessage, the API is synchronous and returns ts immediately, so the unknown-send case is rare; a stub returning { status: "unresolved" } would unblock; or
  3. Add a synchronousSend: true capability to adapter declarations that, when set, skips the reconcileUnknownSend requirement.

Local workaround we're running

- const requirements = { reconcileUnknownSend: true };
+ const requirements = {};

(plus the matching reconcileUnknownSend: false on the per-payload deriveDurableFinalDeliveryRequirements call).

Re-applied idempotently in our upgrade script. Detailed patch + rationale at: host/infra/patches/openclaw-slack-channel-reconcile.patch in our deployment repo.

Context

We're running a 6-agent Slack workspace with Socket Mode + a shared Slack Connect channel with an external collaborator. The agents process the external collaborator's messages cleanly (we can see the model output in the journal) but the response delivery dies at this capability check. Telegram-only worked; Slack was added on top recently.

Happy to PR option 1 against your tree if helpful.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix Slack channel sends fail: `reconcileUnknownSend` required but no channel adapter implements it