Call Reject¶
Tag: <call>
Category: signaling
Status: draft
Spec version: 0.1.0
Direction: outgoing, incoming
Summary¶
Sent by a callee device to decline an offered call before it is answered. The
Attributes¶
| Name | Type | Required | Confidence | Description | Provenance |
|---|---|---|---|---|---|
from |
jid |
yes | probable | JID of the callee device declining the call. observed: B.0:7@s.whatsapp.net |
techniques: websocket-capture; sources: none |
to |
jid |
yes | probable | JID of the caller the rejection is routed to. observed: A@s.whatsapp.net |
techniques: websocket-capture; sources: none |
id |
string |
yes | probable | Stanza id used to correlate the server observed: 5E6F708192 |
techniques: websocket-capture; sources: none |
Children¶
<reject>¶
occurrence: 1 - confidence: probable
Container declining the call. Echoes the session identifiers from the offer and carries a reason drawn from enum:terminate-reasons. Distinguished from terminate by being emitted before any acceptance.
Attributes
| Name | Type | Required | Confidence | Description | Provenance |
|---|---|---|---|---|---|
call-id |
string |
yes | probable | The logical call session id being rejected, copied verbatim from the offer. observed: CALLID-0001-synthetic |
techniques: websocket-capture, baileys-instrumentation; sources: none |
call-creator |
jid |
yes | probable | JID of the call creator (the caller), copied from the offer for attribution. observed: A@s.whatsapp.net |
techniques: websocket-capture; sources: none |
reason |
enum:terminate-reasons |
no | probable | Why the call was rejected, drawn from the shared enum:terminate-reasons (most commonly declined or busy). Reusing the terminate enum keeps the reason vocabularies aligned across both stanzas. observed: declined, busy |
techniques: websocket-capture, baileys-instrumentation; sources: none |
Examples¶
Illustrative user declines an incoming call (synthetic)¶
Synthetic and sanitized, not a real capture. Shows a declined rejection routed back to the caller while the call is still ringing.
<call from="B.0:7@s.whatsapp.net" to="A@s.whatsapp.net" id="5E6F708192">
<reject call-id="CALLID-0001-synthetic" call-creator="A@s.whatsapp.net" reason="declined"/>
</call>
Notes¶
Reject and terminate are closely related; the practical distinction is timing (reject happens before acceptance) and that reject is always peer-originated. They deliberately share enum:terminate-reasons so a future capture only needs to extend one enum. If captures show reject uses a strictly smaller reason set, that subset can be documented in the enum's value confidence rather than by forking a new enum.
Open questions¶
- Does reject use the full enum:terminate-reasons set, or only a declined/busy subset?
- Is there a separate "auto-reject" reason (e.g. do-not-disturb / blocked) distinct from user decline?
- After reject, does the server also emit terminate to the caller, or is reject sufficient on its own?