sequenceDiagram
participant AW as Alice's
web view
participant AN as Alice's
app native
participant AC as Alice's
chat core
participant BC as Bob's
chat core
participant BN as Bob's
app native
participant BW as Bob's
web view
note over AW, AC: Alice's app
note over BC, BW: Bob's app
note over AW, BW: 1. Establishing call
note over AN: user: start call
AN ->> AW: WCCapabilities
AW ->> AN: WRCapabilities (e2e?)
AN ->> AC: APISendCallInvitation
AC -->> BC: XCallInv
AC ->> AN: CRCmdOk
BC ->> BN: CRCallInvitation
note over BN: show: accept call?
alt user accepted?
BN ->> BC: no: APIRejectCall
(sender not notified)
BC ->> BN: CRCmdOk
else
BN ->> BW: yes: WCStartCall
BW ->> BN: WCallOffer
end
BN ->> BC: APISendCallOffer
BC -->> AC: XCallOffer
BC ->> BN: CRCmdOk
AC ->> AN: CRCallOffer
note over AN: show if no e2e: continue call?
AN ->> AW: WCallOffer
AW ->> AN: WCallAnswer
AN ->> AC: APISendCallAnswer
AC -->> BC: XCallAnswer
AC ->> AN: CRCmdOk
BC ->> BN: CRCallAnswer
BN ->> BW: WCallAnswer
note over AW, BW: call can be established at this point
note over AW, BW: 2. Sending additional ice candidates
(optional, same for another side):
BW ->> BN: WCallICE
BN ->> BC: APISendCallExtraInfo
BC -->> AC: XCallExtra
BC ->> BN: CRCmdOk
AC ->> AN: CRCallExtraInfo
AN ->> AW: WCallICE
note over AW, BW: 3. Call termination (same for another party):
note over AN: user: end call
AN ->> AW: WEndCall
AN ->> AC: APIEndCall
AC -->> BC: XCallEnd
AC ->> AN: CRCmdOk
BC ->> BN: CRCallEnded
note over BN: show: call ended
BN ->> BW: WEndCall