Call Acknowledgement / Receipt¶
Tag: <ack>
Category: signaling
Status: draft
Spec version: 0.1.0
Direction: outgoing, incoming
Summary¶
A server-generated acknowledgement confirming receipt of a call stanza. Like the rest of WhatsApp multi-device, call signaling is reliable: after a device sends a
Attributes¶
| Name | Type | Required | Confidence | Description | Provenance |
|---|---|---|---|---|---|
id |
string |
yes | probable | Echoes the id of the |
techniques: websocket-capture; sources: none |
class |
string |
yes | probable | Stanza class being acknowledged; for call signaling this is "call". Reuses the same class attribute seen on message/receipt acks elsewhere in the protocol. observed: call |
techniques: websocket-capture; sources: none |
from |
jid |
no | probable | Originating address of the ack. For server acks this is typically the server JID (s.whatsapp.net); for peer-to-peer acks it is the acking device. observed: s.whatsapp.net |
techniques: websocket-capture; sources: none |
to |
jid |
no | speculative | Destination of the ack (the device that sent the acknowledged stanza). | techniques: websocket-capture; sources: none |
type |
string |
no | speculative | Sub-type of the ack, when present. Some call stanzas may be acknowledged with a type qualifier (mirroring how message receipts carry types). Vocabulary unconfirmed. | techniques: websocket-capture; sources: none |
t |
timestamp |
no | speculative | Server timestamp at which the ack was generated (epoch seconds). | techniques: websocket-capture; sources: none |
Children¶
<error>¶
occurrence: 0..1 - confidence: speculative
Optional error detail when the acknowledged stanza could not be routed/accepted (e.g. callee offline, stanza malformed). Mirrors the
Attributes
| Name | Type | Required | Confidence | Description | Provenance |
|---|---|---|---|---|---|
code |
int |
no | speculative | Numeric error code (HTTP-like) describing the failure. observed: 404, 503 |
techniques: websocket-capture; sources: none |
text |
string |
no | speculative | Human-readable error text. | techniques: websocket-capture; sources: none |
Examples¶
Illustrative server ack for a call offer (synthetic)¶
Synthetic and sanitized, not a real capture.
Illustrative ack carrying a routing error (synthetic)¶
Synthetic and sanitized, not a real capture; error framing on call acks is unconfirmed.
<ack id="OF-0002" class="call" from="s.whatsapp.net">
<error code="503" text="service unavailable"/>
</ack>
Notes¶
The ack is the reliability backbone of call signaling: absence of an ack within a timeout is what drives client-side retransmission of offers and other control stanzas. Note this stanza's tag is
Open questions¶
- Do peer devices ack received call stanzas, or only the server?
- Which call stanzas (beyond the offer) elicit an explicit ack versus being best-effort?
- Does the
child appear on call acks, and what is its code vocabulary? - Is there a distinct
stanza for calls, separate from ?