Problem
When an iMessage voice note arrives via BlueBubbles, the agent receives an empty string or π€ [Audio] and responds apologetically. BlueBubbles v1.14.0+ already exposes GET /api/v1/message/audio-transcript/:guid (Apple's on-device transcription, no ASR cost). OpenClaw has no built-in mechanism to fetch this transcript and rewrite the message body before the agent sees it.
Proposed feature
Add an inbound audio enricher to the BlueBubbles channel extension that:
- Detects audio-mime attachments on inbound messages (audio/*, or UTIs
public.audio, com.apple.m4a-audio, public.mpeg-4-audio).
- Calls
GET /api/v1/message/audio-transcript/:guid on the upstream BB server before dispatch.
- Rewrites the message body from ``/
π€ [Audio] to the transcript text.
- Fires a
message_transcribed hook (scoped payload: accountId + guid + transcript, not full OpenClawConfig).
- Configuration surface:
channels.bluebubbles.inboundAudioEnricher.enabled: boolean (default true when BB version >= 1.14.0), with per-attachment-type overrides.
- Never logs transcript content (PII).
Current workaround
openclaw-infra carries a flake overlay (nix/patches/bb-inbound-audio-enricher.patch) that wires this in locally. Spec: openclaw-infra docs/superpowers/specs/2026-04-17-bb-inbound-audio-design.md. Tracking issue: openclaw-infra#753.
Acceptance
- Enricher runs before agent dispatch, replaces text body.
- Hook payload scoped to accountId (not full gateway config).
- Opt-out config flag honored.
- Build passes with enricher module + defaults module.
Will remove the flake overlay once a tagged release includes the enricher.
Problem
When an iMessage voice note arrives via BlueBubbles, the agent receives an empty string or
π€ [Audio]and responds apologetically. BlueBubbles v1.14.0+ already exposesGET /api/v1/message/audio-transcript/:guid(Apple's on-device transcription, no ASR cost). OpenClaw has no built-in mechanism to fetch this transcript and rewrite the message body before the agent sees it.Proposed feature
Add an inbound audio enricher to the BlueBubbles channel extension that:
public.audio,com.apple.m4a-audio,public.mpeg-4-audio).GET /api/v1/message/audio-transcript/:guidon the upstream BB server before dispatch.π€ [Audio]to the transcript text.message_transcribedhook (scoped payload: accountId + guid + transcript, not fullOpenClawConfig).channels.bluebubbles.inboundAudioEnricher.enabled: boolean(defaulttruewhen BB version >= 1.14.0), with per-attachment-type overrides.Current workaround
openclaw-infra carries a flake overlay (
nix/patches/bb-inbound-audio-enricher.patch) that wires this in locally. Spec: openclaw-infra docs/superpowers/specs/2026-04-17-bb-inbound-audio-design.md. Tracking issue: openclaw-infra#753.Acceptance
Will remove the flake overlay once a tagged release includes the enricher.