openclaw/openclaw · critical · Error
ClickClack channel not found: ${channel}
Error message
ClickClack channel not found: ${channel} What it means
Thrown by resolveChannelId when the configured or input channel identifier (name or id) doesn't match any channel returned by client.channels(workspaceId). The channel doesn't exist in the workspace or the bot can't see it.
Source
Thrown at extensions/clickclack/src/resolve.ts:41
/**
* Resolves a channel name/id from config or target input to a ClickClack
* channel id.
*/
export async function resolveChannelId(
client: ClickClackClient,
workspaceId: string,
channel: string,
) {
if (channel.startsWith("chn_")) {
return channel;
}
const channels = await client.channels(workspaceId);
const found = channels.find(
(candidate) => candidate.id === channel || candidate.name === channel,
);
if (!found) {
throw new Error(`ClickClack channel not found: ${channel}`);
}
return found.id;
}
View on GitHub (pinned to 01804a7531)
Solutions
- Verify the channel name/id exists in the target ClickClack workspace.
- Use the channel id (prefixed with chn_) directly to avoid name ambiguity.
- Ensure the bot is a member of the channel, especially for private channels.
- List channels via the ClickClack API to find the correct identifier.
Example fix
// before: channel name that may not resolve const channelId = await resolveChannelId(client, workspaceId, "general-discussion"); // after: use the stable channel id const channelId = await resolveChannelId(client, workspaceId, "chn_xyz789abc");
Defensive patterns
Strategy: validation
Validate before calling
import { resolveChannelId } from "./resolve.js";
// Validate before use
const channels = await client.channels(workspaceId);
const configured = config.channel;
const exists = channels.some((c) => c.id === configured || c.name === configured);
if (!exists && !configured.startsWith("chn_")) {
throw new Error(`Channel "${configured}" not found in workspace ${workspaceId}.`);
} Try / catch
try {
const channelId = await resolveChannelId(client, workspaceId, channel);
} catch (error) {
if (error instanceof Error && error.message.includes("channel not found")) {
logger.error(`Channel "${channel}" not found in workspace. Available: ${channels.map((c) => c.name).join(", ")}`);
}
throw error;
} Prevention
- Use the stable channel id (chn_ prefix) to avoid name resolution failures.
- Ensure the bot is a member of private channels it needs to resolve.
- Verify channel existence after workspace reorganizations or renames.
When it happens
Trigger: Channel resolution is called with a channel name or id that doesn't match any channel in the workspace's channel list. The bot token doesn't have visibility of the channel, or it was deleted.
Common situations: Channel was deleted or renamed; bot wasn't added to the channel; typo in channel name/id in config or target input; channel is private and bot lacks membership; workspace context mismatch.
Related errors
- ClickClack workspace not found: ${workspace}
- profile "${name}" not found
- Profile "${name}" not found. Available profiles: ${available
- ReleaseSigning.json must pin apkCertificateSha256 as 64 lowe
- Claude session cannot be resumed in a terminal
AI-assisted analysis of openclaw/openclaw@01804a7531 (2026-08-12).
Data as JSON: /api/errors/6f94c28d0cd0aec1.
Report an issue: GitHub.