Document webhook payloads and event keys - #32
Conversation
qayshp
left a comment
There was a problem hiding this comment.
Self-review completed. I found one maintainability concern to address before this draft is ready.
Validation update
This was a source-and-format validation pass. No live message or typing action was performed, and no payload values or user data were captured. A live |
Remote validation follow-up (SIP-custom Sequoia Intel host)The remote host was ready for a live Private API check: the server reported Private API enabled, the helper connected, and an iMessage account available. A positive The static source-chain validation still passes: the event key exists, start/stop typing maps to No typing action or message was sent for this test. A true end-to-end positive test will require explicit authorization to use a 1:1 conversation and a temporary loopback webhook receiver. |
Authorized 1:1 partial end-to-end validationRan an additional test on the SIP-custom Sequoia host using an existing authorized 1:1 iMessage conversation. No draft text was entered and no message was sent. Instead, the server requested the current typing state from the connected Private API helper and dispatched the result to a temporary loopback-only webhook receiver. Passed:
This validates the Private API helper → server event handler → HTTP webhook envelope for the stopped/not-typing state. It does not validate a genuine |
Final route-aware live typing validationRetested with an authorized independent iMessage participant in the 1:1 conversation visibly open on the SIP-custom Sequoia server Mac. The participant typed and held an unsent draft character, and the typing indicator was visibly present in that same server-Mac conversation. The initial harness had selected the unique phone-number-based chat GUID for that contact. A route-aware rerun showed that Messages actually emitted the typing events through a different, email-based iMessage handle associated with the displayed conversation. Sanitized helper metadata showed exactly one typing GUID during the test window; it was an iMessage 1:1, not a group. No address or GUID was printed. The route-aware loopback receiver captured both states on that single route:
Result: the live helper → server → HTTP webhook path passes for both positive and negative typing states. The earlier helper-failure diagnosis is retracted; the failure was in the test harness filtering only the contact’s phone-based GUID while Messages used its email-based route. The test harness sent no message or attachment. The temporary webhook and all temporary artifacts were removed, and the installed server remained healthy. |
|
Merge-readiness audit: the 26 documented event keys still match current server |
Summary
{ type, data }envelopeWhy
The existing page explains that BlueBubbles can send webhooks but does not show the request body a receiver must decode. It also lists only a subset of the events exposed by the server.
Fixes BlueBubblesApp/bluebubbles-server#797.
Compatibility
The examples intentionally describe representative fields instead of promising one exhaustive
dataschema. Event data varies by event, server and macOS version, message type, and notification-size limits.Validation
git diff --check origin/master...HEADpasseswebhookEventOptionson current servermasteranddevelopment, in the same orderWebhookServiceand the inspected emittersdisplay: trueanddisplay: falsetyping events through the helper → server → HTTP webhook pathThe live test sent no message or attachment, printed no personal identifier, and removed its temporary webhook and artifacts afterward.