openclaw - ✅(Solved) Fix Subagent announce fails with Outbound not configured for channel: telegram [2 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#55551Fetched 2026-04-08 01:38:11
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Timeline (top)
referenced ×3cross-referenced ×2commented ×1

Subagent completion results are not delivered to Telegram, even though main agent messages work fine.

Error Message

Error: Outbound not configured for channel: telegram

Root Cause

Subagent completion results are not delivered to Telegram, even though main agent messages work fine.

PR fix notes

PR #55622: fix(channels): use pinned channel registry in createChannelRegistryLoader

Description (problem / solution / changelog)

Problem

createChannelRegistryLoader (used by loadChannelOutboundAdapter) calls getActivePluginRegistry() which is the unpinned active registry. When anything triggers a transient setActivePluginRegistry() call — config-schema reads, maybeBootstrapChannelPlugin, loadOpenClawPlugins for non-primary contexts — the activeRegistry pointer changes.

When registry !== lastRegistry, the loader cache is cleared. The new (possibly empty or different) registry no longer contains the channel plugin, causing:

Outbound not configured for channel: telegram
Outbound not configured for channel: slack

Subagent completions silently fail to announce back. Retries all fail because the registry state persists.

Fix

Use requireActivePluginChannelRegistry() — the pinned startup registry — matching what getChannelPlugin() already does. Two-line change.

Testing

Verified locally on macOS (arm64), OpenClaw v2026.3.24, Telegram channel. Before fix: subagent announce failed consistently. After fix: announce delivers reliably.

Related Issues

  • Closes #55551
  • Related: #55382 (same root cause, Slack — includes deeper analysis)
  • Related: #14188 (original Telegram report, v2026.2.9)

Changed files

  • src/channels/plugins/registry-loader.ts (modified, +2/-2)

PR #55988: fix(outbound): fall back to pinned channel-surface registry in registry loader

Description (problem / solution / changelog)

Problem

Isolated cron job delivery and subagent announce-back intermittently fail with:

  • Outbound not configured for channel: discord
  • Unsupported channel: discord

This happens when a non-primary plugin reload (config-schema read, provider snapshot, etc.) replaces the active plugin registry with a minimal set that omits channel plugins. The outbound registry loader (createChannelRegistryLoader) only checks the active registry, missing the channel that was fully loaded at gateway startup.

Root Cause

The channel-surface registry is pinned at gateway startup via pinActivePluginChannelRegistry() and is immune to subsequent registry swaps. However, createChannelRegistryLoader (used by loadChannelOutboundAdapter) only reads from getActivePluginRegistry() — not the pinned channel surface.

This means getChannelPlugin("discord") (which uses requireActivePluginChannelRegistry()) succeeds, but loadChannelOutboundAdapter("discord") fails — they see different registries.

Two prior fixes attempted to address this:

  • fa6ff39 — added resolveDirectFromActiveRegistry fallback
  • 0c2ae71 — added resolveOutboundChannelPlugin call before loadChannelOutboundAdapter

Both fixes resolve the plugin from the active registry — which is exactly the registry that gets swapped out. Neither falls back to the pinned channel surface.

Fix

Add a fallback in createChannelRegistryLoader to check the channel-surface registry when the active registry does not contain the requested channel. This mirrors what getChannelPlugin already does via requireActivePluginChannelRegistry.

The fallback only activates when the channel-surface registry is a different (pinned) object from the active registry, avoiding unnecessary lookups in the common case.

Testing

  • 5 new unit tests covering: normal resolution, missing channel, pinned fallback, same-registry no-fallback, and cache invalidation
  • All existing runtime.channel-pin, channel-resolution, and outbound tests pass

Fixes #12769 Refs #14266, #55551, #54745

Changed files

  • src/channels/plugins/registry-loader.test.ts (added, +109/-0)
  • src/channels/plugins/registry-loader.ts (modified, +32/-4)
RAW_BUFFERClick to expand / collapse

Description

Subagent completion results are not delivered to Telegram, even though main agent messages work fine.

Steps to Reproduce

  1. Spawn a subagent (RD/QA) from main session
  2. Wait for subagent to complete
  3. Result is not delivered to user

Expected Behavior

Subagent completion result should appear in Telegram chat

Actual Behavior

Subagent announce give up (retry-limit) retries=3 Error: Outbound not configured for channel: telegram

Environment

  • OpenClaw running on macOS
  • Telegram channel configured (main agent can send/receive)
  • Subagent completes but cannot announce back

Additional Context

  • Main agent messages work fine
  • Only subagent announce (auto push on completion) fails
  • Happens with both runtime: subagent and runtime: acp agents

extent analysis

Fix Plan

The fix involves configuring the outbound channel for the Telegram subagent.

Steps to Fix

  • Update the config.yaml file to include the Telegram outbound channel configuration for subagents:
outbound:
  channels:
    telegram:
      enabled: true
      subagent_enabled: true
  • Restart the OpenClaw service to apply the changes:
sudo systemctl restart openclaw
  • Verify that the subagent completion results are delivered to the Telegram chat.

Verification

  • Spawn a new subagent and wait for it to complete.
  • Check the Telegram chat for the subagent completion result message.
  • If the message is received, the fix is successful.

Extra Tips

  • Ensure that the Telegram channel is properly configured and enabled for the main agent.
  • Check the OpenClaw logs for any errors related to the outbound channel configuration.
  • If issues persist, try increasing the retry limit for the subagent announce feature.

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