- Created by Daniel Olivera, last modified by Maria Carina Soca on Jun 11, 2021
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 45 Next »
Aquí podremos encontrar toda la información relevante a las acciones de telefonía que pueden ser realizadas a través de nuestra API.
Recordar que para poder usar la API se necesita.
Autenticarse y obtener un token para la sesión
Usar el token en el Header Authorization
Finalizar sesión
Contenido
Llamadas
Aquí veremos las siguientes acciones disponibles
https://dominio.ucontactcloud.com/Integra/resources/Agents/AgentCall Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: callerid (Número con que va a salir la llamada) agent (Nombre del agente que genera la llamda) phone (Número de teléfono del agente) tech (Usualmente SIP) context (Contexto del agente configurado en uContact) outqueue (Nombre de la campaña que se computara la llamada) destination (Número destino) Resultado: TEXTO (Guid de la llamada generado) 0 Error Es una llamada en 2 pasos se llama al agente y cuando Atiende o Auto-atiende se genera la llamada final.
Realizar llamada vía proxy
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script type="text/javascript"> function Call () { var windowProxy; windowProxy.addEventListener(onResponse); windowProxy = new Porthole.WindowProxy(window.location.protocol + window.location.hostname); windowProxy.post({'action': 'call', 'campaign' : '<CAMPAIGN>', 'callerid' : '<CALLERID>', 'destination' : '<NUMBER>'}); } function onResponse(messageEvent) { response = messageEvent.data.guid; //retorna id único de llamada } </script>
https://dominio.ucontactcloud.com/Integra/resources/Agents/AgentCallwithData Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: callerid (Número con que va a salir la llamada) agent (Nombre del agente que genera la llamda) phone (Número de teléfono del agente) tech (Usualmente SIP) context (Contexto del agente configurado en uContact) outqueue (Nombre de la campaña que se computara la llamada) destination (Número destino) data (datos para enviar al workflow, habitualmente un JSON que se puede pasar a variables con la actividad JSON dentro del flujo) form (Nombre de Form o URL para Popup) Resultado: TEXTO (Guid de la llamda generado) 0 Error Es una llamada en 2 pasos se llama al agente y cuando Atiende o Auto-atiende se genera la llamada final.
Esta función permite realizar llamadas pero se diferencia de la anterior porque utiliza el telefono ya inicializado del portal.
La única manera de realizarlo es via proxy dado que la comunicación es directamente con el portal de uContact
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script> function call(){ var windowProxy; windowProxy = new Porthole.WindowProxy(window.location.protocol + '//' + window.location.hostname); windowProxy.addEventListener(onResponse); windowProxy.post({ action: 'callWithPhone', destination: '091000000', campaign: 'Sale->' }); } function onResponse(messageEvent) { var response = messageEvent.data.guid; alert(response); } </script>
https://dominio.ucontactcloud.com/Integra/resources/Agents/HangupPhone Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: phone (Número de teléfono del agente) Resultado: 1 Llamada cortada correctamente 0 Error
Cortar llamada vía Proxy
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script type="text/javascript"> //Ejemplo en click de cerrar el Tab function Hangup () { var windowProxy; windowProxy = new Porthole.WindowProxy(window.location.protocol + window.location.hostname); windowProxy.post({'action': 'hangup'}); } </script>
Tipifica la llamada ejecutando la acción correspondiente al Marcador
RESPOOL
RESPOOLALTERNATIVE
BLACKLIST
SCHEDULE
Deben estar configuradas las tipificaciones en el sistema para que puedan funcionar.
Relative URL: Integra/resources/api/DispositionCall Method: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Params: campaign (Nombre de la campaña obligatorio) agent (nombre agente obligatorio) callerid (número telefono cliente) guid (id de la llamada) l1 (nivel 1 tipificación) l2 (nivel 2 tipificación) l3 (nivel 3 tipificación) d1 (dato extra a guardar) d2 (dato extra a guardar) comment (comentario) schedule (si hay una fecha (formato ejemplo 2019-02-26 13:45:00) y la accion del marcador es RESCHEDULE agenda una llamada a ese número ) camptoreschedule (marcador al cual se puede reagendar la llamada) Result: 1
Respuestas del WS
200 OK: Retorna json que contiene: Result: ok, txtcode: txtcode 400 ERROR: Campos obligatorios: Campana: "Wrong parameters: Empty campaign." Callerid: "Wrong parameters: Empty callerid" Guid: "Wrong parameters: Empty guid" Agente: "Wrong parameters: Empty agent" Nivel 1 de tipificación: "Wrong parameters: Empty value1" Validaciones: La combinación de campana, nivel1, nivel2, nivel3 no corresponde con una tipificación creada. Disposition not found for level1: " + l1 + ", level2: " + l2 + " level3: " + l3 En caso de acción de reagenda: The schedule date format is not well formed: El formato de la fecha tiene que ser yyyy-MM-dd HH:mm:ss Wrong parameters: Empty schedule date.
Agrega un numero a la black list, puede ser por campaña o usar * en campaign para todas
Relative URL: Integra/resources/admin/addblack Method: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Params: black (JSON Object) Result: 1
Objeto Json
{ "phone": "número de telefono", "campaign":"Campaña", "username": "usuario que ingreso el dato", "company": "Dato Cliente", "job_title": "Dato Cliente","name": "Nombre"}
Grabaciones
https://dominio.ucontactcloud.com/Integra/resources/Cdr/getrecords Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: lastrow (Último número de resultados de obtener registros) ejemplo 0 (Obtiene ne 50 grabaciones de la 0-50), 50 (obtiene de la 51-100)) si el searchLimit es 50 searchLimit cantidad de registros filter (Objeto filtro JSON) Random: 1 (Siempre 1) searchLimit :50 Resultado: JSON
Objeto Json
{ "calldatei": "2015-12-03 00:00:00", //Fecha inicial "calldatef": "2016-02-24 23:59:59", //Fecha final "agent": "", //Agente "campaign": "", //Campaña "source": "", //Origen "destination": "", //Destino "data": "", //Datos de Tag de Llamadas "range": "", //Rango de horas "rating": "", //Calificación "mindur": "", //Duración mínima "exclude": "", //Excluir número "type": "record" //Tipo de registro siempre igual ,"cont": "" //Cantidad de veces que se encuentra ese número en el rango seleccionado }
Las grabaciones pueden estar en 4 lugares distintos:
https://Telefonía/records/guid.mp3 https://Telefonía/records/guid.mp3 https://RespaldoGrabaciones/records/20160118/guid.mp3 https://RespaldoGrabaciones/records/guid.mp3 Guid (Identificador único encontrado en objeto JSON) Ejemplo: 7e4e7db9-f080-494e-b04b-7c8e47711558
Los directorios (folder) son la fecha de la grabación que se encuentra en ese registro (calldate) sin guiones ni la hora.
Esto se debe a que al guardar muchos millones de archivos en el Sistema Operativo no los maneja correctamente, por lo cual se guardan dentro de directorios.
Si no se encuentra la grabación en estos lugares puede ser que se encuentre en formato GSM, es posible realizar 2 acciones:
Si su aplicación puede reproducir GSM es simplemente cambiar la extension mp3 por gsm e intentar encontrarla en los mismos 4 lugares.
Se puede convertir GSM a MP3 con un WebService.
https://dominio.ucontactcloud.com/Integra/resources/Supervisor/convert Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: guid (Identificador único de la grabación) folder (Ejemplo:20160118) Es la fecha de la grabación en caso que se encuentre en su directorio. Result: 1 para completado.
Luego intentaremos encontrar los MP3 de la misma forma (puede usarse el reproductor de HTML5 o cualquier reproductor de audio).
https://Telefonía/records/guid.mp3 https://Telefonía/records/folder/guid.mp3 https://RespaldoGrabaciones/records/folder/guid.mp3 https://RespaldoGrabaciones/records/guid.mp3 Guid (Identificador único encontrado en objeto JSON) Ejemplo: 7e4e7db9-f080-494e-b04b-7c8e47711558
https://dominio.ucontactcloud.com/Integra/resources/Agents/TagRecord Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: phone (Número destino) guid (Identificador único) data (Texto de marcado ) Result: Vacío, es asincrónico
Vía Proxy
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script type="text/javascript"> //Ejemplo en click de cerrar el Tab function Hangup () { var windowProxy; windowProxy = new Porthole.WindowProxy(window.location.protocol + window.location.hostname); windowProxy.post({'action': 'tag', 'guid' : '<GUID>', 'message' : '<MESSAGE>'}); } </script>
Marcadores
Acciones disponibles
Este JSON es encontrado en el LocalStorage y encriptado, tiene la información de la llamada que fue atendida y la información del registro del marcador si corresponde para Respool.
Dialer: Campaña, Num principal, status(siempre 1), data (parámetros y valores que pasan al workflow), alternatives (separados por :), retries (reintentos que va haciendo ese numero), contact (id contacto), dialebase, prioridad, agentphone
Estos datos hay que convertirlos al objetoRespool que se muestra más abajo.
Que podemos realizar con Objeto Respool:
Cambiar teléfono principal por alternativos y reordenar a gusto
Cambiar cantidad de reintentos para ese numero (ejemplo si pongo un alternativo como principal poner el 0)
Cambiar prioridades
Agregar datos para el workflow o cambiarlos
agentphone, si es Progressive asignar a otro agente
NO CAMBIAR: campaña, status, contact, dialerbase: Puede ocasionar errores en el marcador.
Vía Proxy
Definir en su página
windowProxy = new Porthole.WindowProxy('<URL PADRE>'); windowProxy.addEventListener(onMessage); windowProxy.post({'action': 'CTI'}); function onMessage(messageEvent) { CTI = messageEvent.data.CTI; }
https://dominio.ucontactcloud.com/Integra/resources/Dialers/Respool Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: callspool (Objeto JSON) Resultado: 1
Objeto Json
{ "campaign": "Ventas->", //Nombre campaña "destination": "098344484", //Número destino "dialerbase": "basetest", //Nombre lista del discador "status": 1, // 1 registro habilitado a ser marcado "data": "Par1=Val1:Par2=Val2", // Parametros para flujos y formularios "alternatives": "098124484", // Números alternativos separados con : "contact": 222, // Id contacto "retries": 0, // 0 ya que comenzamos a marcar un nuevo número "priority": 9999, // Prioridad del registro no usar 1 ya que es para agendados, usar > 1 "agentphone": "1001" // Para marcadores Progresivos }
Via Proxy
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script type="text/javascript"> function Respool () { var windowProxy; windowProxy = new Porthole.WindowProxy(window.location.protocol + window.location.hostname); windowProxy.post({'action': 'respool', 'objetoRespool' : <Objeto Respool>}); } </script>
https://dominio.ucontactcloud.com/Integra/resources/Dialers/ScheduleDialerCall Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: callschedule (Objeto JSON) Resultado: 1 OK 0 ERROR
Objeto Json
{ "calldate" : "2015-10-11 15:00:00", //Fecha a ser ejecutada "campaign" : "Ventas->", //Campaña de marcador "destination" : "098344484", //Destino de la llamada "alternatives" : "099124484:099121212", //Números alternativos "agentphone" : "1001", //Número de agente si Progresivo "data" : "Par1=Val1:Par2=Val2" //Valores para Flujos y Formularios }
Via Proxy
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/porthole/1.0.0/porthole.js"></script> <script type="text/javascript"> function Schedule () { var windowProxy; windowProxy = new Porthole.WindowProxy(window.location.protocol + window.location.hostname); windowProxy.post({'action': 'schedule', 'callDate' : '<2016-10-10 15:00:00>', 'objectDialer' : <Objecto Respool> }); } </script>
Si se especifica fecha, la tarea se ejecutará mismo en esa fecha agendada, en caso de que la fecha se especifique como nula, la tarea se ejecutará cuando no haya tareas agendadas y se encuentre libre.
La prioridad de la tarea con fecha específica será mayor a la prioridad de la tarea agendada con fecha nula.
https://dominio.ucontactcloud.com/Integra/resources/Dialers/DialerTask Método: POST content-type: application/x-www-form-urlencoded Parámetros: call (Objeto JSON) Resultado: 1 OK 0 ERROR
Ejemplos para cada modo
Agregar marcador con prioridad 1
“calldate” es AHORA
Esta acción es utilizada para llamar momentos luego de ser ejecutada bulk = false
automatic = true
Se le da prioridad 1 pone una agenda para la llamada
{"calldate" : null, "campaign" : "nombreCampaña<-", "destination": "12-345-678", "alternatives": "", "agent" : "", "data": "idcustomer=7:name=Seba", "source": "source", "bulk" : false, "automatic" : true }
crear llamada manual en el momento. -Click to call -
calldate = null
el parámetro quedará vacíobulk = false
automatic = false
Esto crea una llamada en el momento
{"calldate" : null, "campaign" : "nombreCampaña<-", "destination": "12-345-678", "alternatives": "", "agent" : "", "data": "idcustomer=7", "source": "source", "bulk" : false, "automatic" : false }
Agregar llamada al marcador
En caso de ser Progresivo recordar ingresar tambien el agente.
//Uso el nombre de usuario para ese Agente: {"calldate" : null, "campaign" : "nombreCampaña->", "destination": "12-345-678", "alternatives": "", "agent" : "Agente1", "data": "idcustomer=7", "source": "source", "bulk" : true, "automatic" : false } //Uso el número asignado para ese Agente: {"calldate" : null, "campaign" : "nombreCampaña->", "destination": "12-345-678", "alternatives": "", "agent" : "1001", "data": "idcustomer=7", "source": "source", "bulk" : true, "automatic" : false }
Agendar llamada para marcador
Cuando calldate
es distinto de null
agenda llamada para el marcador
{"calldate" : "2015-10-11 15:00:00", "campaign" : "nombreCampaña->", "destination": "12-345-678", "alternatives": "", "agent" : "Agente1", "data": "idcustomer=7", "source": "source", "bulk" : true, "automatic" : false }
Relative URL: Integra/resources/Dialers/RemoveContact Method: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Params: campaign (Nombre de la campaña) number (Número a borrar) Result: 1
Borra llamada agendada del dialer.
Parámetros: campaña, el número, fecha desde y fecha hasta (formato YYYY-MM-DD hh:mm:ss) para poder borrar por fecha.
Relative URL: Integra/resources/Dialers/RemoveScheduleDialerCall Method: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Params: campaign (Nombre de la campaña) destination (número a borrar) from (Fecha desde a borrar) to (Fecha hasta a borrar) Result: 1
Subir Bases
La API nos da la posibilidad de subir las listas de marcadores con parámetros o con timezone para que sea utilizada la más adecuada a sus necesidades.
Subir base de llamadas
https://dominio.ucontactcloud.com/Integra/resources/Dialers/uploadbase Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: filename (Nombre archivo) fileb64 (Contenido del archivo en base64) campaign (Nombre campaña) cant (Cantidad de registros) username (Usuario que sube la base) Resultado: 1 (Async Method)
Formato del archivo
prueba1;098344484;var1=val1:var2=val2;099124484:099111111;9999;1001 campaña;númeroprincipal;parametros para formularios y flujo;alternativos separados por :; prioridad (optional);teléfono agente (optional)
https://dominio.ucontactcloud.com/Integra/resources/Dialers/uploadbasewithtimezone Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: filename (Nombre archivo) fileb64 (Contenido del archivo en base64) campaign (Nombre campaña) cant (Cantidad de registros) username (Usuario que sube la base) timezone (Zona horaria, la lista de husos se encuentra en: Timezones Habilitados en uContact) Resultado: 1 (Async Method)
Formato del archivo
prueba1;098344484;var1=val1:var2=val2;099124484:099111111;9999;1001 campaña;númeroprincipal;parametros para formularios y flujo;alternativos separados por :; prioridad (optional);teléfono agente (optional)
Información de Campañas
También puede obtener la información de las campañas de voz.
Para ver muy brevemente resumido el estado de las campañas del sistema, existe el siguiente método
https://dominio.ucontactcloud.com/Integra/resources/Supervisor/queuesummary Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Resultado: JSON
Respuesta
[ { "queue": "Power<-", "loggedIn": 10, "available": 5, "callers": 3, "holdTime": 18, "talkTime": 130, "longestHoldTime": 220, "internalActionId": "1982468278_6312", "dateReceived": "Nov 2, 2018 11:31:42 AM" }, { "queue": "test->", "loggedIn": 0, "available": 0, "callers": 0, "holdTime": 0, "talkTime": 0, "longestHoldTime": 0, "internalActionId": "1982468278_6312", "dateReceived": "Nov 2, 2018 11:31:42 AM" }, { "internalActionId": "1982468278_6312", "dateReceived": "Nov 2, 2018 11:31:42 AM" } ]
En cambio si queremos obtener toda la información de las campañas del sistema, podemos usar este otro método
https://dominio.ucontactcloud.com/Integra/resources/Supervisor/campaignstatus Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: queue (vacio) Resultado: JSON
Respuesta
{ "Power<-": { "campaign": "Power<-", "availables": 0, "notavailables": 1, "paused": 0, "busy": 0, "busypaused": 0, "totalagents": 1, "logged": 0, "onwrapup": 0, "completed": 0, "abandoned": 0, "talked": "00:00:00-0", "hold": "00:00:00-0", "abandonedlevel": "0", "totalcalls": 0, "acd": 0, "servicelevel": "0.0", "servicelevel2": "0.0", "strategy": "leastrecent", "slevelthreshold": "3", "wrapup": 0 }, "test->": { "campaign": "test->", "availables": 0, "notavailables": 0, "paused": 0, "busy": 0, "busypaused": 0, "totalagents": 0, "logged": 0, "onwrapup": 0, "completed": 0, "abandoned": 0, "talked": "00:00:00-0", "hold": "00:00:00-0", "abandonedlevel": "0", "totalcalls": 0, "acd": 0, "servicelevel": "0.0", "servicelevel2": "0.0", "strategy": "leastrecent", "slevelthreshold": "3", "wrapup": 3 } }
Para obtener la información de los agentes junto con las estadísticas de la campaña, para una campaña en específico, existe el siguiente método. Es la misma ruta que el anterior, pero se le especifica el nombre por parámetro.
Además de devolver el objeto con información de la campaña, también se devuelve el objeto de cada agente perteneciente a ella.
https://dominio.ucontactcloud.com/Integra/resources/Supervisor/campaignstatus Método: POST content-type:application/x-www-form-urlencoded; charset=UTF-8 Parámetros: queue (Ejemplo: "test->") Resultado: JSON
Respuesta
{ "test->": { "campaign": "test->", "availables": 1, "notavailables": 1, "paused": 0, "busy": 0, "busypaused": 0, "totalagents": 2, "logged": 1, "onwrapup": 0, "completed": 0, "abandoned": 0, "talked": "00:00:00-0", "hold": "00:00:00-0", "abandonedlevel": "0", "totalcalls": 0, "acd": 0, "servicelevel": "0.0", "servicelevel2": "0.0", "strategy": "fewestcalls", "slevelthreshold": "15", "wrapup": 0 }, "SIP/1010": { "queue": "test->", "location": "SIP/1010", "membership": "", "name": "Daniel", "penalty": 0, "callsTaken": 0, "lastCall": 0, "status": 5, "paused": false, "stateinterface": "SIP/1010", "incall": 0, "pausedreason": "[]", "internalActionId": "1982468278_8979", "dateReceived": "Nov 2, 2018 11:36:11 AM", "server": "00:10:12" }, "SIP/1001": { "queue": "test->", "location": "SIP/1001", "membership": "", "name": "Santiago", "penalty": 0, "callsTaken": 0, "lastCall": 0, "status": 1, "paused": false, "stateinterface": "SIP/1001", "incall": 0, "pausedreason": "", "internalActionId": "1982468278_8979", "dateReceived": "Nov 2, 2018 11:26:45 AM", "server": "00:19:39" } }
Códigos de estado de los agentes
UNKNOWN = 0 NOT_INUSE = 1 INUSE = 2 BUSY = 3 INVALID = 4 UNAVAILABLE = 5 RINGING = 6 RINGINUSE = 7 ONHOLD = 8 WRAPUP = 9
Colección de postman con algunas de las llamadas.
- No labels