Ajuda › Identificação de clientes na URA
Identificação de clientes na URA
Seu PABX pode usar o NexaChat como autenticador: ao atender, a URA consulta quem está ligando e decide o caminho (por exemplo, mandar o cliente inadimplente para o Financeiro ou avisar de uma manutenção na região).
1. Crie um token com escopo próprio#
Em Integrações › API, crie um token com a permissão Somente telefonia (URA). Esse token só consulta a identificação: não lê contatos, nem atendimentos, nem nada além disso. Guarde o token no PABX, não em páginas da internet.
2. Consulte#
GET /api/v1/telephony/identify?phone=11988887777
GET /api/v1/telephony/identify?document=12345678909 (CPF digitado na URA, só números)
Authorization: Bearer nxk_...
Resposta (enxuta de propósito):
{"data":{"found":true,"first_name":"Maria","contract_status":"Ativo",
"blocked":false,"overdue":true,"maintenance":false,
"suggested_queue":{"id":"…","name":"Financeiro"}}}
- Nunca vêm CPF, endereço, e-mail, valores ou o nome completo.
suggested_queue: Financeiro se estiver bloqueado ou com fatura vencida; Suporte se houver manutenção na região; senão, a fila padrão.- Limite de 120 consultas por minuto por token; cada consulta fica na auditoria (sem o número completo).
- Documentação completa: /docs/api.
Exemplo para Asterisk (dialplan)#
Requer curl e jq no servidor do PABX. Ajuste o domínio e o token.
[nexachat-identifica]
exten => s,1,NoOp(Identificando ${CALLERID(num)})
same => n,Set(NEXA=https://SEU-DOMINIO/api/v1/telephony/identify)
same => n,Set(RESP=${SHELL(curl -s -m 3 -H "Authorization: Bearer SEU_TOKEN" "${NEXA}?phone=${CALLERID(num)}")})
same => n,Set(FOUND=${SHELL(echo '${RESP}' | jq -r '.data.found // false')})
same => n,GotoIf($["${FOUND}" = "true"]?achou:naoachou)
same => n(achou),Set(NOME=${SHELL(echo '${RESP}' | jq -r '.data.first_name')})
same => n,Set(DEVE=${SHELL(echo '${RESP}' | jq -r '.data.overdue')})
same => n,Set(MANUT=${SHELL(echo '${RESP}' | jq -r '.data.maintenance')})
same => n,GotoIf($["${MANUT}" = "true"]?manut)
same => n,GotoIf($["${DEVE}" = "true"]?financeiro)
same => n,Goto(from-internal,600,1) ; fila padrão
same => n(manut),Playback(custom/aviso-manutencao)
same => n,Goto(from-internal,600,1)
same => n(financeiro),Goto(from-internal,601,1) ; fila do financeiro
same => n(naoachou),Read(CPF,custom/digite-cpf,11,,2,10)
same => n,Set(RESP=${SHELL(curl -s -m 3 -H "Authorization: Bearer SEU_TOKEN" "${NEXA}?document=${CPF}")})
same => n,GotoIf($["${SHELL(echo '${RESP}' | jq -r '.data.found // false')}" = "true"]?achou)
same => n,Goto(from-internal,600,1)
Sempre trate falha da consulta (sem internet, tempo esgotado) mandando o cliente para a fila padrão: a URA não deve travar se o NexaChat estiver indisponível.
Issabel e FreePBX#
Coloque o contexto acima em extensions_custom.conf (FreePBX/Issabel) e aponte uma Custom Destination (nexachat-identifica,s,1) a partir da sua URA/IVR ou da rota de entrada. Crie as filas de destino (600, 601…) conforme o seu PABX e ajuste os números no exemplo.
Segurança#
- O CPF digitado na URA só vai ao NexaChat por HTTPS e não é gravado: ele serve para localizar o cadastro.
- Revogue o token em Integrações › API se suspeitar de vazamento.