OpenClaw Slack media and attachments
Audio clips versus Slackbot dictation, spoken mentions through speculative transcription, inbound downloads and the 20 MB cap, chunking and upload rules, delivery targets, the eight-file limit, thread-root inheritance, and the known limits
Files are where a Slack integration usually gets vague, so the OpenClaw docs are unusually specific: what an audio clip is versus dictation, when a file is downloaded, how big it may be, what happens to the eighth and ninth attachment, and what a thread reply inherits from its root. Here is the inbound path, the outbound rules, and the limits with their workarounds.
Voice input
- To speak to OpenClaw in Slack you send a Slack audio clip to the app; Slackbot's dictation microphone lives in the user's private Slackbot conversation and turns the recording into a Slackbot prompt without emitting an audio file, event, prompt or input-source marker to third-party apps, so the plugin cannot enable or receive it.
- Audio clips are stored Slack files that can be posted in a DM, channel or thread; OpenClaw downloads an accessible clip with the bot token, normalises Slack's clip MIME metadata and sends it through the shared audio transcription pipeline, and the recommended manifest includes the files read scope this needs.
- Clips and dictation differ in privacy: clips follow Slack file retention and OpenClaw downloads them for transcription, while Slack says dictation audio is not stored.
- In a channel that requires a mention, a captionless clip can satisfy the gate by speaking a configured mention pattern: OpenClaw authorises the sender before downloading or transcribing, admits the clip only when the transcript matches, discards a failed or non-matching speculative transcript together with the download rather than keeping it in channel history, cannot infer a native bot mention from speech, so a spoken-name pattern or a typed mention is needed, and echoes the transcript only after admission.
Slackbot's dictation microphone is a separate Slack-owned feature, not an app API.
Inbound, outbound, targets
Slack file attachments are downloaded from Slack-hosted private URLs through a token-authenticated request flow and written to the media store when the fetch succeeds and the size limits permit; file placeholders include the Slack file ID so an agent can fetch the original with the download-file action, downloads use bounded idle and total timeouts, and if retrieval stalls or fails the message keeps going with the placeholder. The inbound cap defaults to 20 MB unless the media max key overrides it. Outbound text chunks follow the text chunk limit, 8000 by default and capped at Slack's own message length, with a newline chunk mode for paragraph-first splitting; file sends use Slack's upload APIs and can be thread replies, a long caption uses the first Slack-safe chunk as the upload comment and sends the rest as follow-up messages, text and context blocks preserve code formatting and literal backslashes across section boundaries, the outbound media cap follows the same key when configured and otherwise the media pipeline's per-kind defaults, native Block Kit sections keep all their fields even when their accessibility text exceeds the preferred chunk size, and Slack's block limits and the 40,000-character hard limit still apply. Preferred explicit targets are a user prefix for DMs and a channel prefix for channels; text and block-only DMs can post straight to a user ID, while file uploads and threaded sends open the DM through the conversation APIs first because those paths need a concrete conversation ID.
Types, threads, limits
- Audio clips are downloaded and transcribed given the files read scope and a working audio model or CLI, JPEG, PNG, GIF and WebP images are attached to the turn for vision-capable handling under the per-file cap, PDFs are exposed as file context for the download-file or pdf tools rather than converted to image input, other files are downloaded when possible as file context and never treated as images, thread replies can hydrate root-message files when the reply has no media of its own, and each file in a multi-file message is evaluated independently with processing capped at eight files.
- The pipeline downloads with the bot token, writes to the media store, adds paths and content types to the inbound context, routes clips to transcription and images to image-capable paths, and leaves other files as metadata; root files are hydrated only while seeding a new or reset thread session, later text-only replies reuse the session context without reattaching them, direct attachments win over root attachments, and a root with files and no text gets an attachment placeholder so the fallback still includes them.
- In a multi-file message each attachment goes through the pipeline independently in Slack's order, one failure does not block the others, failed or blocked files stay in context with a bounded reason and one warning after any URL refresh retry, files beyond the eighth are not downloaded and carry an omitted reason while long unavailable lists are truncated with the total count kept; the transcription provider's own byte limit also applies, files Slack cannot serve, expired URLs, oversize files and auth HTML responses are skipped rather than reported as unsupported, and image analysis uses the reply model when it supports vision or the configured image model, with the known-limits table listing a re-upload for expired URLs, a transcription model for silent clips, a spoken pattern or a DM for gated clips, and a larger cap for very large images.
OpenClaw on Slack is the channel post these attachments belong to, and OpenClaw Slack setup the manifest whose file scopes make downloads possible.
Speaking to a gated channel
The speculative-transcription rule is the interesting one: a clip in a mention-gated channel is transcribed privately, admitted only if it names the bot, and otherwise thrown away with the download, so a channel full of voice notes does not become a transcript store. OpenClaw PDF tool covers what happens to the PDFs that arrive as file context, and OpenClaw iMessage media the media rules on a channel with a very different transport.
On Diali
Slack is one of the channels Diali connects from the dashboard, with the runtime config generated and replaced at each release, so the caps and chunk rules here describe what a hosted agent does with your files rather than settings you maintain. Slack on Diali is the channel on Diali and Hosted OpenClaw on Diali the assistant behind it.
- Clips reach the app; dictation never does.
- 20 MB per file, eight files per message, 8000 characters per chunk.
- A gated clip must say the bot's name or it is discarded.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
