Voice input
To speak to OpenClaw in Slack today, send a Slack audio clip to the OpenClaw app. Slackbot’s dictation microphone is a separate Slack-owned feature, not an app API.- Slackbot voice dictation lives inside the user’s private Slackbot conversation. Slack turns the recording into a Slackbot prompt but does not emit an audio file, dictation event, prompt, or input-source marker to third-party Slack apps through the Events API. The OpenClaw Slack plugin cannot enable or receive it.
- Slack audio clips are stored Slack files that can be posted in an OpenClaw DM, channel, or thread. OpenClaw downloads an accessible clip with the bot token, normalizes Slack’s clip MIME metadata, and sends it through the shared audio transcription pipeline. The recommended app manifest includes the required
files:readscope.
requireMention: true, a captionless audio clip can satisfy the gate by speaking a configured mention pattern (agents.entries.*.groupChat.mentionPatterns, falling back to messages.groupChat.mentionPatterns). OpenClaw authorizes the sender before downloading or transcribing the clip, then admits it only when the transcript matches. A failed or nonmatching speculative transcript is discarded with the downloaded clip; it is not retained in channel history. Native Slack @bot identity cannot be inferred from speech, so configure a spoken-name pattern or include a typed mention. If transcript echoing is enabled, the echo is sent only after admission.
Media, chunking, and delivery
Inbound attachments
Inbound attachments
Slack file attachments are downloaded from Slack-hosted private URLs (token-authenticated request flow) and written to the media store when fetch succeeds and size limits permit. File placeholders include the Slack
fileId so agents can fetch the original file with download-file.Downloads use bounded idle and total timeouts. If Slack file retrieval stalls or fails, OpenClaw keeps processing the message and falls back to the file placeholder.Runtime inbound size cap defaults to 20MB unless overridden by channels.slack.mediaMaxMb.Outbound text and files
Outbound text and files
- text chunks use
channels.slack.textChunkLimit(default8000, capped at Slack’s own message-length limit) channels.slack.streaming.chunkMode="newline"enables paragraph-first splitting- file sends use Slack upload APIs and can include thread replies (
thread_ts) - long file captions use the first Slack-safe text chunk as the upload comment and send remaining chunks as follow-up messages
- outbound media cap follows
channels.slack.mediaMaxMbwhen configured; otherwise channel sends use MIME-kind defaults from media pipeline
Delivery targets
Delivery targets
Preferred explicit targets:
user:<id>for DMschannel:<id>for channels
Attachment media reference
Slack can attach downloaded media to the agent turn when Slack file downloads succeed and size limits permit. Audio clips can be transcribed, image files can pass through the media-understanding path or directly to a vision-capable reply model, and other files remain available as downloadable file context.Supported media types
Inbound pipeline
When a Slack message with file attachments arrives:- OpenClaw downloads the file from Slack’s private URL using the bot token.
- The file is written to the media store on success.
- Downloaded media paths and content types are added to the inbound context.
- Audio clips are routed to the shared transcription pipeline; image-capable model/tool paths can use image attachments from the same context.
- Other files remain available as file metadata or media references for tools that can handle them.
Thread-root attachment inheritance
When a message arrives in a thread (has athread_ts parent):
- If the reply itself has no direct media and the included root message has files, Slack can hydrate the root files as thread-starter context.
- Root files are hydrated only while seeding a new or reset thread session. Later text-only replies reuse the existing session context and do not reattach root files as fresh media.
- Direct reply attachments take precedence over root-message attachments.
- A root message that has only files and no text is represented with an attachment placeholder so the fallback can still include its files.
Multi-attachment handling
When a single Slack message contains multiple file attachments:- Each attachment is processed independently through the media pipeline.
- Downloaded media references are aggregated into the message context.
- Processing order follows Slack’s file order in the event payload.
- A failure in one attachment’s download does not block others.
- Failed or blocked files remain in the agent context with a bounded reason, and each failed file produces one warning after any URL refresh retry.
- Files beyond the eight-file limit are not downloaded. Their references carry an
omitted: 8-file limitreason. Long unavailable-file lists are visibly truncated, while the notice retains the total unavailable attachment count.
Size, download, and model limits
- Size cap: Default 20 MB per file. Configurable via
channels.slack.mediaMaxMb. - Audio transcription cap: the selected audio-capable
tools.media.models[]entry’smaxBytesalso applies when the downloaded file is sent to a transcription provider or CLI. - Download failures: Files that Slack cannot serve, expired URLs, inaccessible files, oversize files, and Slack auth/login HTML responses are skipped instead of being reported as unsupported formats.
- Vision model: Image analysis uses the active reply model when it supports vision, or the image model configured at
agents.defaults.imageModel.