Javascript Client

The Sift object is the entry point into the Sift VOIP library. It is available as a global when you include the Sift javascript file.




Callback function that is invoked when authentication is successful. After calling Sift.authenticate on the Sift object with a valid token, the State will change to “authenticated” and this function will be called.

Sift.onAuthenticated = function() {
    console.log("authentication succeeded");

    // it is safe to call connect at this point.



Callback function for handling inbound calls. The client should call either Sift.answer or Sift.decline to handle the incoming call.

The answer or decline function need not be called before the function exits, but the caller will continue to hear a ringback tone until answer or decline is called. Only one of the two functions should be called in response to a single onIncomingCall request.

Sift.onIncomingCall = function() {
    if (confirm("Answer incoming call?")) {
    } else {



Called when a voice connection is successfully established. This can happen as the result of a call to Sift.connect or Sift.answer.

Sift.onConnected = function() {
    console.log("Connection established!");



Called when a connection is terminated due to the remote end ending the call. This can happen when the routine handling the connection reaches a HangUp command.

Sift.onRemotePartyHungUp = function() {
    console.log("Remote party hung up!");


type:Function(String error)

Called when an error occurs that prevents a connection from being established. error is a string error code. Can be any of the values defined in Error Strings.



type:Function(String token)

Initialize the global Sift object. Must be called before any other function. token is a string generated by your server which encodes the authorization and permissions information for this client instance. If the client is allowed to receive calls, token will contain the WebRTC name to use when calling this client. If the client is allowed to make outgoing calls, then token will contain the Application that will handle the incoming calls. It is an error to call the authenticate function a second time unless you call the Sift.reset function first.

Sift.onAuthenticated = function() {
    // Ready to connect here.


type:Function(Anything data)

Initiate a new outbound VOIP connection.

When called, the current Sift state will switch to connecting. If required, the browser will show a prompt to the user requesting microphone access. If access is denied, the Sift.onError callback is called with the parameter “mic-permission-denied” and the current state returns to authenticated.

If the token string that you passed to Sift.authenticate does not allow outbound calls, the connection will fail and the Sift.onError callback will be called.

Throws an exception if the current state is not authenticated.

Once the connection is established, the Application encoded in the authentication token will receive the new call and dictate the call flow.

The data parameter can be any JSON-serializable type. It will be attached to the Connection object associated with the call in the REST API, and consequently is available to the Incoming Connection Callback for the Application. It is therefore useful as a way to communicate client state with the server and determine how the call should be handled.

Sift.onConnected = function() {
    // Display some connected UI
Sift.onError = function(error) {
    if (error === Sift.Error.NO_MIC) {
        alert("Please plug in a mic to connect!");
    } else if (error === Sift.Error.MIC_PERMISSION_DENIED) {
        alert("You must allow mic access to connect!");
    } else if (error === Sift.Error.OUTGOING_NOT_PERMITTED) {
        alert("This client cannot make outgoing calls!");
    greeting: 'hello',
    otherParameters: params



Answer an incoming call. If the current state is not ringing has no effect, otherwise, changes the current state to connecting. The browser will immediately prompt the user to allow microphone access if they have not already done so.



Decline an incoming call. If the current state is not ringing has no effect. Changes the current Sift.state back to ready.



Mute the microphone.



Unmute the microphone.



Terminate the active connection. Has no effect if the connection is not in the connected state.



Resets the Sift object to the uninitialized state. You can then call init again with a different token. Terminates any active calls.



Returns the current state as a string.

State Strings

The following strings may be returned by Sift.state. They are also listed in the object Sift.State.

State Description
uninitialized The initial state of the Sift object before authenticate is called.
authenticating Sift received a call to Sift.authenticate and is waiting for the server to respond to the request.
authenticated The initialization was successful and the server has authorized the client token. Ready to make or receive calls.
ringing The client is receiving an inbound call. Client should call Sift.answer or Sift.decline
connecting Currently establishing a voice connection, due to a call to answer or connect. Will be in this state while the browser asks the user for microphone access.
connected The client is connected and sending and receiving audio data.

Error Strings

The following strings may be passed as the first parameter to the Sift.onError callback. They are also listed in the object Sift.Error.

Error Description
unknown An unknown error occurred.
lost-internet The Internet connection was lost. The client has returned to the uninitialized state and cannot initate or receive calls.
no-mic A call could not be connected because the user does not have a microphone.
mic-permission-denied A call could not be connected because the user denied access to the microphone.
authentication-failed A previous call to Sift.authenticate was unsuccessful because the authentication token was not valid.
outgoing-not-permitted A call to Sift.connect was unsuccessful because the authentication token was not initialized with the “outgoing” capability.