Esempio completo di integrazione
Questa sezione ha il compito di illustrare un esempio di integrazione che fa uso della lilbreria AgentDesktop Widget SDK al fine di poter gestire ed essere notificato dei contatti proposti all'operatore e poterne intercettare le relative notifiche all'interno della propria web-application.
Ricordiamo inoltre che AgentDesktop dispone di un Widget di esempio che illustra con del codice esemplificativo la maggior parte di situazioni e problematiche che l’integratore dovrà affrontare nel corso della realizzazione di un Widget personalizzato. Il Widget è presente in ogni distribuzione di AgentDesktop al seguente indirizzo: /AD/widget/agentdesktop_widget_sample.html
Figura 1 - La interfaccia principale del Widget di esempio che illustra l’utilizzo delle API suddividendole per categoria di appartenenza
Inclusione della libreria Javascript AgentDesktop Widget SDK all'interno della propria pagina:
<!-- AgentDesktop SDK Widget -->
<script type="text/javascript" src="/AD/widget/agentdesktop_widget.js"></script>
Registrazione di una propria funzione al fine di essere notificato degli eventi in corso sulla barra telefonica:
// Bind Contacts/Agents Events
AGENTDESKTOP.WIDGET.unbindContactCallback(WidgetContactCallback);
AGENTDESKTOP.WIDGET.bindContactCallback(WidgetContactCallback);
La funzione “WidgetContactCallback” verrà richiamata dalla libreria SDK automaticamente ogni qual volta si avrà una qualsiasi attività sia a livello di barra telefonica (ingresso di una chiamata, cambio di stato del contatto) oppure ogni volta che l’operatore modificherà la sua presenza sul media telefonico richiedendo per esempio la pausa o la login.
Gestione dello Stato Logico dell’Operatore
Gli eventi notificati ad AgentDesktop verso il Widget hanno una struttura JSON in cui la proprietà “event” descrive l’evento stesso. Possiamo per esempio ipotizzare una prima integrazione che riesca ad intercettare il cambiamento di stato dell’operatore al fine di poter contestualizzare la propria pagina del CRM in accordo alla disponibilità dell’agente loggato.
function WidgetContactCallback(jQuery_eventType, data) {
var DataObj = null;
DataObj = JSON.parse(data);
if (DataObj.event == "AGENT:LOGGEDIN") {
// Operatore loggato
}
if (DataObj.event == "AGENT:PAUSE") {
// Operatore in pausa
}
if (DataObj.event == "AGENT:LOGGEDOUT") {
// Operatore appena sloggatosi
}
Gestione della assegnazione di un nuovo contatto all’operatore
Un altro scenario di integrazione è rappresentato dalla notifica sull’ingresso di un nuovo contatto telefonico schedulato dal sistema CTI ed assegnato all’operatore. In questo caso l’evento POPUP determina il primo momento utile di presa in carico di un contatto da parte dell'operatore.
Gestione di una chiamata manuale
E' possibile individuare una chiamata gestita dal CTI rispetto ad una chiamata effettuata manualmente dall’operatore. In questo caso andremo ad intercettare il primo evento utile di impegno della linea telefonica. ovverosia l’evento CONNECTIONSTARTED.
Una nuova proprietà denominata “job_type” ci informa sulla origine del contatto. Nel caso sia valorizzata a “manual” significa che la telefonata è frutto di una esplicita richiesta da parte dell’operatore e non è gestita direttamente dal sistema ContaCT7.
Comporre una chiamata manuale uscente
E' possibile eseguire una chiamata uscente andando ad intercettare l’evento “click” di un pulsante definito nella propria web-app. Nell’handler dell’evento si andrà a richiamare la API di AgentDesktop “MakeCall”.
Visualizzazione di messaggi di errore
E' possibile visualizzare tramite la interfaccia grafica di AgentDesktop dei messaggi di errore relativi al funzionamento del proprio Widget.
Per esempio al click dell'operatore sul pulsante "Make Call", viene verificata la numerazione inserita nel campo input "Destination Number”" e nel caso in cui il campo input sia vuoto o non contenga un numero di telefono valido, viene visualizzata una finestra informativa per un tempo di 4 secondi :
Trasferimento diretto di una telefonata
Per il trasferimento diretto di un contatto telefonico o chat (senza consultazione) viene utilizzata la seguente API:
Il primo parametro indica l’identificativo del contatto da trasferire. Se omesso verrà utilizzata la chiamata corrente. Il secondo parametro indica la destinazione, può essere utilizzata una numerazione pubblica o l’identificativo di una risorsa dell Call Center.
Dopo la richiesta di trasferimento l’integrazione verrà notificata con una serie di eventi:
La telefonata principale verrà messa in attesa mediante la ricezione dell’evento HELD. La messa in attesa è eseguita automaticamente dal sistema. Si riporta un estratto della struttura Contatto passata nella callback di ciascuna integrazione:[EVENT] [HELD] [13b-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13b-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[f7875bc8-0db9-429f-bc7b-02013f72298d]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[3393669393]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[]
Indipendentemente dall’esito del trasferimento (positivo nel caso in cui cliente e destinazione vengano messi in comunicazione, o negativo nel caso di rifiuto) alla integrazione verrà notificato l’evento di TRANSFERRED sulla chiamata principale. La trasferta diretta di fatto è un comando lancia e dimentica, l’operatore non verrà a conoscenza dell’esito del trasferimento.[EVENT] [TRANSFERRED] [13b-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13b-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[f7875bc8-0db9-429f-bc7b-02013f72298d]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[]
La chiamata principale si concluderà con l’evento CONNECTIONCLEARED[EVENT] [CONNECTIONCLEARED] [13b-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13b-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[f7875bc8-0db9-429f-bc7b-02013f72298d]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[transferred]
Il contatto entrerà nella sua fase di gestione Offline (After Call Work) mediante la notifica dell’evento JOBCHANGED.[EVENT] [JOBCHANGED] [13b-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13b-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[f7875bc8-0db9-429f-bc7b-02013f72298d]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[offline]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[transferred]
Una volta esitato lo Script la fase di lavorazione del Contatto si concluderà[JOBFINISHED] [13b-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13b-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[f7875bc8-0db9-429f-bc7b-02013f72298d]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[finished]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[transferred]
Trasferimento di una telefonata con consultazione
Per il trasferimento con consultazione di un contatto telefonico viene utilizzata la seguente API:
Durante la consultazione la chiamata principale verrà messa automaticamente in attesa:[EVENT] [HELD] [13f-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13f-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[baabb838-ff32-4c15-afa9-78b4a7d01b59]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[]
Verrà generata una seconda telefonata manuale uscente di consultazione avente un nuovo identificativo:[EVENT] [CONNECTIONSTARTED] [3f-5e5fbc28@B2BUAEP.enghouse.com]
id.....................[3f-5e5fbc28@B2BUAEP.enghouse.com]
uuid...................[dd124824-5079-41f6-b5bc-46ae3b8362a6]
chat_id................[]
type...................[outbound]
media_type.............[telephony]
content_type...........[]
content_description....[]
job_type...............[manual]
job_state..............[]
ani....................[80165@B2BUAEP.enghouse.com]
dnis...................[consultation]
queue..................[]
reason.................[]
[EVENT] [DIALING] [3f-5e5fbc28@B2BUAEP.enghouse.com]
id.....................[3f-5e5fbc28@B2BUAEP.enghouse.com]
uuid...................[dd124824-5079-41f6-b5bc-46ae3b8362a6]
chat_id................[]
type...................[outbound]
media_type.............[telephony]
content_type...........[]
content_description....[]
job_type...............[manual]
job_state..............[]
ani....................[80165@B2BUAEP.enghouse.com]
dnis...................[consultation]
queue..................[]
reason.................[]
[EVENT] [ESTABLISHED] [3f-5e5fbc28@B2BUAEP.enghouse.com]
id.....................[3f-5e5fbc28@B2BUAEP.enghouse.com]
uuid...................[dd124824-5079-41f6-b5bc-46ae3b8362a6]
chat_id................[]
type...................[outbound]
media_type.............[telephony]
content_type...........[]
content_description....[]
job_type...............[manual]
job_state..............[]
ani....................[80165@B2BUAEP.enghouse.com]
dnis...................[consultation]
queue..................[]
reason.................[]
A questo punto si può decidere di eseguire una delle seguenti azioni:
Annullare la consultazione mediante il metodo AGENTDESKTOP.CONTACT.Hangup specificando l’identificativo della chiamata di consultazione.
Finalizzare il trasferimento mediante il metodo AGENTDESKTOP.CONTACT.Transfer_Complete
Finalizzare il trasferimento con una conference a tre partecipanti (clilente, operatore e numero consultato) mediante il metodo AGENTDESKTOP.CONTACT.Transfer_Complete_Conference
Nel nostro esempio verrà finalizzato il trasferimento richiamanto la API AGENTDESKTOP.CONTACT.Transfer_Complete.
Si riceverà l’evento di TRANSFERRED sulla chiamata principale:[EVENT] [TRANSFERRED] [13f-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13f-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[baabb838-ff32-4c15-afa9-78b4a7d01b59]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[]
La chiamata principale terminerà la sua fase Online venendo agganciata:[EVENT] [CONNECTIONCLEARED] [13f-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13f-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[baabb838-ff32-4c15-afa9-78b4a7d01b59]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[online]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[transferred]
Verrà terminata anche la chiamata di consultazione:[EVENT] [CONNECTIONCLEARED] [3f-5e5fbc28@B2BUAEP.enghouse.com]
id.....................[3f-5e5fbc28@B2BUAEP.enghouse.com]
uuid...................[dd124824-5079-41f6-b5bc-46ae3b8362a6]
chat_id................[]
type...................[outbound]
media_type.............[telephony]
content_type...........[]
content_description....[]
job_type...............[manual]
job_state..............[]
ani....................[80165@B2BUAEP.enghouse.com]
dnis...................[consultation]
queue..................[]
reason.................[transferred]
Sulla postazione dell’operatore il contatto entrerà nella sua fase di gestione Offline (After Call Work):[EVENT] [JOBCHANGED] [13f-5d9daab7@B2BUAGW1.enghouse.com]
id.....................[13f-5d9daab7@B2BUAGW1.enghouse.com]
uuid...................[baabb838-ff32-4c15-afa9-78b4a7d01b59]
chat_id................[]
type...................[inbound]
media_type.............[telephony]
content_type...........[live]
content_description....[]
job_type...............[inbound]
job_state..............[offline]
ani....................[customer]
dnis...................[225727273]
queue..................[QUEUE25]
reason.................[transferred]