openclaw - ✅(Solved) Fix Feishu reply routed to webchat instead of Feishu in 2026.4.5 [1 pull requests, 1 participants]

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…
GitHub stats
openclaw/openclaw#62304Fetched 2026-04-08 03:06:19
View on GitHub
Comments
0
Participants
1
Timeline
2
Reactions
1
Participants
Timeline (top)
cross-referenced ×1referenced ×1

Fix Action

Fixed

PR fix notes

PR #62363: fix(routing): isRoutableChannel accepts npm-installed plugin channels (feishu webchat regression)

Description (problem / solution / changelog)

Root cause

isRoutableChannel() in src/auto-reply/reply/route-reply.ts gated cross-channel reply routing with:

return normalizeChatChannelId(channel) !== null || normalizeChannelId(channel) !== null;

When a channel plugin is installed via npm (e.g. @openclaw/feishu) rather than being bundled in the host package:

  • normalizeChatChannelId(channel)null (channel not in the static bundled catalog CHAT_CHANNEL_ID_SET)
  • normalizeChannelId(channel) (= normalizeAnyChannelId) → null if the runtime plugin registry has not yet been populated at the time this check runs

Both returning null made isRoutableChannel("feishu") === false. In the ACP/webchat path where Provider = "webchat", Surface = "feishu", OriginatingChannel = "feishu", shouldRouteToOriginating therefore evaluated to false, and the reply was delivered to the webchat dispatcher instead of being routed back to Feishu.

Call path (src/auto-reply/reply/routing-policy.ts):

resolveReplyRoutingDecision()
  shouldRouteToOriginating = !suppressDirectUserDelivery
                           && !isInternalWebchatTurn
                           && params.isRoutableChannel(originatingChannel)   ← returns false
                           && params.originatingTo
                           && originatingChannel !== currentSurface
  // → false → no routeReply → sendFinalReply on webchat dispatcher

Runtime path reaches the bug (G9): any Feishu message arriving via ACP/webchat bridge sets Provider = "webchat", Surface = "feishu", OriginatingChannel = "feishu". The fix is exercised on every such turn.

Fix

Add a final fallback to normalizeMessageChannel() which returns any non-empty, non-webchat string as-is. This ensures any well-formed channel id is treated as routable regardless of bundle/registry population status:

// src/auto-reply/reply/route-reply.ts  line ~244
const normalized = normalizeMessageChannel(channel);
return normalized != null && normalized !== INTERNAL_MESSAGE_CHANNEL;

The two-level fast-path (bundled catalog → runtime registry) is preserved; the fallback only fires when both miss.

Cross-channel impact (G8)

The same guard affects every npm-installed plugin channel. LINE, Zalo, and any custom channel installed as @openclaw/<channel> that is not bundled would have the same routing failure. The fix covers all of them.

Tests

New describe("isRoutableChannel") block in route-reply.test.ts:

  • returns false for undefined
  • returns false for webchat (internal channel)
  • returns true for a channel registered in the runtime plugin registry
  • returns true for feishu even when not present in runtime registry (npm-installed plugin regression) ← regression test for this issue
  • returns true for other npm-installed plugin channels not in bundled catalog (LINE, Zalo)

The existing test at line 844 in dispatch-from-config.test.ts mocked isRoutableChannel to hardcode "feishu" as routable — masking the production bug. That test now validates the integrated path rather than relying on the mock bypass.

Closes #62304

Changed files

  • src/auto-reply/reply/route-reply.test.ts (modified, +52/-1)
  • src/auto-reply/reply/route-reply.ts (modified, +15/-1)
RAW_BUFFERClick to expand / collapse

Describe the bug After upgrading to OpenClaw 2026.4.5, Feishu replies are sent to webchat instead of Feishu channel. Messages are received from Feishu but replies are not delivered back to Feishu.

To Reproduce

  1. Send a message from Feishu to the bot
  2. The bot receives the message correctly
  3. Reply appears in webchat but not in Feishu

Expected behavior Replies should be delivered to Feishu channel, same as before upgrade.

Environment

  • OpenClaw version: 2026.4.5 (also affected), 2026.4.2 (works fine)
  • Channel: Feishu with websocket connection
  • OS: macOS

Additional context

  • Downgrading to 2026.4.2 resolves the issue
  • Similar issues were reported in 2026.2.26 and 2026.3.2 but were supposedly fixed

extent analysis

TL;DR

Downgrade to OpenClaw version 2026.4.2 as a temporary workaround to resolve the issue of Feishu replies being sent to webchat instead of Feishu channel.

Guidance

  • Verify that the websocket connection to Feishu is stable and functioning correctly, as issues with the connection could exacerbate the problem.
  • Review the release notes for OpenClaw 2026.4.5 to see if there are any known issues or changes that could be causing the problem.
  • Test the bot with different types of messages to see if the issue is specific to certain types of replies.
  • Consider reaching out to the OpenClaw support team to report the issue and ask for their assistance in resolving it, given the history of similar issues in previous versions.

Notes

The fact that downgrading to 2026.4.2 resolves the issue suggests that the problem is specific to the newer version of OpenClaw. However, without more information about the changes made in 2026.4.5, it's difficult to provide a more targeted fix.

Recommendation

Apply the workaround of downgrading to OpenClaw version 2026.4.2, as it has been confirmed to resolve the issue, and then wait for a future update that hopefully addresses the problem.

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