Call stanza acknowledgement¶
Signalling - call-ack
SIG-07 - status: review - audio, video, group
Acknowledging an inbound <call> stanza: a generic <ack> for every <call>, plus an <offer>-only <receipt><offer/></receipt>.
A <call> carries exactly one action child: <offer>, <offer_notice>,
<preaccept>, <accept>, <reject>, <terminate>, <transport>, or
<relaylatency>.
Level 1 — generic ack. Every received <call> MUST be acknowledged with a
generic <ack> correlated by the stanza id attribute (distinct from the
action's call-id), for all action types including <offer_notice>.
Level 2 — offer receipt. When and only when the action child is <offer>,
the device MUST additionally send:
<receipt to="{caller}" id="{stanza_id}" from="{own_addressable_id}">
<offer call-id="{call-id}" call-creator="{call-creator}"/>
</receipt>
toMUST equal thefromJID of the inbound<call>.idMUST equal the stanzaidof the<call>, NOT the action'scall-id.fromSHOULD be the device's own addressable id, chosen to match the address space of the inboundfromJID: iffromis a LID use the own LID, else the own phone-number JID. If no own addressable id exists, omitfrom.- The
<offer>child MUST carry exactly two attributes copied verbatim from the inbound offer:call-idandcall-creator. It MUST NOT echo the offer's media or capability children.
An offer receipt MUST NOT be sent for any non-<offer> action; <offer_notice>
gets the Level-1 ack only.
An unrecognised action child MUST NOT fail the stanza and MUST NOT emit an offer receipt; it gets the Level-1 ack only.
Notes. The action's call-id is separate from the stanza id: the offer receipt
correlates on stanza id, while later signalling (accept, transport, terminate)
correlates on call-id + call-creator. Inbound envelope e == "1" marks
offline delivery.
Requires: call-offer
Breakdown: flow-call-rejected, flow-incoming-1to1, flow-outgoing-1to1
Implemented by
| Flavor | Status | Source | Notes |
|---|---|---|---|
whatsapp-rust |
working | history - blame - commits 674e851 |
— |
zapo-caller |
working | — | signalling layer consumes/produces the offer receipt |
Annotation wacrg:SIG-07 — a flavor marks its implementation site in source with this comment; a script clones the source, finds it, and attaches the commit blame/permalink.
Contributors
| Contributor | Role |
|---|---|
| wrote initial spec |
protocol history / diff - blame
Open questions
- Whether the server expects (or rejects) an offer receipt that omits the from attribute when an own addressable id exists.
- Whether any action other than <offer> (e.g. video offers carrying a <video> child) triggers an additional receipt beyond the generic ack.
References - RFC 6120 — XMPP Core (stanza acknowledgement model)
Changelog¶
- 2026-06-21 — Initial spec entry.