openclaw - ✅(Solved) Fix [Bug]: BlueBubbles delivery silently fails without Private API — no config option to set send method [2 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#64480Fetched 2026-04-11 06:14:41
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Participants
Timeline (top)
cross-referenced ×2labeled ×2commented ×1referenced ×1

OpenClaw's BlueBubbles plugin does not include "method": "apple-script" when sending messages via the BlueBubbles REST API, causing silent delivery failure on macOS setups without Private API enabled. Then in the main body below, paste the content from the file I created. You can open it on the Mac from the download or copy it from here. The key sections to include are the environment info, steps to reproduce, the root cause explanation (direct curl with method works, OpenClaw without method fails), and the proposed sendMethod config option.​​​​​​​​​​​​​​​​

Root Cause

OpenClaw's BlueBubbles plugin does not include "method": "apple-script" when sending messages via the BlueBubbles REST API, causing silent delivery failure on macOS setups without Private API enabled. Then in the main body below, paste the content from the file I created. You can open it on the Mac from the download or copy it from here. The key sections to include are the environment info, steps to reproduce, the root cause explanation (direct curl with method works, OpenClaw without method fails), and the proposed sendMethod config option.​​​​​​​​​​​​​​​​

Fix Action

Fixed

PR fix notes

PR #64531: fix(bluebubbles): add configurable outbound send method

Description (problem / solution / changelog)

Summary

  • Problem: BlueBubbles config did not expose the upstream method send option, so users could not force apple-script or private-api for outbound sends when their server/setup required it.
  • Why it matters: issue #64480 reports real deployments where OpenClaw needs an explicit AppleScript send path instead of only the current automatic behavior.
  • What changed: added sendMethod to the BlueBubbles config contract, normalized it in account resolution, applied it to text/new-chat/attachment sends, and documented the option.
  • What did NOT change (scope boundary): default behavior is unchanged when sendMethod is unset, and Private API still takes precedence when reply/effect/private-only delivery paths require it.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #64480
  • Related #
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: the BlueBubbles config/schema surface did not expose the upstream send method, even though BlueBubbles Server supports apple-script and private-api for outbound delivery.
  • Missing detection / guardrail: there was no regression coverage for honoring a configured send method on text and attachment sends.
  • Contributing context (if known): previous BlueBubbles fixes focused on forcing private-api when available, but not on exposing a user-configurable override for environments where Private API is unavailable or undesired.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: extensions/bluebubbles/src/send.test.ts, extensions/bluebubbles/src/attachments.test.ts
  • Scenario the test should lock in: configured sendMethod: "apple-script" is forwarded for normal text sends, new-chat creation sends, and attachment sends, while private-api-only reply behavior still prefers private-api.
  • Why this is the smallest reliable guardrail: the regression is isolated to BlueBubbles payload construction and account resolution, so extension-local send tests catch it directly.
  • Existing test that already covers this (if any): N/A
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

  • New optional config: channels.bluebubbles.sendMethod with supported values apple-script and private-api.
  • The same override also works on BlueBubbles accounts through the account config surface.
  • Leaving the field unset preserves current behavior.

Diagram (if applicable)

Before:
[user config] -> [BlueBubbles send] -> [OpenClaw default method selection only]

After:
[user config sendMethod] -> [BlueBubbles send/account resolution] -> [configured method unless private-api-only path requires private-api]

Security Impact (required)

  • New permissions/capabilities? (No)
  • Secrets/tokens handling changed? (No)
  • New/changed network calls? (No)
  • Command/tool execution surface changed? (No)
  • Data access scope changed? (No)
  • If any Yes, explain risk + mitigation:

Repro + Verification

Environment

  • OS: Linux local dev host
  • Runtime/container: Node 22 + pnpm
  • Model/provider: N/A
  • Integration/channel (if any): BlueBubbles
  • Relevant config (redacted): BlueBubbles server URL/password with optional channels.bluebubbles.sendMethod

Steps

  1. Configure BlueBubbles with sendMethod: "apple-script".
  2. Send a normal text message, an attachment, or create a new chat through the BlueBubbles extension.
  3. Inspect the outbound BlueBubbles request payload.

Expected

  • The outbound payload includes the configured method unless the send path requires private-api for reply/effect/private-only behavior.

Actual

  • Before this change, there was no config surface to express the send method override.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

  • Verified scenarios:
    • pnpm test:extension bluebubbles
    • pnpm test extensions/bluebubbles/src/send.test.ts extensions/bluebubbles/src/attachments.test.ts
    • pnpm config:channels:gen
    • pnpm config:channels:check
    • pnpm config:docs:gen
    • pnpm config:docs:check
  • Edge cases checked:
    • explicit apple-script for plain sends
    • explicit apple-script for chat creation path
    • attachment sends honor configured method
    • private-api reply threading still prefers private-api
  • What you did not verify:
    • live end-to-end delivery against a real BlueBubbles server
    • full repo-wide pnpm check is currently blocked by pre-existing await-thenable lint failures in untouched files already present on origin/main

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? (Yes)
  • Config/env changes? (Yes)
  • Migration needed? (No)
  • If yes, exact upgrade steps:
    • Optional only: set channels.bluebubbles.sendMethod (or the per-account equivalent) if you need to override OpenClaw's default BlueBubbles send method.

Risks and Mitigations

  • Risk: a user can configure private-api on a server where Private API is unavailable.
    • Mitigation: the option is explicit/optional, default behavior stays unchanged, and existing BlueBubbles server behavior remains the enforcement point.
  • Risk: reviewers may interpret the repo-wide pnpm check red state as caused by this diff.
    • Mitigation: extension-local tests and config/doc generation checks are included above, and the failing lint lines are unchanged from current origin/main.

AI-assisted: Yes (Codex) Testing level: Targeted extension lane + config/doc generation checks

Changed files

  • docs/.generated/config-baseline.sha256 (modified, +2/-2)
  • docs/channels/bluebubbles.md (modified, +1/-0)
  • extensions/bluebubbles/src/account-resolve.ts (modified, +6/-0)
  • extensions/bluebubbles/src/attachments.test.ts (modified, +71/-0)
  • extensions/bluebubbles/src/attachments.ts (modified, +8/-4)
  • extensions/bluebubbles/src/config-schema.ts (modified, +3/-0)
  • extensions/bluebubbles/src/config-ui-hints.ts (modified, +4/-0)
  • extensions/bluebubbles/src/send.test.ts (modified, +71/-0)
  • extensions/bluebubbles/src/send.ts (modified, +18/-8)
  • extensions/bluebubbles/src/types.ts (modified, +60/-27)
  • src/config/bundled-channel-config-metadata.generated.ts (modified, +12/-0)
  • src/config/zod-schema.providers-core.ts (modified, +1/-0)

PR #64550: fix(bluebubbles): set apple-script send method when Private API is unavailable

Description (problem / solution / changelog)

Summary

Fixes #64480 — BlueBubbles messages silently fail to deliver when Private API is not enabled.

Root Cause

The sendMessageBlueBubbles() function only sets payload.method when Private API is available:

if (privateApiDecision.canUsePrivateApi) {
    payload.method = "private-api";
}
// Otherwise: no method field at all

The BlueBubbles server API requires an explicit send method. Without it, the message enters Messages.app on the Mac but is never actually sent to the recipient — BlueBubbles reports "delivered" but the message shows "Not Delivered" on the device.

Fix

Add method: "apple-script" as the fallback when Private API is not available. This is the standard send mechanism for macOS setups with SIP enabled.

Verification

The reporter confirmed that curl with "method": "apple-script" delivers successfully every time.

Changed files

  • extensions/bluebubbles/src/send.test.ts (modified, +3/-3)
  • extensions/bluebubbles/src/send.ts (modified, +5/-0)
  • extensions/browser/src/browser/chrome.ts (modified, +6/-0)
  • src/auto-reply/reply/reply-media-paths.ts (modified, +13/-0)
RAW_BUFFERClick to expand / collapse

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

OpenClaw's BlueBubbles plugin does not include "method": "apple-script" when sending messages via the BlueBubbles REST API, causing silent delivery failure on macOS setups without Private API enabled. Then in the main body below, paste the content from the file I created. You can open it on the Mac from the download or copy it from here. The key sections to include are the environment info, steps to reproduce, the root cause explanation (direct curl with method works, OpenClaw without method fails), and the proposed sendMethod config option.​​​​​​​​​​​​​​​​

Steps to reproduce

  1. Set up OpenClaw with BlueBubbles on macOS 12 (Monterey) without Private API (SIP enabled)
  2. Create a cron job with --announce --channel bluebubbles --to "+1XXXXXXXX3"
  3. Cron runs, agent generates output, openclaw cron runs shows "delivered": true
  4. Message appears in Messages.app on Mac but shows "Not Delivered" — never reaches iPhone
  5. Direct curl to BlueBubbles API with "method": "apple-script" delivers successfully every time

Expected behavior

Messages sent through OpenClaw's BlueBubbles delivery should reach the recipient's phone, or OpenClaw should provide a config option to specify the BlueBubbles send method.

Actual behavior

OpenClaw reports "delivered": true but messages silently fail. Direct curl with "method": "apple-script" works every time, proving the issue is the missing method field in OpenClaw's request to BlueBubbles.

OpenClaw version

2026.4.9

Operating system

macOS 12.7.6 (Monterey, intel)

Install method

npm global

Model

anthropic/claude-sonnet-4-6

Provider / routing chain

openclaw --> anthropic

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

Add the "method": "apple-script" field to the BlueBubbles API request in OpenClaw to fix silent delivery failures on macOS setups without Private API enabled.

Guidance

  • Verify that the issue is resolved by checking if messages sent through OpenClaw's BlueBubbles delivery reach the recipient's phone after adding the "method": "apple-script" field.
  • Consider adding a config option to specify the BlueBubbles send method in OpenClaw to provide flexibility for different setups.
  • Test the proposed sendMethod config option to ensure it resolves the issue and provides a reliable workaround.
  • Check the OpenClaw version and update to the latest version if available, as the issue might be fixed in a newer release.

Example

No code snippet is provided as the issue does not contain sufficient information to generate a specific code example.

Notes

The solution assumes that adding the "method": "apple-script" field to the BlueBubbles API request will resolve the issue, based on the successful direct curl test. However, this might not apply to all setups or versions of OpenClaw.

Recommendation

Apply the workaround by adding the "method": "apple-script" field to the BlueBubbles API request, as this has been proven to work in the direct curl test and provides a reliable solution to the issue.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Messages sent through OpenClaw's BlueBubbles delivery should reach the recipient's phone, or OpenClaw should provide a config option to specify the BlueBubbles send method.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING