# Recebendo eventos do Websocket do Q-Manager
É possível receber eventos que são disponibilizado pelo Q-Manager por meio de websocket, assim é possível desenvolver dashboard específicos para cada ambiente de trabalho.
# Conexão
Para receber eventos por socket é necessário se conectar ao socket server informando o IP do servidor e a porta 5000. Exemplo:
192.168.10.252:5000
# Funcionamento
O socket client pode tanto enviar como receber eventos.
Quando se deseja enviar um evento é necessário efetuar uma função chamada de emit.
Exemplo:
socket.emit('connect'). Neste caso o socket client solicitou ao server a conexão com o socket por meio do connect.
Quando se deseja fica observando o evento é necessário efetuar a função on.
Exemplo:
socket.on('reconnect'). Neste caso quando o socket server enviar o evento reconnect os clients receberão caso esteja "ouvindo" este evento.
# Eventos
# connect
Evento inicial para se conectar com o socket server.
# reconnect
Evento gerado pelo server quando se perde a primeira conexão e há a opção de reconexão automática.
# connect_error
Quando há algum erro na conexão do socket server e client.
# queuestatus
Evento inicial das filas de atendimento
Response:
{"Suporte":{
"params":[{
"name":"Suporte",
"strategy":"leastrecent",
"abandoned":248,
"answered":1012,
"calls":0
}],
"members":[{
"name":"Uriel Rodrigues",
"agent":"1019",
"endpoint":"SIP/2019",
"calls":"7",
"status":"1",
"paused":"0",
"membertype":"dynamic",
"priority":"0",
"id":"2019"}
]}}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Nome da Fila.
strategy: Estratégia de distribuição da fila.
abandoned: Número de chamadas abandonadas desde que o asterisk começou a rodar.
answered: Número de chamadas atendidas desde que o asterisk começou a rodar.
calls: Quantidade de chamadas aguardando no momento.
members: Membros da fila que pode ser estáticos(ramais fixos) ou dinâmicos(operadores).
name: Nome do operador.
agent: Código do operador.
endpoint: Ramal do operador.
calls: Chamadas atendidas pelo operador.
status: Status do operador no momento. Veja os códigos de status no fim deste documento.
paused: Caso esteja 1 o operador está em pausa no momento. O valor 0 significa que o mesmo está disponível.
membertype: Tipo de membro.
priority: Prioridade de atendimento na fila.
id: Ramal do operador sem a tecnologia.
# peerstatus
Verifica quando algum ramal perde autenticação. É chamado também quando o ramal consegue autenticação.
{
"event":"PeerStatus",
"privilege":"system,all",
"channeltype":"SIP",
"peer":"SIP/8013",
"peerstatus":"Registered",
"address":"192.168.8.110:5060"
}
2
3
4
5
6
7
8
event: Nome do evento.
privilege: Privilégio do ramal.
channeltype: Tecnologia do ramal
peer: Código do Ramal
peerstatus: Situação do ramal. Poderá ser Registered(Registrado), Unregistered(Não registrado), Unknown(Desconhecido) ou Unreachable(Inacessível)
address: IP do ramal.
# queueevent
Eventos relacionados a fila:
- enterqueue - Ligação entrou na fila.
- queueanswer - Ligação atendida pela fila.
- queueabandon - Ligação saiu da fila por abando.
- queuetimeout - Ligação saiu da fila por passa o tempo limite.
- queuehangup - Ligação finalizada na fila.
Response Enterqueue:
{
"collection":"queue",
"eventtype":"call",
"uniqueid":"1519668420.16268",
"callid":"201802261807018026",
"queue":"Suporte",
"from":"8026",
"calldate":"2018-02-26T15:07:01.317Z",
"event":"enterqueue",
"context":"default",
"exten":"8001",
"callflow":[]
}
2
3
4
5
6
7
8
9
10
11
12
13
Response Queueanswer(Mesmos dados do evento enterqueue)
{
"answerdate":"2018-02-26T15:07:12.243Z",
"operator":{
"endpoint":"SIP/2019",
"eventdate":"2018-02-26T15:07:12.243Z",
"name":"Uriel Rodrigues",
"agent":"1019",
"ringtime":"10"
},
"validate":true
}
2
3
4
5
6
7
8
9
10
11
uniqueid: Código único da chamada
callid: Código da chamada.
queue: Nome da fila
from: Número de origem
calldate: Data da ligação.
event: Nome do evento.
context: Contexto do asterisk.
exten: Extensão da chamada
callflow: Fluxo da chamada.
answerdate: Data do atendimento por um operador.
operator: Dados do operador como nome, ramal, código e tempo de ring.
# state-ringing
Quando a ligação está chamando no operador.
Response:
{"uniqueid":"1519670854.16292",
"linkedid":"1519670852.16291",
"agent":"1030",
"name":"Tiago Zimmermann",
"endpoint":"SIP/8026",
"queues":{
"Developer":{
"pause":"0",
"state":"off",
"penalty":"0"
},
},
"state":"ringing",
"event":{
"type":"call",
"content":{"type":"incoming"}
}}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type: Tipo de chamada. Poderá ser incoming(chamada de entrada) ou outgoing(chamada de saída).
# state-answer
Quando a ligação é atendida pelo operador.
Response:
{"uniqueid":"1519671062.16294",
"linkedid":"1519671061.16293",
"agent":"1030",
"name":"Tiago Zimmermann",
"endpoint":"SIP/8026",
"queues":{"Developer":{"pause":"0","state":"off","penalty":"0"}},
"state":"answer",
"event":{"type":"call","content":{"type":"incoming"}},"from":"2026"}
2
3
4
5
6
7
8
# state-hangup
Quando a ligação é finalizada. IMPORTANTE: Mesmo response do evento state-answer.
# agentlogin
Quado o operador efetua login.
Response:
{"eventtype":"feature",
"action":"login","collection":"agents",
"queue":{"Developer":{"pause":"0","state":"off","penalty":"0"}},
"operator":{"name":"Tiago Zimmermann","agent":"1030",
"endpoint":"SIP/8026",
"eventdate":"2018-02-26T16:00:33.903Z"}}
2
3
4
5
6
action: Ação efetuada.
# agentlogoffqueue
Quando o operador é retirado da fila.
Response:
{"eventtype":"feature",
"action":"logoffqueue","collection":"agents",
"queue":{"Developer":{}},
"operator":{"name":"Tiago Zimmermann","agent":"1030",
"endpoint":"SIP/8026","eventdate":"2018-02-26T16:01:20.915Z"}
}
2
3
4
5
6
7
# agentlogoff
Quando o operador é deslogado.
Response:
{"eventtype":"feature",
"action":"logoff","collection":"agents",
"queue":{"Developer":{"action":"logoff"},
"status":{"action":"logoff"},
"pause":{"action":"logoff"}},
"operator":{"name":"Tiago Zimmermann","agent":"1030",
"endpoint":"","eventdate":"2018-02-26T16:04:48.335Z"}
}
2
3
4
5
6
7
8
9
# agentpause
Quando o operador efetua pausa.
Response:
{"eventtype":"feature",
"action":"pause","collection":"agents",
"queue":{"Developer":{},
"pause":{}},
"operator":{"name":"Tiago Zimmermann","agent":"1030",
"endpoint":"SIP/8026",
"eventdate":"2018-02-26T16:02:26.689Z",
"pause_desc":"Cafe"}
}
2
3
4
5
6
7
8
9
10
pause_desc: Nome da pausa.
# agentunpause
Quando o operador sai da pausa.
Response:
{"eventtype":"feature",
"action":"unpause","collection":"agents",
"queue":{"Developer":{},"pause":{}},
"operator":{"name":"Tiago Zimmermann",
"agent":"1030","endpoint":"SIP/8026",
"eventdate":"2018-02-26T16:03:40.585Z"}
}
2
3
4
5
6
7
# Códigos de status
Código | Operador |
---|---|
1 | Operador livre |
2 ou 3 | Operador ocupado |
6 | Operador ringando |
Demais códigos | Operador não autenticado |
# Exemplo de socket client
console.log("Websocket client");
var io = require('socket.io-client');
var socket = io.connect('http://IP_DO_SERVIDOR:5000', {reconnect: true});
// ouvindo o evento de conexão com o socket server
socket.on('connect', function(data) {
console.log("Connected with socket itc");
// emite o evento de consulta de status das filas
socket.emit('queuestatus');
});
// ouvindo o evento de status da fila chamado na parte anterior
socket.on('queuestatus', function(data) {
console.log('Resultado do evento queuestatus-> ' + JSON.stringify(data));
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15