openclaw - ✅(Solved) Fix [Bug]: Feishu push messages display literal 'NO_REPLY' text when no reply context exists [2 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#56117Fetched 2026-04-08 01:44:46
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Participants
Timeline (top)
cross-referenced ×2referenced ×2

Root Cause

Root Cause Hypothesis

Fix Action

Fix / Workaround

Based on observed behavior:

  1. Feishu plugin has a workaround mechanism to ensure notifications are delivered even without reply context
  2. When there is no reply_to, the system may route through a different code path
  3. The "NO_REPLY" silent instruction is being incorrectly passed through to the rendered message instead of being intercepted before delivery
  • Check the Feishu plugin's delivery code path for messages without reply_to
  • Verify the "NO_REPLY" instruction is being stripped before render, not after
  • Consider whether the workaround for missing reply context is inadvertently exposing internal tokens

PR fix notes

PR #56148: fix(feishu): suppress NO_REPLY in outbound sends

Description (problem / solution / changelog)

Summary

  • suppress pure NO_REPLY Feishu outbound text sends before they hit the transport
  • strip trailing/mixed NO_REPLY control tokens from visible Feishu text
  • keep media sends working while dropping silent-only captions

Testing

  • pnpm exec vitest run --config vitest.extensions.config.ts extensions/feishu/src/outbound.test.ts
  • pnpm exec oxfmt --check extensions/feishu/src/outbound.ts extensions/feishu/src/outbound.test.ts

Closes #56117

Changed files

  • extensions/feishu/src/outbound.test.ts (modified, +49/-0)
  • extensions/feishu/src/outbound.ts (modified, +30/-7)

PR #56167: fix(feishu): suppress NO_REPLY silent token before Feishu API calls

Description (problem / solution / changelog)

Summary

  • Add defense-in-depth NO_REPLY silent-token guard to feishuOutbound.sendText and feishuOutbound.sendMedia, matching the existing guard in the Slack plugin (extensions/slack/src/send.ts).
  • Heartbeat/cron push messages without reply context can bypass the upstream normalizeReplyPayload pipeline, leaking the internal NO_REPLY token as visible text to end users.
  • The sendText path now suppresses pure NO_REPLY messages before any Feishu API call; the sendMedia path strips NO_REPLY text captions while still delivering media attachments.

Changes

  • extensions/feishu/src/outbound.ts: Import isSilentReplyText from openclaw/plugin-sdk/reply-runtime and add guards in both sendText and sendMedia handlers.
  • extensions/feishu/src/outbound.test.ts: Add 4 test cases covering NO_REPLY suppression (exact match, whitespace-padded, substantive text passthrough, media-with-NO_REPLY-caption).

Test Plan

  • pnpm test -- extensions/feishu/src/outbound.test.ts — all 18 tests pass (14 existing + 4 new).

Closes #56117

Changed files

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

Code Example

{
  "has_reply_context": true,
  "reply_to": "om_xxxxxxxxxxxx"
}

---

{
  "has_reply_context": false  // or missing
}

---

📊 **早间播报 2026-03-28 09:01**
[report content...]
NO_REPLY
RAW_BUFFERClick to expand / collapse

[Bug]: Feishu push messages display literal 'NO_REPLY' text when no reply context exists

Bug Description

When OpenClaw sends heartbeat/push notifications to Feishu without a reply context (no reply_to message_id), the literal text "NO_REPLY" appears in the message content sent to the user.

Steps to Reproduce

  1. Configure a heartbeat or cron job that sends periodic reports to Feishu
  2. Ensure the push has no reply_to field (no prior message to reference)
  3. Observe the delivered Feishu message contains the text: NO_REPLY

Expected Behavior

  • Heartbeat/cron push messages should be delivered cleanly without any "NO_REPLY" text
  • "NO_REPLY" should be a silent instruction (internal), never rendered in user-visible content

Actual Behavior

  • User sees NO_REPLY appended to the end of normal push messages
  • This happens only on messages sent without a reply context (heartbeat/cron pushes)
  • Normal replies (which have reply_to set) do not exhibit this issue

Root Cause Hypothesis

Based on observed behavior:

  1. Feishu plugin has a workaround mechanism to ensure notifications are delivered even without reply context
  2. When there is no reply_to, the system may route through a different code path
  3. The "NO_REPLY" silent instruction is being incorrectly passed through to the rendered message instead of being intercepted before delivery

Environment

  • OpenClaw: 2026.3.x (latest)
  • Plugin: openclaw-lark (Feishu)
  • Connection: WebSocket
  • Channel: feishu direct DM

Evidence

Metadata comparison:

Normal reply (works correctly):

{
  "has_reply_context": true,
  "reply_to": "om_xxxxxxxxxxxx"
}

Heartbeat push (displays NO_REPLY):

{
  "has_reply_context": false  // or missing
}

Example received in Feishu:

📊 **早间播报 2026-03-28 09:01**
[report content...]
NO_REPLY

Impact

  • Push notifications are polluted with internal debug text
  • Degrades user trust in notification quality

Suggested Investigation

  • Check the Feishu plugin's delivery code path for messages without reply_to
  • Verify the "NO_REPLY" instruction is being stripped before render, not after
  • Consider whether the workaround for missing reply context is inadvertently exposing internal tokens

extent analysis

Fix Plan

To resolve the issue of "NO_REPLY" text being displayed in Feishu push messages without a reply context, follow these steps:

  1. Modify the Feishu plugin's delivery code:

    • Locate the section where messages are constructed for delivery.
    • Check for the presence of a reply_to field in the message metadata.
    • If reply_to is missing or empty, ensure that the "NO_REPLY" instruction is not appended to the message content.
  2. Strip "NO_REPLY" instruction before rendering:

    • Before the message is rendered and sent to the user, remove any "NO_REPLY" text from the content.
    • This can be done using a simple string replacement method.

Example code snippet (in Python) to illustrate the fix:

def construct_message(metadata, content):
    if 'reply_to' not in metadata or not metadata['reply_to']:
        # Ensure NO_REPLY is not appended to the content
        content = content.replace("NO_REPLY", "")
    return content

# Example usage
metadata = {"has_reply_context": False}
content = "📊 **早间播报 2026-03-28 09:01** [report content...] NO_REPLY"
clean_content = construct_message(metadata, content)
print(clean_content)

Verification

To verify that the fix worked:

  • Send a heartbeat or cron job push notification without a reply_to field.
  • Check the received message in Feishu to ensure it no longer contains the "NO_REPLY" text.

Extra Tips

  • Regularly review plugin code for similar issues where internal instructions might be exposed to users.
  • Consider implementing automated tests for message construction and delivery to catch such issues before they reach production.

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