Skip to content

BlueBubbles webhook POST returns 405 Method Not Allowed on 2026.3.1 #31344

@BYWallace

Description

@BYWallace

Bug Description

BlueBubbles inbound webhook stopped working after upgrading from 2026.2.26 to 2026.3.1. The gateway returns HTTP 405 Method Not Allowed on all POST requests to the webhook endpoint (/bluebubbles-webhook). Rolling back to 2026.2.26 immediately fixes the issue.

Environment

  • OpenClaw version: 2026.3.1 (broken), 2026.2.26 (working)
  • OS: macOS Tahoe 26.3.0 (arm64, Mac mini)
  • Node: v25.6.0
  • BlueBubbles Server: v1.9.9, Private API enabled
  • Gateway mode: local loopback (127.0.0.1:18789)

Config (relevant)

{
  "channels": {
    "bluebubbles": {
      "enabled": true,
      "serverUrl": "http://localhost:1234",
      "password": "...",
      "webhookPath": "/bluebubbles-webhook"
    }
  }
}

Steps to Reproduce

  1. Upgrade to 2026.3.1 (npm install -g [email protected])
  2. Restart gateway (openclaw gateway restart)
  3. Gateway logs show: BlueBubbles webhook listening on /bluebubbles-webhook (looks normal)
  4. Send an iMessage to the paired number
  5. Message appears in BlueBubbles but is never relayed to OpenClaw
  6. Confirm with curl:
    curl -s -o /dev/null -w "%{http_code}" -X POST "http://localhost:18789/bluebubbles-webhook" \
      -H "Content-Type: application/json" -d '{"type":"new-message","data":{}}'
    # Returns: 405
  7. Same curl on 2026.2.26 returns 400 (invalid payload — POST is accepted, just test data is bad)

Observed Behavior

  • GET /bluebubbles-webhook200 (returns dashboard HTML — wrong, should not serve the dashboard on the webhook path)
  • POST /bluebubbles-webhook405 Method Not Allowed (broken)
  • Adding ?password=<pw>, Authorization: Bearer <token>, x-password headers — still 405
  • No errors or warnings in gateway logs — webhook POSTs are silently rejected
  • All agent runs during the broken window show messageChannel=webchat only, zero messageChannel=bluebubbles

Expected Behavior

  • POST /bluebubbles-webhook should accept the request and process the webhook payload (as it does on 2026.2.26)

Likely Cause

The 2026.3.1 changelog includes:

Gateway/Container probes: add built-in HTTP liveness/readiness endpoints (/health, /healthz, /ready, /readyz) for Docker/Kubernetes health checks, with fallback routing so existing handlers on those paths are not shadowed. (#31272)

The new HTTP route handling appears to shadow or override the BlueBubbles webhook POST handler. The GET on the same path returns the dashboard (200), suggesting a catch-all GET route is registered that takes precedence over the webhook POST handler.

Workaround

Roll back to 2026.2.26:

npm install -g [email protected]
openclaw gateway restart

Log Evidence

Gateway startup on 2026.3.1 (looks normal but POST broken):

[INFO] gateway/channels/bluebubbles [default] starting provider (webhook=/bluebubbles-webhook)
[INFO] gateway/channels/bluebubbles [default] BlueBubbles server macOS 26.3.0
[INFO] gateway/channels/bluebubbles [default] BlueBubbles Private API enabled
[INFO] gateway/channels/bluebubbles [default] BlueBubbles webhook listening on /bluebubbles-webhook
[INFO] gateway/health-monitor started (interval: 300s, grace: 60s)  ← NEW in 2026.3.1

After rollback to 2026.2.26, first real BB message comes through immediately:

[DEBUG] embedded run start: ... messageChannel=bluebubbles  ← working
[WARN]  [bluebubbles] webhook rejected: unable to parse message payload  ← curl test: POST accepted (400, not 405)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions