OpenClaw Slack troubleshooting
Silent channels and the name-key trap, visible replies and room-event modes, ignored DMs and group DMs, Agent View DMs sharing one session, Socket Mode not connecting, HTTP mode not receiving events, and slash commands that never fire
A silent Slack bot has a short list of causes and the OpenClaw docs order them by how often they bite. Here is that order for channels, DMs and Agent View DMs, then the transport checks for Socket Mode and HTTP, and finally the commands that do not fire.
Channels and DMs
- For no replies in a channel check, in order, the group policy, the channel allowlist whose keys must be channel IDs or workspace-qualified targets rather than names because routing is ID-first and name keys silently fail under an allowlist policy, the mention requirement, the per-channel user allowlist, the visible-replies setting, which defaults to automatic and, when set to message-tool, keeps final text private unless the model calls the send action, and the unmentioned-inbound setting, which in room-event mode turns unmentioned chatter into ambient context that stays silent unless the agent uses the message tool.
- The useful commands are the channels status probe, the logs follow and the doctor; when preparation rejects an inbound event the info log records a rejection line with a reason and routing IDs, records describe attempts, so a rejected message event can still be followed by a successful app-mention event for the same post, and self-message loop prevention stays quiet.
- For ignored DMs check that DMs are enabled, the DM policy or its legacy key, the pairing approvals or allowlist entries, remembering that an open policy still requires the wildcard in the allowlist, the group-DM flag and the group-DM channel list for MPIMs, and note that verbose logs mentioning a dropped message-changed event usually mean Slack sent an edited Assistant-thread event without a recoverable human sender; the pairing list command shows what is approved.
- When every top-level message in the Messages tab lands on one session instead of its own thread session, check that the manifest uses the agent view feature with the assistant write scope and the app context changed subscription, that OpenClaw has seen an Agent View signal since install by opening the Messages tab or sending a DM from the composer, where a suggested-prompts internal-error log counts as evidence, that in HTTP mode at least one signed event has arrived so the app ID was learned, and that no state open, persist or load warning shows the durable marker failing; a signal already detected in the running process still applies, and after a restart Agent View resumes from the stored marker or a new signal.
Slack does not create or remove slash commands automatically.
Transports
If Socket Mode does not connect, validate the bot and app tokens and the Socket Mode enablement in the app settings: the app-level token needs the connections write scope, and the bot token must belong to the same app and workspace as the app token. A probe that reports the bot or app token status as configured-unavailable means the account is configured but the runtime could not resolve the SecretRef-backed value. A log saying Socket Mode failed to start and will retry is a recoverable start failure, whereas missing scopes, revoked tokens and invalid auth fail fast, and a token-mismatch log means the two tokens appear to belong to different apps, so the credentials need fixing on the Slack side. If HTTP mode receives nothing, validate the signing secret, the webhook path, the three request URLs for events, interactivity and slash commands, a unique webhook path per HTTP account, that the public URL terminates TLS and forwards to the gateway path, and that the app's request URL path exactly matches the configured webhook path, which defaults to the events path; a configured-unavailable signing-secret status has the same SecretRef meaning, and a repeated already-registered webhook path log means two HTTP accounts share a path.
Commands
- Decide which mode you intended: native command mode, with the native flag set to true and matching slash commands registered in Slack, or single slash-command mode with the slash command enabled; Slack does not create or remove slash commands automatically, and the auto value does not enable native commands on Slack, so use true and create the matching commands in the app.
- In HTTP mode every slash command must include the gateway URL, while in Socket Mode command payloads arrive over the websocket and the URL field is ignored.
- Also check the command allowlist when configured, DM authorisation, channel allowlists and per-channel user allowlists, with access-group entries in channel allowlists resolved automatically; Slack returns ephemeral errors for blocked slash-command senders, saying that the channel is not allowed or that the sender is not authorised to use the command there.
OpenClaw on Slack is the channel post these symptoms belong to, and OpenClaw Slack access control the allowlists behind most of them.
Name keys fail silently
The single most common silent channel is a name-based allowlist key: it looks right, it validates, and it matches nothing because routing works on IDs. Copying the channel link and using the ID at the end of the URL fixes it every time. OpenClaw Telegram troubleshooting lists the equivalent symptom-first checks for Telegram, and OpenClaw ambient room events explains the room-event mode that is silent on purpose rather than by mistake.
On Diali
On Diali the Slack channel is connected from the dashboard and the runtime config is generated and replaced at each release, so the transport and policy checks here are mostly ours to watch on the hosted side, while the app's scopes, manifest entries and workspace membership stay on yours. Slack on Diali is the channel on Diali and Diali security the boundary that applies to every connected channel.
- Channel keys are IDs; a name key matches nothing.
- Open DMs still need the wildcard in the allowlist.
- Native commands need true, not auto, and entries in the manifest.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
