Phones - Creating and Handling Calls
Desk Phone API features described in this section are deprecated and supported only on the following models: D40, d45, d50, d60, d62, d65, d70
This guide provides a basic overview for handling call events and performing various actions (e.g., hangup) on calls.
The digium.event function is key to working with calls (https://sangomakb.atlassian.net/wiki/spaces/Phones/pages/22020316 ). When you register for an event that has to do with call creation, an eventData object is passed to your handler that provides a variety of information. Most important is the callHandle. Here is an example of the eventData from an incoming call.
{
"eventName":"digium.phone.incoming_call",
"eventData":{
"state":"INCOMING",
"accountSlot":"0",
"callHandle":"319-5",
"remoteInfo":"\"Princess Peach\" <sip:101@10.10.8.218>",
"remoteContact":"<sip:101@10.10.8.218>",
"lastStatus":"0",
"lastStatusText":"",
"mediaStatus":"none",
"headers":{"Via":"SIP/2.0/UDP 10.10.8.218:5060;rport=5060;received=10.10.8.218;branch=z9hG4bK1a83d2ea",
"From":"\"Princess Peach\" <sip:101@10.10.8.218>;tag=as486547c6",
"To":"<sip:200@10.10.6.193;ob>",
"Contact":"<sip:101@10.10.8.218>",
"Call-ID":"0d82476949832b7b6974c23e107cd479@10.10.8.218",
"CSeq":"102 INVITE","User-Agent":"Asterisk PBX (digium)",
"Max-Forwards":"70","Date":"Tue, 12 Mar 2013 05:11:58 GMT",
"Allow":"INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO",
"Supported":"replaces",
"Content-Type":"application/sdp",
"Content-Length":"288"},
"role":"callee","local_info":"<sip:200@10.10.6.193;ob>",
"local_contact":"\"200\" <sip:200@10.10.6.193:5060;ob>",
"connect_duration":"0",
"account_subslot":"0"
},"messageId":"ae277800"}The digium.phone function provides a set of useful methods for working with calls (https://sangomakb.atlassian.net/wiki/spaces/Phones/pages/22315220 ). You can do things such as answer, hangup, and dial. Dial is used for starting a call, and the rest can be used to handle an existing call. The following example shows the process of observing a call, handling the response, and performing actions on the call itself.
//declare currentCall as a "global"
var currentCall = {};
digium.app.exitAfterBackground = false; //keep the app running in the background
// event listener for incoming calls
digium.event.observe({
'eventName' : 'digium.phone.incoming_call',
'callback' : showCID
});
function showCID (evt) {
digium.foreground(); //foreground the app when we get an incoming_call
var callHandle = evt.eventData.callHandle; //this how the system identifies the call
var role = evt.eventData.role; //caller or callee
// parse out name from remoteInfo using a regex
var name = (new RegExp(/^\"(.*)\"/).exec(evt.eventData.remoteInfo)) ? RegExp.$1 : "";
// parse out number from remoteInfo using a regex
var number = (new RegExp(/<sip:(\d+)/).exec(evt.eventData.remoteInfo)) ? RegExp.$1 : "";
// this is declared outside of our function so it is "global" and accessible to other functions
currentCall = {
'role' : role,
'name' : name,
'number' : number,
'callHandle' : callHandle
}
var cid = "Name: " + currentCall.name + " Number: " + currentCall.number;
window.add(new Text(0, 20, window.w, Text.LINE_HEIGHT, cid));
// set softkeys up
setSoftkeys();
}
function setSoftkeys () {
//softkey 1 answers
window.setSoftkey(1, 'Answer', function () {
digium.phone.answer({
'callHandle' : currentCall.callHandle,
'handler' : function (obj) {
myDebug('App had a phone action (Answer)take place. State:' + obj.state);
}
});
});
//softkey 2 rejects
window.setSoftkey(2, 'Reject', function () {
digium.phone.reject({
'callHandle' : currentCall.callHandle,
'handler' : function (obj) {
myDebug('App had a phone action (Reject)take place. State:' + obj.state);
}
});
});
//softkey 3 transfer
window.setSoftkey(3, 'Transfer', function () {
digium.phone.transfer({
'callHandle' : currentCall.callHandle,
'handler' : function (obj) {
myDebug('App had a phone action (Transfer) take place. State:' + obj.state);
}
});
});
}
Return to Documentation Home | Sangoma Support