API CTI: Custom integration – Shuttle 2.4.0 onwards

You can integrate xCALLY Shuttle with any kind of external Web Applications you like (external custom CRM, Ticketing solution, ERP etc…).

The template.js file contains the basic elements to create your Custom CTI Integration through the realtime xCally Shuttle connection, thus providing the possibility to manage and autofill your external applications with the data about the call, like the caller number or the agent who answered the call and more. You can automatically open a CTI form or pop-up, and view the call/ticket/crm data on to the xCALLY Shuttle supervisor Realtime Dashboards.

You can download the template.js file here

Important: after the download, remember to rename the template.js file!

xcally API - CTI Custom

Event Ringing

event.ringing = function(data) {
  console.log('ringing');
  wakeup('http://www.google.it', data.peer, 'new_tab');
};

Data sample
{ event: ‘ringing’,
queue: ‘CC-SIPP’,
agentname: ‘John Doe’,
agentnum: ‘1007’,
peer: ‘SIP/john.doe’,
direction: ‘inbound’,
uniqueid: ‘1437069264.914’,
context: ‘from-sip’,
extension: ‘9999’,
trunk: ‘SIP/demo.trunk-00000392’,
callernum: ‘998’,
ringing: true }

Event Abandon

event.abandon = function(data) {
  console.log('abandon');
  wakeup('https://www.zendesk.com/', data.peer, 'new_window');
};

Event Up

event.up = function(data) {
  console.log('up');
  wakeup('http://localhost', data.peer, 'new_frame');
};

Data sample
{ event: ‘up’,
queue: ‘CC-SIPP’,
agentname: ‘John Doe’,
agentnum: ‘1007’,
peer: ‘SIP/john.doe’,
direction: ‘inbound’,
uniqueid: ‘1437069264.914’,
context: ‘from-sip’,
extension: ‘9999’,
trunk: ‘SIP/demo.trunk-00000392’,
callernum: ‘998’,
holdtime: ‘2’,
ringtime: ‘0’,
up: true }

Event Hangup

event.hangup = function(data) {
  console.log('hangup');
  wakeup('http://www.google.it', data.peer, 'new_tab');
};

Event Outbound

event.outbound = function(data) {
  console.log('hangup');
  wakeup('http://www.zendesk.it', data.peer, 'new_window');
};

Open CTI to an Agent

var wakeup = function(url, peer, mode) {
  socket.emit('AgentCTI', {
    url: url,
    peer: peer,
    mode: mode
  });
};

where
url: the address of the CTI which you want to open
peer: the Agent interface
mode: how the CTI form will be opened. Values:

new_tab, new_window, new_frame

Push a notification to the Agent

var notification = function(peer, type, title, body) {
  socket.emit('AgentCTINotification', {
    peer: peer,
    type: type,
    title: title,
    body: body
  });
};

where
peer: the Agent interface
type: the kind of toast that will be displayed to the Agent. Values:

'success', 'info', 'warning', 'error'

title: the title of the toast that will be displayed to the Agent
body: the message of the toast that will be displayed to the Agent

Push the event into the Integration Realtime section of the Administrator

These data will populate the following section of xCALLY Realtime:

integrations

var pushevent = function(appname, data, reference, url) {
  data.time = new Date();
  socket.emit('RealtimeCTI', {
    type: appname,
    channel: data,
    reference: reference,
    url: url
  });
};

where
appname: name of the Integration
data: object containing information about the call
reference:  CTI creation id
url: the address of the CTI

 

Example

For each event you can define which action you want the integration to perform.

In this example we associate to the UP event the CTI opening to an Agent, if the call belongs to the Sales Queue.

We also pass to the Agent a custom variable called ordernumber that we have created into the Shuttle -> Settings -> Integrations -> Custom variables section.

ordernumber

event.up = function(data) {
    var order = customvariables[data.uniqueid]['ordernumber'];
    if(data.queue == ‘Sales’){
         wakeup('http://webservice1/sales?ordernumber=' + order, data.peer, 'new_frame');}
    }
};