Skip to content

Slack native streaming: missing_recipient_team_id error on chat.stopStream #19839

@rf-openclaw-bot

Description

@rf-openclaw-bot

Description

Slack native text streaming (chat.startStream/appendStream/stopStream) introduced in 2026.2.17 fails with missing_recipient_team_id on stopStream calls, causing the streamed message to disappear after generation.

Steps to Reproduce

  1. Enable Slack native streaming (default in 2026.2.17) with assistant:write scope added and app reinstalled
  2. Have a multi-account Slack setup (two bot accounts: default + secondary)
  3. Send a message to either bot in a Slack channel
  4. Bot starts streaming (message appears and text is generated live)
  5. On stopStream, the API returns missing_recipient_team_id and the message vanishes

Expected Behavior

Stream should finalize and the message should persist.

Actual Behavior

[slack] slack-stream: failed to stop stream: Error: An API error occurred: missing_recipient_team_id

The message disappears from Slack after streaming completes.

Environment

  • OpenClaw: 2026.2.17
  • Slack: Socket mode, multi-account (2 bot tokens)
  • Not Enterprise Grid — standard Slack workspace
  • Both apps have assistant:write and chat:write scopes
  • Apps reinstalled after adding scopes

Analysis

Per Slack API docs, chat.startStream and chat.stopStream require a recipient_team_id parameter. This appears to not be passed by OpenClaw's Slack streaming implementation.

The fix is likely to fetch team_id via team.info at startup (or from event payloads) and pass it as recipient_team_id in all streaming API calls.

Workaround

Disable native streaming and use block streaming with message_end break:

{
  "channels": {
    "slack": {
      "streaming": false,
      "blockStreaming": true
    }
  },
  "agents": {
    "defaults": {
      "blockStreamingBreak": "message_end"
    }
  }
}

This gives one message per model turn instead of the old per-chunk spam, while avoiding the broken streaming API.

Metadata

Metadata

Assignees

No one assigned

    Labels

    close:duplicateClosed as duplicatededupe:childDuplicate issue/PR child in dedupe cluster

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions