Callee rejects a 1:1 call¶
Status: draft
Spec version: 0.1.0
Summary¶
The sequence when the callee actively declines an incoming 1:1 call instead of answering. The caller's
Sequence¶
sequenceDiagram
autonumber
participant caller as Caller (initiating device)
participant server as WhatsApp server
participant callee as Callee device
caller->>server: <call><offer> placed [probable]
Note over caller,server: Standard offer with per-device <enc> call key and transport candidates.
server->>callee: routed <call><offer> delivered to callee [probable]
Note over server,callee: Callee device(s) begin ringing.
callee->>server: <reject reason='declined'> call-id call-creator [probable]
Note over callee,server: Callee user declines no <accept> is ever sent so no SRTP keys are derived.
server->>callee: <ack class='call'> for the reject [speculative]
Note over server,callee: Server acknowledges the rejection back to the rejecting device.
server->>caller: routed <reject> delivered to caller [probable]
Note over server,caller: Caller UI shows the call as declined.
server->>callee: <terminate reason='reject_elsewhere'> to callee's other devices [speculative]
Note over server,callee: Other linked callee devices stop ringing once one device has rejected.
Participants¶
- Caller (initiating device) (
caller) - WhatsApp server (
server) - Callee device (
callee)
Steps¶
| # | From | To | Message | Stanza | Confidence | Note |
|---|---|---|---|---|---|---|
| 1 | caller | server | call-offer |
probable | Standard offer with per-device |
|
| 2 | server | callee | routed |
call-offer |
probable | Callee device(s) begin ringing. |
| 3 | callee | server | call-reject |
probable | Callee user declines; no |
|
| 4 | server | callee | call-ack |
speculative | Server acknowledges the rejection back to the rejecting device. | |
| 5 | server | caller | routed |
call-reject |
probable | Caller UI shows the call as declined. |
| 6 | server | callee | call-terminate |
speculative | Other linked callee devices stop ringing once one device has rejected. |
Open questions¶
- Is the decline carried by a dedicated
stanza, or a ? - Does the reject reason token match a value in the terminate-reasons enum, or a separate set?
- Is the "reject_elsewhere" propagation server-originated or peer-originated?