Skip to content

Commit e2a4973

Browse files
docs(slack): explain voice input and audio clips (#102410)
* docs(slack): document voice input support * docs: refresh generated map --------- Co-authored-by: Peter Steinberger <[email protected]>
1 parent ba5a212 commit e2a4973

3 files changed

Lines changed: 31 additions & 14 deletions

File tree

docs/channels/slack.md

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,17 @@ Notes:
12151215
- Slack expects shortcodes (for example `"hourglass_flowing_sand"`).
12161216
- The reaction is best-effort and cleanup is attempted automatically after the reply or failure path completes.
12171217

1218+
## Voice input
1219+
1220+
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.
1221+
1222+
- **[Slackbot voice dictation](https://slack.com/help/articles/202026038-How-to-use-Slackbot)** 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.
1223+
- **[Slack audio clips](https://slack.com/help/articles/4406235165587-Record-audio-and-video-clips-in-Slack)** 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](/nodes/audio). The recommended app manifest includes the required `files:read` scope.
1224+
1225+
Audio clips and Slackbot dictation have different privacy semantics: clips follow Slack file-retention policy and OpenClaw downloads them for transcription, while Slack says dictation audio is not stored.
1226+
1227+
In a channel with `requireMention: true`, include a typed mention of the bot with a captionless audio clip, or send the clip in a DM. Slack clip transcription currently happens after the channel mention gate.
1228+
12181229
## Media, chunking, and delivery
12191230

12201231
<AccordionGroup>
@@ -1570,19 +1581,20 @@ openclaw pairing list slack
15701581
</Accordion>
15711582
</AccordionGroup>
15721583

1573-
## Attachment vision reference
1584+
## Attachment media reference
15741585

1575-
Slack can attach downloaded media to the agent turn when Slack file downloads succeed and size limits permit. Image files can be passed through the media understanding path or directly to a vision-capable reply model; other files are retained as downloadable file context rather than treated as image input.
1586+
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.
15761587

15771588
### Supported media types
15781589

15791590
| Media type | Source | Current behavior | Notes |
15801591
| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
1592+
| Slack audio clips | Slack file URL | Downloaded and routed through shared audio transcription | Requires `files:read` and a working `tools.media.audio` model or CLI |
15811593
| JPEG / PNG / GIF / WebP images | Slack file URL | Downloaded and attached to the turn for vision-capable handling | Per-file cap: `channels.slack.mediaMaxMb` (default 20 MB) |
15821594
| PDF files | Slack file URL | Downloaded and exposed as file context for tools such as `download-file` or `pdf` | Slack inbound does not convert PDFs into image-vision input automatically |
15831595
| Other files | Slack file URL | Downloaded when possible and exposed as file context | Binary files are not treated as image input |
15841596
| Thread replies | Thread starter files | Root-message files can be hydrated as context when the reply has no direct media | File-only starters use an attachment placeholder |
1585-
| Multi-image messages | Multiple Slack files | Each file is evaluated independently | Slack processing is capped at eight files per message |
1597+
| Multi-file messages | Multiple Slack files | Each file is evaluated independently | Slack processing is capped at eight files per message |
15861598

15871599
### Inbound pipeline
15881600

@@ -1591,8 +1603,8 @@ When a Slack message with file attachments arrives:
15911603
1. OpenClaw downloads the file from Slack's private URL using the bot token.
15921604
2. The file is written to the media store on success.
15931605
3. Downloaded media paths and content types are added to the inbound context.
1594-
4. Image-capable model/tool paths can use image attachments from that context.
1595-
5. Non-image files remain available as file metadata or media references for tools that can handle them.
1606+
4. Audio clips are routed to the shared transcription pipeline; image-capable model/tool paths can use image attachments from the same context.
1607+
5. Other files remain available as file metadata or media references for tools that can handle them.
15961608

15971609
### Thread-root attachment inheritance
15981610

@@ -1615,22 +1627,26 @@ When a single Slack message contains multiple file attachments:
16151627
### Size, download, and model limits
16161628

16171629
- **Size cap**: Default 20 MB per file. Configurable via `channels.slack.mediaMaxMb`.
1630+
- **Audio transcription cap**: `tools.media.audio.maxBytes` also applies when the downloaded file is sent to a transcription provider or CLI.
16181631
- **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.
16191632
- **Vision model**: Image analysis uses the active reply model when it supports vision, or the image model configured at `agents.defaults.imageModel`.
16201633

16211634
### Known limits
16221635

1623-
| Scenario | Current behavior | Workaround |
1624-
| -------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
1625-
| Expired Slack file URL | File skipped; no error shown | Re-upload the file in Slack |
1626-
| Vision model not configured | Image attachments are stored as media references, but not analyzed as images | Configure `agents.defaults.imageModel` or use a vision-capable reply model |
1627-
| Very large images (> 20 MB by default) | Skipped per size cap | Increase `channels.slack.mediaMaxMb` if Slack allows |
1628-
| Forwarded/shared attachments | Text and Slack-hosted image/file media are best-effort | Re-share directly in the OpenClaw thread |
1629-
| PDF attachments | Stored as file/media context, not automatically routed through image vision | Use `download-file` for file metadata or the `pdf` tool for PDF analysis |
1636+
| Scenario | Current behavior | Workaround |
1637+
| ------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
1638+
| Expired Slack file URL | File skipped; no error shown | Re-upload the file in Slack |
1639+
| Audio transcription unavailable | Clip remains attached but no transcript is produced | Configure `tools.media.audio` or install a supported local transcription CLI |
1640+
| Captionless clip in a mention-gated channel | Dropped before clip transcription | Add a typed bot mention or send the clip in a DM |
1641+
| Vision model not configured | Image attachments are stored as media references, but not analyzed as images | Configure `agents.defaults.imageModel` or use a vision-capable reply model |
1642+
| Very large images (> 20 MB by default) | Skipped per size cap | Increase `channels.slack.mediaMaxMb` if Slack allows |
1643+
| Forwarded/shared attachments | Text and Slack-hosted image/file media are best-effort | Re-share directly in the OpenClaw thread |
1644+
| PDF attachments | Stored as file/media context, not automatically routed through image vision | Use `download-file` for file metadata or the `pdf` tool for PDF analysis |
16301645

16311646
### Related documentation
16321647

16331648
- [Media understanding pipeline](/nodes/media-understanding)
1649+
- [Audio and voice notes](/nodes/audio)
16341650
- [PDF tool](/tools/pdf)
16351651

16361652
## Related

docs/docs_map.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,7 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
854854
- H3: Scope (messages.ackReactionScope)
855855
- H2: Text streaming
856856
- H2: Typing reaction fallback
857+
- H2: Voice input
857858
- H2: Media, chunking, and delivery
858859
- H2: Commands and slash behavior
859860
- H2: Interactive replies
@@ -862,7 +863,7 @@ Do not edit it by hand; run `pnpm docs:map:gen`.
862863
- H2: Events and operational behavior
863864
- H2: Configuration reference
864865
- H2: Troubleshooting
865-
- H2: Attachment vision reference
866+
- H2: Attachment media reference
866867
- H3: Supported media types
867868
- H3: Inbound pipeline
868869
- H3: Thread-root attachment inheritance

docs/nodes/audio.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ Lowercase variables take precedence over uppercase; `NO_PROXY`/`no_proxy` entrie
174174

175175
## Mention detection in groups
176176

177-
When `requireMention: true` is set for a group chat, OpenClaw transcribes audio **before** checking for mentions. This lets voice notes pass the mention gate even when the message has no text body.
177+
On channels that support audio preflight, OpenClaw transcribes audio **before** checking for mentions when `requireMention: true` is set for a group chat. This lets a captionless voice note pass the mention gate when its transcript contains a configured mention pattern. Channel-specific docs describe transports that require a typed mention instead.
178178

179179
**How it works:**
180180

0 commit comments

Comments
 (0)