Ir para o conteúdo

Issabel WebRTC / WSS (Lorentz Webphone)

Habilita softphone no navegador via SIP sobre WebSocket (wss://IP:8089/ws), substituindo o SIP desktop do LorentzCliente para operação em nuvem.

Portas necessárias

Porta Protocolo Serviço Expor?
8089 TCP Asterisk WSS (signaling WebRTC) Sim
10000–10100 UDP RTP / mídia WebRTC Sim (já usado pelo Issabel)
443 TCP Issabel HTTPS (painel) Sim
5060 UDP/TCP SIP clássico (troncos/ramais legado) Sim

Não expor: 5038 (AMI), 8088 (HTTP Asterisk interno).

Pré-requisitos

  • Issabel rodando (issabel-prod, hostnet)
  • ISSABEL_SIP_EXTERNAL_ADDRESS = IP público da VPS no .env
  • Módulos Asterisk: res_http_websocket, res_pjsip

Deploy automatizado

cd ~/omnichannel/lorentz-vps-stack
cp .env.example .env   # ajustar ISSABEL_SIP_EXTERNAL_ADDRESS

# Firewall AWS
./scripts/open-aws-port-8089.sh
# ou restrito: ./scripts/open-aws-port-8089.sh 203.0.113.10/32

# Config Asterisk + ramal WebRTC (ex.: 1001)
./scripts/configure-issabel-wss.sh --extension 1001 --password SenhaForte1001

O script: 1. Gera certificado TLS em /etc/asterisk/keys/ (se ausente) 2. Aplica http_custom.conf, pjsip_transport_custom.conf, endpoint WebRTC 3. Habilita ICE/STUN em rtp_custom.conf 4. Recarrega módulos HTTP WebSocket e PJSIP

Templates

Arquivo Destino no container
config/templates/asterisk/http_custom.conf.template /etc/asterisk/http_custom.conf
config/templates/asterisk/pjsip_transport_custom.conf.template /etc/asterisk/pjsip_transport_custom.conf
config/templates/asterisk/pjsip.endpoint.webrtc.conf.template /etc/asterisk/pjsip.endpoint.webrtc.conf

Configuração Softphone 008

Arquivo JSON servido ao webphone (ver lorentz-webphone/packages/008/web/cfgLorentz008.json ou http://IP:8081/cfgLorentz008.json no container):

{
  "sipUri": "sip:1001@SEU_IP_PUBLICO",
  "sipPassword": "SenhaForte1001",
  "sipUser": "1001",
  "wsUri": "wss://SEU_IP_PUBLICO:8089/ws",
  "lorentz": {
    "enabled": true,
    "apiBaseUrl": "https://supervisor:8080/api/v1/agent",
    "token": "JWT_DO_AGENTE"
  }
}

Validação

# WSS escutando
ss -tlnp | grep 8089

# Status Asterisk
docker exec issabel-prod asterisk -rx "http show status"
docker exec issabel-prod asterisk -rx "pjsip show transports"

# Handshake (deve retornar upgrade WebSocket ou 400, não connection refused)
curl -vk "https://${ISSABEL_SIP_EXTERNAL_ADDRESS}:8089/ws"

Certificado TLS em produção

Certificado autoassinado exige exceção no browser. Para produção:

  1. Obter Let's Encrypt para o domínio do PBX
  2. Copiar para /etc/asterisk/keys/:
  3. fullchain.pemasterisk.pem
  4. privkey.pemasterisk.key
  5. asterisk -rx "module reload res_http_websocket.so"

Integração com Lorentz CTI

O WSS cobre apenas a voz. Pausa, qualificação e consulta de contato usam a API Web Agent do Supervisor (ver supervisor/api/docs/WEB_AGENT_API.md e lorentz-webphone/docs/integracao-lorentz.md).

Ordem de subida (atualizada)

  1. SQL Server
  2. Issabel (+ AMI + WSS)
  3. LorentzCTI (+ API web agent — futuro)
  4. Supervisor
  5. Softphone 008 (yarn build-web → Nginx)

Troubleshooting

Sintoma Causa provável Ação
Connection refused em 8089 Firewall ou HTTP TLS desabilitado Abrir SG + configure-issabel-wss.sh
Registro SIP falha Endpoint/senha incorretos pjsip show endpoint 1001
Sem áudio RTP bloqueado Liberar UDP 10000–10100
Certificado inválido TLS autoassinado Cert válido ou exceção no browser
One-way audio NAT/externip errado Conferir ISSABEL_SIP_EXTERNAL_ADDRESS