home / skills / openclaw / skills / bluebubbles
This skill helps you build and update the BlueBubbles channel plugin for Clawdbot, handling REST, webhooks, and runtime integration.
npx playbooks add skill openclaw/skills --skill bluebubblesReview the files below or copy the command above to add this skill to your agents.
---
name: bluebubbles
description: Build or update the BlueBubbles external channel plugin for Clawdbot (extension package, REST send/probe, webhook inbound).
---
# BlueBubbles plugin
Use this skill when working on the BlueBubbles channel plugin.
## Layout
- Extension package: `extensions/bluebubbles/` (entry: `index.ts`).
- Channel implementation: `extensions/bluebubbles/src/channel.ts`.
- Webhook handling: `extensions/bluebubbles/src/monitor.ts` (register via `api.registerHttpHandler`).
- REST helpers: `extensions/bluebubbles/src/send.ts` + `extensions/bluebubbles/src/probe.ts`.
- Runtime bridge: `extensions/bluebubbles/src/runtime.ts` (set via `api.runtime`).
- Catalog entry for onboarding: `src/channels/plugins/catalog.ts`.
## Internal helpers (use these, not raw API calls)
- `probeBlueBubbles` in `extensions/bluebubbles/src/probe.ts` for health checks.
- `sendMessageBlueBubbles` in `extensions/bluebubbles/src/send.ts` for text delivery.
- `resolveChatGuidForTarget` in `extensions/bluebubbles/src/send.ts` for chat lookup.
- `sendBlueBubblesReaction` in `extensions/bluebubbles/src/reactions.ts` for tapbacks.
- `sendBlueBubblesTyping` + `markBlueBubblesChatRead` in `extensions/bluebubbles/src/chat.ts`.
- `downloadBlueBubblesAttachment` in `extensions/bluebubbles/src/attachments.ts` for inbound media.
- `buildBlueBubblesApiUrl` + `blueBubblesFetchWithTimeout` in `extensions/bluebubbles/src/types.ts` for shared REST plumbing.
## Webhooks
- BlueBubbles posts JSON to the gateway HTTP server.
- Normalize sender/chat IDs defensively (payloads vary by version).
- Skip messages marked as from self.
- Route into core reply pipeline via the plugin runtime (`api.runtime`) and `clawdbot/plugin-sdk` helpers.
- For attachments/stickers, use `<media:...>` placeholders when text is empty and attach media paths via `MediaUrl(s)` in the inbound context.
## Config (core)
- `channels.bluebubbles.serverUrl` (base URL), `channels.bluebubbles.password`, `channels.bluebubbles.webhookPath`.
- Action gating: `channels.bluebubbles.actions.reactions` (default true).
## Message tool notes
- **Reactions:** The `react` action requires a `target` (phone number or chat identifier) in addition to `messageId`. Example: `action=react target=+15551234567 messageId=ABC123 emoji=❤️`
This skill helps you build or update the BlueBubbles external channel plugin for Clawdbot. It packages the extension, implements REST send/probe endpoints, and handles inbound webhooks so BlueBubbles can route messages, attachments, typing, and reactions into Clawdbot.
The skill wires an extension under extensions/bluebubbles with channel, send, probe, reactions, attachments, runtime bridge, and webhook monitor modules. It uses internal helpers for health checks, message delivery, reaction and typing actions, and shared REST plumbing to talk to the BlueBubbles server and normalize webhook payloads into the core plugin runtime.
How should I handle attachments sent via webhook?
When the webhook delivers attachments, download them with downloadBlueBubblesAttachment, insert a <media:...> placeholder if text is empty, and add MediaUrl(s) to the inbound context so the core pipeline can process files.
What config keys control BlueBubbles behavior?
Core settings include channels.bluebubbles.serverUrl, channels.bluebubbles.password, and channels.bluebubbles.webhookPath. Action gating like reactions is controlled by channels.bluebubbles.actions.reactions.
How do I send a reaction to a message?
Use the react action with both a target (phone or chat ID) and messageId, for example: action=react target=+15551234567 messageId=ABC123 emoji=❤️, which maps to sendBlueBubblesReaction.