In the past integrations to Plantronics devices were often done via a lower-level SDK that exposed just the raw device events and device commands.
Now integrators can benefit from much simpler, higher-level interfaces with a lot of the hard work done for you, especially in the area of call state management between the headset and your application.
This makes it much quicker and easier to integrate to and support the latest Plantronics devices and handle multiple incoming call scenarios!
The Spokes SDK has 3 integration routes, COM Service, REST Service and iPlugin SDK. Note: All require the Spokes runtime to be installed and running. (Read more about this in: So what is Spokes anyway?).
I was recently exploring the ICallCommand
call management interface and wanted to share some thoughts / results here.
Incoming call flow
If you are doing softphone integration based on C++ SpokesSDKCOMSample, or C# SpokesSDKCOMNETSample, here is a flow you could implement for incoming call:
- There is an incoming call in your softphone
- Call the “
callcommand
->IncomingCall
” function of the Plantronics SDK
- Pass an
ICall
object containing the unique numeric id of the call
- Pass an
IContact
object optionally with the contact name (caller id) who is calling to be displayed on screen of supported Calisto speakerphone/handset devices, otherwise empty string
- This causes Plantronics device to go into PC/VoIP line ringing state, and to anticipate the next Talk button press will answer the call
- User presses “Talk” button, Spokes notifies your softphone that the call is now in progress via the CallStateEventHandler callback function
- On receiving this call back, depending on call id and call state within callback arguments, your softphone can connect the call! (or take other action based on call state, e.g. place a call on hold, etc.)
- Then 2nd incoming call while 1st is still in progress!
- Call
IncomingCall
function as before, with different call id
- User can choose to terminate 1st call (talk button) and answer 2nd call (talk button)
OR
User can choose to put 1st call on hold and answer 2nd call (flash button, see below)
- Again the call state changes are notified via
CallStateEventHandler
Caller id can be displayed on display of supported Calisto devices.
Demonstration...
This flow can be demonstrated by this sample code: C++ SpokesSDKCOMSample, or C# SpokesSDKCOMNETSample
Testing handling of multiple incoming calls with SpokesSDKCOMSample:
- The below screenshot shows sample application typing "incoming" twice to simulate 2 incoming calls:
- Result: When 2nd call comes in (ringing) pressing flash button will answer 2nd call, placing 1st call on hold. Pressing flash again will switch back to 1st call putting 2nd call on hold. You can do that as much as you want.
- Spokes SDK tells your application which call state to set a call to via the "Call State"
CallStateEventHandler
callbacks
- Press talk will terminate active call. The call on hold remains on hold until you press flash again to switch to it (activate it).
- The other benefit to newer SDK is that it supports dialpad features, e.g. of Calisto P240 and 800-series as well as multi-line features of Savi 7xx.
Note: this test was done with Plantronics Savi 745 device. Not all products support the "flash button" call switching feature. If in doubt check user manual on www.plantronics.com
This article was contributed by Lewis Collins. He became a member of the Plantronics Engineering team in August 2011. In this role he provides software consulting and expertise internally across teams and to external development partners who want to integrate with the Plantronics SDK kits and headset products. Previously Lewis gained experience in a wide range of software engineering activities and technologies, working in the telecommunications and public safety sectors as a software engineer at Integraph, a consultant for Altran Technologies UK and as a software engineer for Teleca Ltd.