openclaw - 💡(How to fix) Fix Feishu channel cannot do true block streaming; block chunks are dropped unless streaming card is enabled [1 comments, 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#55027Fetched 2026-04-08 01:33:33
View on GitHub
Comments
1
Participants
1
Timeline
1
Reactions
0
Participants
Timeline (top)
commented ×1

Feishu currently does not seem to support true progressive/block delivery.

In practice, there are only two behaviors:

  • channels.feishu.streaming enabled
    Replies go through FeishuStreamingSession, and the interactive card displays text with a character-by-character playback effect.

  • channels.feishu.streaming = false
    The slow playback disappears, but block chunks are not progressively delivered to Feishu.

What I want is: when the runtime emits a block, Feishu should send that block immediately, instead of replaying it through a card animation or waiting for the final reply.

Root Cause

Feishu currently does not seem to support true progressive/block delivery.

In practice, there are only two behaviors:

  • channels.feishu.streaming enabled
    Replies go through FeishuStreamingSession, and the interactive card displays text with a character-by-character playback effect.

  • channels.feishu.streaming = false
    The slow playback disappears, but block chunks are not progressively delivered to Feishu.

What I want is: when the runtime emits a block, Feishu should send that block immediately, instead of replaying it through a card animation or waiting for the final reply.

Code Example

if (info?.kind === "block") {
  if (!(streamingEnabled && useCard)) {
    return;
  }
  startStreaming();
}

---

streaming_config: {
  print_frequency_ms: { default: 50 },
  print_step: { default: 1 }
}
RAW_BUFFERClick to expand / collapse

Summary

Feishu currently does not seem to support true progressive/block delivery.

In practice, there are only two behaviors:

  • channels.feishu.streaming enabled
    Replies go through FeishuStreamingSession, and the interactive card displays text with a character-by-character playback effect.

  • channels.feishu.streaming = false
    The slow playback disappears, but block chunks are not progressively delivered to Feishu.

What I want is: when the runtime emits a block, Feishu should send that block immediately, instead of replaying it through a card animation or waiting for the final reply.

Actual behavior

In current source, block chunks appear to be dropped unless they can be consumed by the streaming-card path:

if (info?.kind === "block") {
  if (!(streamingEnabled && useCard)) {
    return;
  }
  startStreaming();
}

And the streaming card itself uses character-by-character playback:

streaming_config: {
  print_frequency_ms: { default: 50 },
  print_step: { default: 1 }
}

So today the tradeoff is:

  • streaming enabled → fake/slow card playback
  • streaming disabled → no true block delivery

Expected behavior

For Feishu, when block streaming is enabled, each emitted block should be delivered progressively to the user without relying on card-side playback animation.

Environment

  • OpenClaw installed version: 2026.3.23-1
  • Latest source also checked at commit: 4cb8dde894
  • Feishu channel
  • renderMode: "card"

extent analysis

Fix Plan

To achieve true progressive/block delivery in Feishu, we need to modify the code to send block chunks immediately without relying on the streaming card animation.

Step-by-Step Solution

  1. Modify the block chunk handling: Remove the condition that drops block chunks when streaming is disabled or not using a card.
  2. Introduce a new delivery mechanism: Create a function to send block chunks directly to Feishu without using the streaming card.
  3. Update the streaming configuration: Remove the character-by-character playback configuration.

Example Code

// Remove the condition that drops block chunks
if (info?.kind === "block") {
  // Send block chunk directly to Feishu
  sendBlockChunkToFeishu(info);
}

// New function to send block chunks directly to Feishu
function sendBlockChunkToFeishu(blockChunk: any) {
  // Implement the logic to send the block chunk to Feishu
  // For example:
  feishuApiClient.sendBlockChunk(blockChunk);
}

// Update the streaming configuration
streaming_config: {
  // Remove the print_frequency_ms and print_step configurations
}

Verification

To verify that the fix worked, enable block streaming and check if the block chunks are delivered progressively to the user without the card animation.

Extra Tips

  • Make sure to update the Feishu API client to handle the new block chunk delivery mechanism.
  • Test the fix thoroughly to ensure that it works as expected in different scenarios.

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

For Feishu, when block streaming is enabled, each emitted block should be delivered progressively to the user without relying on card-side playback animation.

Still need to ship something?

×6

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

Back to top recommendations

TRENDING