Incoming call handling¶
When sipis receives incoming INVITE request, it usually takes the following steps
It sends push notification to registered user’s device(s).
It immediately sends a provisional
180 Ringing
response to the originating SIP proxy. Sipis will also includeX-Sipis-Push-Status: Alerting-Device
header in this response.It starts timer T1 to fire in two minutes.
It waits for some user’s device to answer the call.
Push notification service notifies sipis that the push notification has been sent. Upon receiving this notification, sipis sends another provisional
180 Ringing
response to the originating SIP proxy, this time withX-Sipis-Push-Status: Push-Notification-Sent
header.User’s device notifies sipis via a fast channel that it is about to answer the call. Upon receiving this notification, sipis sends yet another provisional
180 Ringing
response to the originating SIP proxy, this time withX-Sipis-Push-Status: Device-Making-Progress
header. Also, at this point sipis cancels timer T1 and starts timer T2 to fire in two minutes from this point. (User’s device may send this notification multiple times, but sipis will perform the above steps only for the first notification and will take no action for subsequent ones.)User’s device finally establishes a connection to sipis and accepts the call.
At this point sipis relays SIP messages between the SIP proxy and user’s device until the end of the call.
Special Cases¶
The default sequence of steps can branch into several special cases described below.
No user’s device responds until timer T1 expires¶
In this case sipis will reject the incoming INVITE request with
480 Temporarily Unavailable
response.
(Since 3.54) Sipis will also include X-Sipis-Reason: No-Response-From-Device
header in this response.
(Since 3.54) The response can also be customized via
Sipis/IncomingCall/OnNoResponseFromDevice
option.
User’s device notifies sipis but doesn’t answer the call until timer T2 expires¶
In this case sipis will reject the incoming INVITE request with
480 Temporarily Unavailable
response.
(Since 3.54) Sipis will also include X-Sipis-Reason: No-Response-From-User
header in this response.
(Since 3.54) The response can also be customized via
Sipis/IncomingCall/OnNoResponseFromUser
option.
Push notification service indicates that it was unable to deliver the push notification¶
In this case sipis will reject the incoming INVITE request with
480 Temporarily Unavailable
response.
(Since 3.54) Sipis will also include X-Sipis-Reason: Push-Notification-Failure
header in this response.
(Since 3.54) The response can also be customized via
Sipis/IncomingCall/OnPushNotificationFailure
option.
Push notification service indicates that the application on user’s device has been uninstalled¶
In this case sipis will reject the incoming INVITE request with
480 Temporarily Unavailable
(Until 3.53) / 410 Gone
(Since 3.54) response.
(Since 3.54) Sipis will also include X-Sipis-Reason: Device-Token-Not-Found
header in this response.
(Since 3.54) The response can also be customized via
Sipis/IncomingCall/OnDeviceTokenNotFound
option.
Furthermore sipis will automatically stop and remove the SIP client instance, so it will no longer accept incoming calls.
Sipis receives CANCEL request from the originating SIP proxy¶
In this case sipis will reject the incoming INVITE request with
487 Request Terminated
response. Furthermore sipis will send
push notification to registered user’s device(s), notifying them
that the call is no longer active.
Application is in foreground on some user’s device¶
In this case sipis will immediately reject the incoming INVITE request
with 488 Not Acceptable Here
response, assuming that the SIP proxy
did fork the INVITE request to the user’s device as well.