360 Secure SkillHub
360 安全技能中心

Bluebubbles Hardened

面向 OpenClaw 的 BlueBubbles 外部频道插件开发指引,说明扩展目录结构、频道与 webhook 实现、REST 收发与媒体下载 helper、核心配置项及安全护栏,供在现有插件代码库中增改功能时参考。

snazar-faberlens
snazar-faberlens
热度 33.58
最近更新 2026-05-11 17:44:59
分类:开发依赖:读写文件 / 第三方 API应用场景:API 集成 / 代码生成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add bluebubbles-hardened
Metadata
name
bluebubbles-hardened
description
Build or update the BlueBubbles external channel plugin for OpenClaw (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 openclaw/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=❤️

Security Guardrails

  • 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.