zeroclaw-labs/zeroclaw · error · anyhow::Error
{channel_type} channel alias `{alias}` is not configured. Ru
Error message
{channel_type} channel alias `{alias}` is not configured. Run `zeroclaw config set channels.{channel_type}.{alias}.bot_token <token>` (see docs/book/src/channels/overview.md for the full field list). What it means
Thrown by bind_channel_identity_into when channel_alias_configured() reports that no `[channels.<type>.<alias>]` section exists. Binding into a phantom alias would create a peer group scoped to `<type>.<alias>` that the running channel never reads (authorization resolves under the alias the channel actually runs as), so the code fails loudly instead of silently authorizing nobody.
Source
Thrown at crates/zeroclaw-channels/src/orchestrator/mod.rs:8674
let Some(normalize) = channel_identity_normalizer(channel_type) else {
anyhow::bail!(
"Channel type `{channel_type}` does not support identity binding \
(supported: telegram, wechat, line)."
);
};
let normalized = normalize(identity);
if normalized.is_empty() {
anyhow::bail!("{channel_type} identity cannot be empty");
}
// The alias must name an existing `[channels.<type>.<alias>]` section.
// Binding into a phantom alias would mint a peer group the runtime never
// reads (it resolves authorization per the alias the channel actually
// runs under), so fail loudly instead of silently authorizing nobody.
if !channel_alias_configured(config, channel_type, alias) {
anyhow::bail!(
"{channel_type} channel alias `{alias}` is not configured. Run \
`zeroclaw config set channels.{channel_type}.{alias}.bot_token <token>` \
(see docs/book/src/channels/overview.md for the full field list)."
);
}
let group_name = format!("{channel_type}_{alias}");
let channel_ref = format!("{channel_type}.{alias}");
let group = config
.peer_groups
.entry(group_name)
.or_insert_with(|| PeerGroupConfig {
channel: ChannelRef::new(channel_ref),
..PeerGroupConfig::default()
});
if group
.external_peersView on GitHub (pinned to 88bb9c8533)
Solutions
- List configured aliases of that type in zeroclaw.toml under `[channels.telegram]` (or wechat/line) and re-run the bind with the exact alias
- If the alias should exist, create it: `zeroclaw config set channels.telegram.work.bot_token <token>` (plus the other required fields per docs/book/src/channels/overview.md)
- Re-run the bind command with the corrected alias
Example fix
# before zeroclaw bind telegram work 123456789 # error: telegram channel alias `work` is not configured. # after zeroclaw config set channels.telegram.work.bot_token "123:ABC" zeroclaw bind telegram work 123456789
Defensive patterns
Strategy: validation
Validate before calling
use zeroclaw_channels::orchestrator::channel_alias_configured;
if !channel_alias_configured(&config, channel_type, alias) {
return Ok(notify(format!("configure [channels.{channel_type}.{alias}] first")));
}
bind_channel_identity_into(&mut config, channel_type, alias, identity)?; Try / catch
Err(err) if err.to_string().contains("is not configured") => {
// offer to create the channel section or list existing aliases of that type
} Prevention
- Run channel setup (`zeroclaw setup <type>`) before any bind commands
- In automation, fetch the configured alias list from config.channels and validate the target alias first
- Treat bind-alias typos as config errors: verify against zeroclaw.toml, not memory
When it happens
Trigger: Calling bind_channel_identity_into(config, "telegram", "work", ...) when `[channels.telegram.work]` is absent — e.g. the channel was configured under alias `default`, or the section was removed. Alias matching is exact against the typed channel maps (config.channels.telegram/wechat/line).
Common situations: Binding to the wrong alias name (typo, or assuming `default` when the config uses `work`); channel section deleted after the bind command was drafted; forgetting to run `zeroclaw setup telegram` first so no channel section exists yet.
Related errors
- model_provider `{ref_or_family}` does not resolve to a confi
- agents.{agent_alias}.model_provider is empty; runtime reload
- model_provider `{trimmed}` must use `<type>.<alias>` form
- model_provider `{trimmed}` does not resolve to a configured
- Channel type `{channel_type}` does not support identity bind
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/87fcc75c2193c399.
Report an issue: GitHub.