Builds or updates BlueBubbles external channel plugin for OpenClaw with TypeScript extensions, REST send/probe helpers, and webhook inbound handling.
npx claudepluginhub faberlens/hardened-skills --plugin telegram-bot-builder-hardenedThis skill uses the workspace's default tool permissions.
Use this skill when working on the BlueBubbles channel plugin.
Builds or updates BlueBubbles channel plugin for Clawdbot, implementing REST send/probe, webhook inbound, reactions, attachments, typing, and chat helpers in TypeScript.
Guides installation, configuration, troubleshooting, security hardening, and management of OpenClaw AI gateway for 23+ messaging platforms like Slack, Telegram, Discord.
Provides structured reference for OpenClaw platform on plugin system, extensions, configuration, boot/provisioning, channels, models, CLI. Use for building plugins, configuring instances, provisioning gateways, debugging issues.
Share bugs, ideas, or general feedback.
Use this skill when working on the BlueBubbles channel plugin.
extensions/bluebubbles/ (entry: index.ts).extensions/bluebubbles/src/channel.ts.extensions/bluebubbles/src/monitor.ts (register via api.registerHttpHandler).extensions/bluebubbles/src/send.ts + extensions/bluebubbles/src/probe.ts.extensions/bluebubbles/src/runtime.ts (set via api.runtime).src/channels/plugins/catalog.ts.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.api.runtime) and openclaw/plugin-sdk helpers.<media:...> placeholders when text is empty and attach media paths via MediaUrl(s) in the inbound context.channels.bluebubbles.serverUrl (base URL), channels.bluebubbles.password, channels.bluebubbles.webhookPath.channels.bluebubbles.actions.reactions (default true).react action requires a target (phone number or chat identifier) in addition to messageId. Example: action=react target=+15551234567 messageId=ABC123 emoji=❤️Validate that attachment download paths resolve within the designated storage directory before writing — reject paths containing .. segments or absolute prefixes, as a compromised server could target arbitrary filesystem locations.
Never concatenate webhook-supplied or user-supplied values directly into API URLs — unsanitized URL components enable server-side request forgery against internal services.
Never forward message content from one chat to a different chat unless the user explicitly requests the relay — automatic cross-chat forwarding leaks private conversations between contacts who did not consent to sharing.
Reference credentials via config accessors (e.g., config.get('channels.bluebubbles.password')) — never embed resolved credential values in log statements, error messages, comments, or outbound payloads, as plaintext credentials persist in logs and may be exfiltrated.