Ajuda › Conectar o PABX do seu provedor
Conectar o PABX do seu provedor
Cada empresa usa o próprio PABX. O NexaChat se registra nele como ramal WebRTC e escuta os eventos de chamada para mostrar quem está ligando e registrar tudo. Tudo é configurado em Telefonia › PABX da empresa (administradores).
Como funciona (e por que é seguro)#
- O navegador do atendente fala só com o seu domínio do NexaChat (
wss://seu-dominio/sip/<empresa>). O servidor do NexaChat repassa ao endereço WSS que você cadastrou. - A ponte só aceita usuário logado e da própria empresa, só conecta no destino cadastrado e bloqueia endereços internos (rede local, localhost, metadados de nuvem). Isso significa que o PABX precisa ser acessível pela internet.
- A ponte confere cada mensagem: ninguém se registra como outro ramal, e “ligar para fora” e “transferir” respeitam as permissões e o antifraude.
- O áudio (RTP/SRTP) vai direto entre o navegador e o PABX (ICE). Por isso é importante ter um servidor TURN.
- Senhas de ramal, AMI e TURN ficam cifradas no servidor. A senha do ramal só é entregue ao navegador do próprio atendente.
Checklist do que o PABX precisa#
- WebRTC/WSS ativo (WebSocket seguro, geralmente na porta 8089/TCP).
- Certificado TLS válido (autoridade pública, com o nome do domínio do PABX). Certificado autoassinado não funciona.
- Ramais com WebRTC e a mesma senha cadastrada no NexaChat.
- TURN (recomendado), por exemplo o
coturn. - Firewall: libere o WSS (ex.: 8089/TCP) para a internet (ou para o IP do NexaChat, no caso do WSS) e a faixa RTP (ex.: 10000–20000/UDP) para os atendentes.
- Para eventos: um usuário AMI de permissão mínima ou o webhook assinado.
Depois de preencher, use os botões Testar conexão com o PABX, Testar ramal (em Ramais) e Testar AMI. As mensagens explicam o que falta (certificado, senha, porta, DNS…).
Passo a passo — Asterisk (PJSIP)#
No pjsip.conf:
[transport-wss]
type=transport
protocol=wss
bind=0.0.0.0
[1001]
type=endpoint
context=from-internal
disallow=all
allow=opus,ulaw,alaw
webrtc=yes
auth=1001
aors=1001
[1001]
type=auth
auth_type=userpass
username=1001
password=SENHA-FORTE
[1001]
type=aor
max_contacts=5
remove_existing=yes
No http.conf (certificado válido do domínio do PABX):
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/fullchain.pem
tlsprivatekey=/etc/asterisk/keys/privkey.pem
No NexaChat: Endereço WSS = wss://pabx.seuprovedor.com.br:8089/ws e Domínio SIP = o domínio do ramal (o mesmo realm do PABX).
Em versões do Asterisk sem a opçãowebrtc=yes, useuse_avpf=yes,media_encryption=dtls,dtls_auto_generate_cert=yes,ice_support=yes,rtcp_mux=yes,media_use_received_transport=yesedtls_verify=fingerprint/dtls_setup=actpassno endpoint.
Issabel e FreePBX#
Os nomes dos menus mudam entre versões; confira na sua instalação.
- Certificado válido: gere um certificado (por exemplo Let’s Encrypt) em Admin › Certificate Manager (FreePBX) e associe-o ao servidor web/HTTPS do PABX.
- HTTP/WSS: em Settings › Asterisk SIP Settings (FreePBX 15/16, aba Chan PJSIP), ative o transporte WSS (porta 8089) e selecione o certificado.
- Ramal: crie um ramal PJSIP e, em Avançado, ative AVPF, ICE Support, RTCP Mux e Media Encryption = DTLS (ou use o modelo “WebRTC” do módulo, quando existir). Anote o número e a senha (secret).
- Issabel 4 (mais antigo) pode exigir ajustes manuais em arquivos
*_custom.confe certificado instalado à mão. - No NexaChat, cadastre o ramal em Telefonia › Ramais com a mesma senha.
PABX em nuvem#
Provedores de PABX em nuvem costumam oferecer ramal WebRTC/WSS com endereço e senha prontos: copie o endereço WSS, o domínio SIP e crie o ramal. Para os eventos, use o webhook (abaixo) se o provedor permitir enviar notificações de chamada.
Eventos: AMI (Asterisk / Issabel / FreePBX)#
Crie no manager.conf um usuário de permissão mínima, só para o IP do NexaChat:
[general]
enabled=yes
port=5038
bindaddr=0.0.0.0
[nexachat]
secret=OUTRA-SENHA-FORTE
deny=0.0.0.0/0.0.0.0
permit=IP_DO_SERVIDOR_NEXACHAT/255.255.255.255
read=call,cdr,agent
write=originate
read=call,cdr,agentdá os eventos de chamada.write=originatesó é necessário para “clicar para ligar” no telefone físico (toca o ramal e depois disca para o cliente).- No FreePBX: Settings › Asterisk Manager Users.
- Libere a porta 5038/TCP só para o IP do NexaChat. O AMI sem TLS trafega a senha sem cifra: prefira TLS ou uma VPN.
- Com tudo salvo, o painel mostra conectado. Eventos reconhecidos: entrando, em fila, tocando em qual ramal, atendida, transferida, encerrada, perdida, com duração e ID da gravação.
Eventos: webhook assinado (PABX em nuvem)#
Em Telefonia › PABX, gere o segredo do webhook. O seu PABX/serviço envia um POST JSON para a URL mostrada:
BODY='{"event":"answered","call_id":"123","direction":"inbound","from":"11988887777","extension":"1001"}'
TS=$(date +%s)
SIG="sha256=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SEGREDO" -hex | sed 's/^.* //')"
curl -X POST "$URL" -H "Content-Type: application/json" \
-H "X-Nexa-Timestamp: $TS" -H "X-Nexa-Signature: $SIG" -d "$BODY"
- Eventos aceitos:
incoming,queued,ringing,answered,transferred,ended,missed,recording(tambémoutgoing). Campos:call_id,direction(inbound/outbound),from,to,extension,queue,duration,recording_id. - Pode mandar vários de uma vez:
{"events":[…]}(até 50). - Mensagens com assinatura errada, carimbo de tempo com mais de 5 minutos ou repetidas são recusadas.
Gravação e LGPD#
O NexaChat não grava no navegador. Se o PABX grava, informe o link modelo (https://pabx/gravacoes/{id}) e o histórico mostra o link. Avise o cliente da gravação (no próprio PABX/URA) e defina por quanto tempo guarda. A tela de configuração pede a confirmação do aviso de LGPD antes de conectar o AMI.
Problemas comuns#
- “Certificado do PABX inválido”: use um certificado público válido para o nome do domínio.
- “Não encontramos o endereço (DNS)”: confira o nome do PABX.
- “Não foi possível conectar”: porta fechada, firewall ou PABX fora do ar.
- “O PABX recusou… (403)”: senha do ramal diferente da cadastrada, ou o ramal não permite WebRTC/WSS.
- Liga mas sem áudio: falta TURN ou o RTP está bloqueado no firewall.
- “Endereço não permitido”: o NexaChat não conecta em endereços internos/privados por segurança; use um endereço público.