openclaw - ✅(Solved) Fix [Bug] Feishu merge_forward messages fail to parse - content becomes [interactive] [1 pull requests, 1 comments, 2 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#77909Fetched 2026-05-06 06:19:30
View on GitHub
Comments
1
Participants
2
Timeline
3
Reactions
2
Author
Timeline (top)
commented ×1cross-referenced ×1renamed ×1

Fix Action

Fixed

PR fix notes

PR #77917: fix(feishu): handle interactive card sub-messages in merge_forward content

Description (problem / solution / changelog)

Problem

Closes #77909.

When a Feishu merge_forward bundle contains an interactive card (approval flow, form card), formatSubMessageContent falls through to the default [${contentType}] branch, producing [interactive] in the agent-visible content.

Log evidence from the issue:

feishu: merge_forward contains 1 sub-messages
feishu[default] DM from ou_xxx: [Merged and Forwarded Messages] - [interactive]

Fix

Add an interactive case to formatSubMessageContent in extensions/feishu/src/bot-content.ts:

case "interactive":
  return "[Interactive Card]";

This follows the existing pattern for other non-text types (image, audio, video, sticker) and produces a descriptive placeholder instead of the raw msg_type wrapped in brackets.

Tests

Added a test in bot.test.ts: a merge_forward API response where the sole sub-message has msg_type: "interactive" now produces [Interactive Card] in the agent body. All 61 existing feishu tests pass.

Scope

  • extensions/feishu/src/bot-content.ts — 2 lines added
  • extensions/feishu/src/bot.test.ts — 1 new test (67 lines)

🤖 Generated with Claude Code

Changed files

  • extensions/feishu/src/bot-content.ts (modified, +2/-0)
  • extensions/feishu/src/bot.test.ts (modified, +68/-0)

Code Example

feishu[default]: processing merge_forward message, fetching full content via API
feishu[default]: merge_forward API returned 2 items
feishu: parsing merge_forward sub-messages from API response
feishu: merge_forward contains 1 sub-messages
feishu[default]: Feishu[default] DM from ou_xxx: [Merged and Forwarded Messages] - [interactive]
RAW_BUFFERClick to expand / collapse

Bug Description

When the Feishu bot receives a merged and forwarded (merge_forward) message, OpenClaw calls the Feishu API to fetch the original content. The API returns 2 messages, but OpenClaw only parses 1 sub-message, and the content becomes either Merged and Forwarded Message or [interactive].

Merge_forward messages containing tables, cards, or interactive elements are completely stripped of their original content.

Log Evidence

feishu[default]: processing merge_forward message, fetching full content via API
feishu[default]: merge_forward API returned 2 items
feishu: parsing merge_forward sub-messages from API response
feishu: merge_forward contains 1 sub-messages
feishu[default]: Feishu[default] DM from ou_xxx: [Merged and Forwarded Messages] - [interactive]

The API returned 2 messages (containing full content), but after parsing only 1 message remains with placeholder text.

Environment

  • OpenClaw version: 2026.5.3-1
  • Feishu channel: WebSocket mode
  • Permission granted: im:message:readonly

Steps to Reproduce

  1. Have Agent A send a Feishu card message containing a table in Feishu
  2. Merge-forward that message to the bot
  3. The bot receives [Merged and Forwarded Messages] - [interactive] with original content lost

Expected Behavior

The bot should correctly parse and retrieve the original text content of merged and forwarded messages.

Additional Context

This appears to be a parsing issue in the merge_forward handling logic. The API call succeeds and returns data, but the subsequent parsing of the response fails to extract the actual message content.

extent analysis

TL;DR

The issue is likely due to incorrect parsing of the Feishu API response for merge_forward messages, resulting in only one sub-message being processed and original content being lost.

Guidance

  • Review the merge_forward handling logic in OpenClaw to ensure it correctly processes multiple sub-messages returned by the Feishu API.
  • Verify that the API response is being parsed correctly, checking for any discrepancies between the expected and actual response formats.
  • Investigate the possibility of updating the parsing logic to handle different types of messages, such as tables, cards, or interactive elements.
  • Check the Feishu API documentation to confirm the expected response format for merge_forward messages and ensure OpenClaw is handling it correctly.

Example

No code snippet is provided as the issue description does not include specific code details.

Notes

The issue appears to be specific to the merge_forward message handling in OpenClaw, and the solution may require updates to the parsing logic. The Feishu API documentation should be consulted to ensure correct handling of the API response.

Recommendation

Apply workaround: Update the merge_forward handling logic in OpenClaw to correctly parse and process multiple sub-messages returned by the Feishu API, ensuring that original content is not lost.

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 - ✅(Solved) Fix [Bug] Feishu merge_forward messages fail to parse - content becomes [interactive] [1 pull requests, 1 comments, 2 participants]