Ir para o conteúdo

LorentzCTI — Servidor CTI

Planta de deploy

Planta Este documento Projeto
A — Issabel/Asterisk (stack VPS) ✅ Sim server/LorentzCTI → container lorentz-cti
B — Intelbras Impacta CSTA ❌ Ver 21-plano-deploy-impacta-csta.md server/LorentzCTI.Impacta → systemd isolado

Visão geral

LorentzCTI (server/LorentzCTI) é o servidor CTI central (.NET 9):

  • Integração PBX via AMI (Asterisk/Issabel)
  • TCP para agentes desktop (8000)
  • TCP Concentre/Phoenix para Supervisor (3000)
  • TCP URA (4000)
  • Persistência SQL Server

Documentação técnica: server/LorentzCTI/docs/documentacao-tecnica.md

Deploy via Docker (VPS — net9.0.zip)

Na VPS, o container usa binários em resources/lorentz-cti-publish/ (extraídos de net9.0.zip):

cd ~/omnichannel/lorentz-vps-stack
./scripts/extract-lorentz-cti-publish.sh resources/net9.0.zip
./scripts/render-config.sh
docker compose up -d --build lorentz-cti
docker compose logs -f lorentz-cti

Gerar o zip no PC de desenvolvimento:

./scripts/build-lorentz-cti-zip.sh

Build a partir do código-fonte (opcional):

docker compose -f docker-compose.yml -f docker-compose.source.yml up -d --build lorentz-cti

Build manual (sem Compose)

No PC com .NET SDK 9:

cd server/LorentzCTI
dotnet publish LorentzCTI.vbproj -c Release -o ./publish /p:UseAppHost=false
cp ~/lorentz-vps-stack/config/runtime/LorentzCTI.ini ./publish/
cd publish && dotnet LorentzCTI.dll

Configuração — LorentzCTI.ini

Arquivo montado em /app/LorentzCTI.ini no container. Template: config/templates/LorentzCTI.ini.template.

Seção crítica [Parametros]

Chave Descrição Exemplo VPS
ServidorSQL Host SQL sqlserver
BancoSQL Nome BD LorentzCTI
UsuarioSQL / SenhaSQL Credenciais sa / senha .env
PhoenixPortaTCP Agentes desktop 8000
Concentre_Porta Supervisor / Phoenix 3000
URA_Porta URA XML 4000
CTI_Impacta_Ip IP AMI PBX host.docker.internal
CTI_Impacta_Porta Porta AMI 5038
Modelo Driver central asterisk
Username / Secret AMI user/pass admin / amp111
MonitorApiEnabled API web MonitorCTI 1
MonitorApiPort HTTP monitor 8090
MonitorApiKey Chave header X-Monitor-Api-Key ver .env
MonitorApiSseIntervalMs Intervalo SSE (ms) 2000

Nota legado: clsParametro.vb pode usar senha SQL hardcoded em algumas builds — valide conexão após deploy.

Monitor API (substituto web do MonitorCTI)

O MonitorCTI desktop (Windows) não roda no stack Linux. O LorentzCTI expõe os mesmos dados via HTTP:

Endpoint Função
GET /api/monitor/snapshot Agentes + dispositivos + fila
GET /api/monitor/stream SSE tempo real (~2s)
GET /api/monitor/parameters Parâmetros INI (senhas mascaradas)
GET /api/monitor/agents Somente agentes
GET /api/monitor/devices Somente dispositivos
GET /health Health check (sem auth)
  • Doc técnica: server/LorentzCTI/docs/api-monitor.md
  • Dashboard: Portal Orbitall → CTI (/cti/)
  • Proxy nginx: /api/cti/monitor/*lorentz-cti:8090/api/monitor/*
  • Config Portal: config.jsonctiMonitor.apiKey, useSse: true

Após alterar o código-fonte, regenere o zip e reinicie o container:

./scripts/build-lorentz-cti-zip.sh   # no repo omnichannel
./scripts/extract-lorentz-cti-publish.sh resources/net9.0.zip
./scripts/render-config.sh
docker compose up -d --build lorentz-cti lorentz-portal

Teste:

curl -H "X-Monitor-Api-Key: $LORENTZ_CTI_MONITOR_API_KEY" http://localhost:8090/api/monitor/snapshot
curl -N -H "X-Monitor-Api-Key: $LORENTZ_CTI_MONITOR_API_KEY" http://localhost:8090/api/monitor/stream
curl -H "X-Monitor-Api-Key: $LORENTZ_CTI_MONITOR_API_KEY" http://localhost:8090/api/monitor/parameters

Planta B (Impacta CSTA)

Não usar este container para central Intelbras. Plano completo: 21-plano-deploy-impacta-csta.md.

Portas publicadas

Porta Protocolo Consumidor
8000 TCP Clientes agente CTI
3000 TCP Supervisor (EW_PHOENIX_PORTA)
4000 TCP Lorentz URA
8000 UDP MonitorCTI (legado desktop)
8090 HTTP Monitor API + dashboard /cti/

Healthcheck

docker exec lorentz-cti bash -c 'timeout 2 bash -c "</dev/tcp/127.0.0.1/3000"'
docker compose ps lorentz-cti

Logs

docker logs lorentz-cti -f
docker exec lorentz-cti ls -la /app/*.log 2>/dev/null

Logs legados: Agente*.log, LogAsterisk*.log, LogURA*.log

Deploy nativo (systemd) — alternativa

Ver resources/systemd/LorentzCTI.service.example:

sudo mkdir -p /var/lorentz
sudo cp publish/* /var/lorentz/
sudo cp config/runtime/LorentzCTI.ini /var/lorentz/
sudo cp resources/systemd/LorentzCTI.service /etc/systemd/system/
sudo systemctl enable --now LorentzCTI

Integração com Issabel

  1. Issabel rodando (hostnet, AMI 5038)
  2. CTI_Impacta_Ip=host.docker.internal no INI
  3. Credenciais AMI idênticas no Issabel e no INI
  4. Teste AMI:
docker exec issabel-prod asterisk -rx "manager show connected"

Próximo passo

08-supervisor-web.md