N|Solid

Notification Service

Descrição

Este serviço tem o objetivo de notificar um sistema externo toda vez que algum Operador/Ramal atender uma ligação em uma Fila de Atendimento.

Caso de Uso

Imagine que você deseja fazer um popup de tela com os dados do Cliente para o Operador que atendeu a ligação.

No momento do atendimento o serviço irá identificar o Operador e enviará uma requisição com os dados da chamada para uma URL.

Outro caso é quando um Cliente abandona a espera na Fila de Atendimento e você precisa saber disto para fazer alguma coisa, como ligar de volta para ele.

No exato momento que ele abandonar a espera, o Serviço de Notificação irá enviar para seu Webhook os dados da ligação.

Eventos de Notificação

Os eventos de notificação são:

  • Atendimento da Ligação por um Operador
  • Entrada de uma ligação em uma fila de espera
  • Abandono de uma ligação de uma Fila de Espera

Notificação

A notificação será enviada em método POST (default) , RestFul com um JSON no BODY da Request.

O conteúdo do corpo será este:

{
    "eventdate":"2016-10-25T14:04:36-02:00",
    "agent":"8019",
    "from":"4839548000",
    "fromname":"Ramal 8023",
    "holdtime":"4",
    "ringtime":"3",
    "destination":"8019",
    "method":"POST"
}
1
2
3
4
5
6
7
8
9
10

Onde:

Campo Descrição
eventdate Data e hora do evento
agent Operador/Agente que atendeu a chamada
from Originador da chamada.
fromname Quando sabemos o nome do chamador, o usamos, se não o arquivado será usado.
holdtime O tempo de espera que o chamador aguarda a resposta.
ringtime O tempo de toque antes de atender a chamada.
destination O endpoint que a chamada foi atendida.
method O tipo de método que enviado o webhook.

No Header da request enviaremos:

accept: application/json
content-type: application/json
1
2

Habilitando a Notificação

Para habilitar a notificação de eventos basta acessar a Interface Administrativa do Q-Manager e na opção "Integrações" clique no botão Adicionar Integração.

Escolha a Integração do Tipo Notificação e complete com os dados do seu Serviço.

Você pode alterar os campos que a API envia para o seu serviço, usando a seção Mapeamento.

Campos adicionais também podem ser enviados, como um token ou qualquer outro parâmetro que seu serviço possa precisar, usando a seção Campos.

Você pode usar valores dinâmicos da seção Campos, para isso use {}, como por exemplo {from} ou {agent}.

Você pode ainda combinar valores com textos, como por exemplo:

Nome do Campo: text
Valor do Campo:
O Cliente {from} abandonou a fila {queue} as {eventdate}
1
2
3

Na seção Headers você pode customizar os cabeçalhos da request, enviando por exemplo um Header Authorization.

N|Solid

Exemplo de Server side code

PHP + Apache

Este código em php recebe as requisições do Notificador e registre em um arquivo de log chamado http.log. Você pode adaptar para sua regra de negócio.

<?php
$method = $_SERVER['REQUEST_METHOD'];
$client = $_SERVER['REMOTE_ADDR'];
$query = $_SERVER['QUERY_STRING'];
$json = file_get_contents('php://input');
$obj = json_decode($json);
 
// file_put_contents("http.log",$json . "\n", FILE_APPEND);
// your complete JSON Object is in $obj
// you can do everything accessing the element directly, like this $obj->from , $obj->destination , $obj->agent , and etc.
 
// saving in a log:
// file_put_contents("http.log","from: {$obj->from}" . "\n", FILE_APPEND);
// file_put_contents("http.log","destination: {$obj->destination}" . "\n", FILE_APPEND);
// file_put_contents("http.log","agent: {$obj->agent}" . "\n", FILE_APPEND);
// here an exemplo testing the complete object and saving it in a log file
/*
if(is_object($obj)){
        foreach($obj as $key => $value){
                if(is_object($value)){
                        foreach($value as $skey => $svalue){
                                file_put_contents("http.log","object -> object: {$key} -> {$skey} -> {$svalue}\n", FILE_APPEND);
                        }
                }elseif(is_array($value)){
                        foreach($value[0] as $skey => $svalue){
                                file_put_contents("http.log","object -> array: {$key} -> {$skey} -> {$svalue}\n", FILE_APPEND);
                        }
                }else{
                        file_put_contents("http.log","object array: {$key} -> {$value}\n", FILE_APPEND);
                }
        }
}
*/
// returning Ok in a JSON object
$return = json_encode(array("status" => "Ok"));
echo $return;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36