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:
- Obter Let's Encrypt para o domínio do PBX
- Copiar para
/etc/asterisk/keys/: fullchain.pem→asterisk.pemprivkey.pem→asterisk.keyasterisk -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)¶
- SQL Server
- Issabel (+ AMI + WSS)
- LorentzCTI (+ API web agent — futuro)
- Supervisor
- 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 |