openclaw - 💡(How to fix) Fix [Bug] Feishu message.send appears to require card and plain text send fails while minimal card send succeeds [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#54319Fetched 2026-04-08 01:29:06
View on GitHub
Comments
0
Participants
1
Timeline
0
Reactions
0
Participants

In a Feishu direct chat, trying to use the message tool for an explicit outbound text send did not work as expected.

Observed behavior:

  1. Calling message.send with channel:"feishu" and a normal message:"..." payload failed local validation because card was treated as required.
  2. Retrying with an empty card: {} passed tool validation but failed at runtime with HTTP 400.
  3. Retrying again with a minimal valid Feishu card payload succeeded.

So in practice, explicit Feishu delivery worked via card send, but not via the expected plain text send path.

Error Message

  • error said card was required

Root Cause

This blocks a clean workaround for other Feishu delivery issues.

When normal assistant replies are suspect, the obvious fallback is explicit message.send text delivery. But if Feishu explicit text send also fails, users are forced into card-only workarounds.

Fix Action

Fix / Workaround

This blocks a clean workaround for other Feishu delivery issues.

When normal assistant replies are suspect, the obvious fallback is explicit message.send text delivery. But if Feishu explicit text send also fails, users are forced into card-only workarounds.

Code Example

{
  "action": "send",
  "channel": "feishu",
  "message": "test text"
}

---

{
  "action": "send",
  "channel": "feishu",
  "message": "test text",
  "card": {}
}

---

{
  "action": "send",
  "channel": "feishu",
  "card": {
    "config": { "wide_screen_mode": true },
    "header": {
      "title": {
        "tag": "plain_text",
        "content": "显式发送测试结果"
      }
    },
    "elements": [
      {
        "tag": "div",
        "text": {
          "tag": "lark_md",
          "content": "hello"
        }
      }
    ]
  }
}
RAW_BUFFERClick to expand / collapse

[Bug] Feishu message.send appears to require card and plain text send fails, while a minimal card send succeeds

Summary

In a Feishu direct chat, trying to use the message tool for an explicit outbound text send did not work as expected.

Observed behavior:

  1. Calling message.send with channel:"feishu" and a normal message:"..." payload failed local validation because card was treated as required.
  2. Retrying with an empty card: {} passed tool validation but failed at runtime with HTTP 400.
  3. Retrying again with a minimal valid Feishu card payload succeeded.

So in practice, explicit Feishu delivery worked via card send, but not via the expected plain text send path.

Environment

  • OpenClaw version: 2026.3.23-2
  • Channel: Feishu direct chat
  • Surface under test: message tool
  • Host: Linux gateway

Why I tested this

I was debugging another Feishu delivery issue where a parent reply after sessions_spawn completion sometimes was not visible to the user.

To isolate the delivery path, I tried bypassing the normal parent final-answer route and explicitly sending the result through the message tool.

That revealed a second issue: Feishu plain text explicit send did not work, while Feishu card send did.

Reproduction

Attempt 1: plain text only

Tool call shape:

{
  "action": "send",
  "channel": "feishu",
  "message": "test text"
}

Observed result:

  • local tool validation failed
  • error said card was required

Attempt 2: plain text + empty card

Tool call shape:

{
  "action": "send",
  "channel": "feishu",
  "message": "test text",
  "card": {}
}

Observed result:

  • validation passed
  • runtime returned HTTP 400

Attempt 3: minimal valid card

Tool call shape:

{
  "action": "send",
  "channel": "feishu",
  "card": {
    "config": { "wide_screen_mode": true },
    "header": {
      "title": {
        "tag": "plain_text",
        "content": "显式发送测试结果"
      }
    },
    "elements": [
      {
        "tag": "div",
        "text": {
          "tag": "lark_md",
          "content": "hello"
        }
      }
    ]
  }
}

Observed result:

  • send succeeded
  • user received the card

Expected behavior

At least one of these should be true:

  1. message.send for Feishu should support plain text sends without requiring card, or
  2. the schema / docs should clearly state that Feishu explicit sends through message.send require card payloads and plain text is unsupported.

Right now the behavior is confusing because the generic message tool strongly suggests text sends are normal, but Feishu appears to reject or mis-handle that path.

Actual behavior

  • plain text send fails schema validation because card appears required
  • adding an empty card just moves failure to runtime HTTP 400
  • only a proper Feishu card succeeds

Suspected scope

Could be one or more of:

  1. message tool schema incorrectly marks card as globally required instead of conditionally required
  2. Feishu adapter expects a card payload even for cases where generic text send should be supported
  3. Feishu adapter text-send path is broken or not wired for this tool surface
  4. provider-specific validation / normalization for Feishu is inconsistent with the generic message API

Why this matters

This blocks a clean workaround for other Feishu delivery issues.

When normal assistant replies are suspect, the obvious fallback is explicit message.send text delivery. But if Feishu explicit text send also fails, users are forced into card-only workarounds.

Related context

This was discovered while debugging a separate issue already filed for:

  • Feishu DM missing the parent final reply after sessions_spawn completion even though the reply exists in session history

That issue is about normal reply visibility. This issue is narrower: explicit Feishu text send via message.send appears broken or undocumented.

Request

Please clarify whether Feishu message.send is supposed to support plain text sends.

If yes, this looks like a bug. If no, please make the schema and docs reflect that clearly so callers know they must send cards instead.

extent analysis

Fix Plan

To fix the issue of Feishu message.send not supporting plain text sends, we need to update the schema and documentation to clearly state that Feishu explicit sends through message.send require card payloads and plain text is unsupported.

Here are the steps:

  • Update the message tool schema to conditionally require card for Feishu channel.
  • Update the Feishu adapter to expect a card payload for explicit sends.
  • Update the documentation to reflect the changes.

Example code snippet to update the schema:

{
  "action": "send",
  "channel": "feishu",
  "properties": {
    "card": {
      "type": "object",
      "required": true
    }
  }
}

Example code snippet to update the Feishu adapter:

def send_message(channel, message):
    if channel == "feishu":
        # Require card payload for Feishu explicit sends
        if not message.get("card"):
            raise ValueError("Card payload is required for Feishu explicit sends")
        # Process card payload
        card = message["card"]
        # ...
    else:
        # Process plain text send for other channels
        # ...

Verification

To verify the fix, test the message.send tool with Feishu channel and plain text payload, and ensure that it fails with a clear error message indicating that a card payload is required. Then, test with a valid card payload and ensure that the send succeeds.

Extra Tips

  • Make sure to update the documentation to reflect the changes to avoid confusion for users.
  • Consider adding a warning or deprecation notice for users who are currently using plain text sends with Feishu channel.
  • Test the fix thoroughly to ensure that it does not introduce any regressions.

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…

FAQ

Expected behavior

At least one of these should be true:

  1. message.send for Feishu should support plain text sends without requiring card, or
  2. the schema / docs should clearly state that Feishu explicit sends through message.send require card payloads and plain text is unsupported.

Right now the behavior is confusing because the generic message tool strongly suggests text sends are normal, but Feishu appears to reject or mis-handle that path.

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 [Bug] Feishu message.send appears to require card and plain text send fails while minimal card send succeeds [1 participants]