Skip to content

Call pre-accept (ringing)

Signalling - call-preaccept

SIG-04 - status: review - audio, video

Optional stanza a callee sends to signal "ringing" before answering with .

A callee MAY send <preaccept> to signal that an incoming <offer> (call-offer) is ringing, before the user answers. It does not accept the call and MUST be followed by <accept> (call-accept) or a terminating action (call-reject / call-terminate).

Wire format — top-level <call> wrapper with a <preaccept> action child:

<call to="<caller>" id="<wrapper-id>">
  <preaccept call-id="<call-id>" call-creator="<creator>">
    <audio enc="opus" rate="..."/>     ; one or more, preference order
    <encopt keygen="2"/>
    <capability ver="1">01 05 f7 09 e4 bb 07</capability>
  </preaccept>
</call>
  • <call> MUST carry to (the caller) and id (stanza id correlating the server <ack>, generated from random bytes).
  • <preaccept> MUST carry call-id (echoed unchanged from the offer) and call-creator.
  • <preaccept> children MUST appear in order: audio(+) → encopt → capability.
  • Media MUST be one or more <audio enc="opus" rate="...">, in preference order. rate="8000" steers to Opus narrowband; rate="16000" selects wideband.
  • <encopt keygen="2"> MUST be present (v2 SRTP key path).
  • <capability ver="1"> MUST carry the fixed 7-byte blob 01 05 f7 09 e4 bb 07 (differs from the offer/accept blob 01 05 f7 09 e4 bb 13 only in the final byte).
  • A receiver MUST read call-id and call-creator to correlate with the in-flight call. No <receipt> ack is expected; the generic server <ack> for the <call> stanza suffices.

Requires: call-offer, call-accept
Breakdown: call-accept, flow-call-missed, flow-call-rejected, flow-incoming-1to1, flow-outgoing-1to1, video-call

Implemented by

Flavor Status Source Notes
whatsapp-rust working history - blame - commits 674e851
zapo-caller working

Annotation wacrg:SIG-04 — 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
Rajeh Taher Rajeh Taher wrote initial spec

protocol history / diff - blame

Open questions - Whether the server or peer behaves differently when is omitted versus sent (e.g. caller-side ringing UI/timeout), and whether it is ever mandatory. - Whether may carry additional children (e.g.

Changelog

  • 2026-06-21 — Initial spec entry.

Back to the full spec