--- name: Ligação automática cobrança VoIP description: Sistema completo de ligação automática para cobrança via Asterisk/Magnus com TTS Edge - integrado ao CronCobrancaAutomatica type: project --- ## Status: EM PRODUÇÃO (cron ativo, aguardando primeiro ciclo automático 26/03/2026 9h) ### 3 Tipos de ligação APROVADOS: **Tipo 1 - Lembrete (vence hoje):** - Voz: pt-BR-FranciscaNeural (feminina, amigável) - Tom: "Bom dia, {nome}! Tudo bem? ...lembrar que seu boleto vence hoje..." - Frequência: 1x no dia do vencimento - Só para boletos com status `gerado`/`pendente` que vencem HOJE **Tipo 2 - Cobrança (vencido sem protesto):** - Voz: pt-BR-FranciscaNeural (feminina, séria) - Tom: "Precisamos falar com o responsável pela empresa {nome}... boleto vencido... para evitar inclusão em protesto..." - Frequência: 2x/dia, a cada 2 dias após vencimento **Tipo 3 - Protestado (vencido + protestado):** - Voz: pt-BR-FranciscaNeural (feminina, urgente) - Tom: "Esta ligação é referente a um débito em nome de {nome}... protestado em cartório..." - Frequência: 2x/dia, diariamente - Menciona boletos a vencer também ### Pronúncias aprovadas: - GoTechBR: "Gô Téqui Bê Érri" - WhatsApp: "uatsápi" ### Saudação dinâmica: - < 12h: "Bom dia" - 12h-18h: "Boa tarde" - >= 18h: "Boa noite" ### Nome do cliente: - Usa campo `responsavel` da tabela `clientes` - Fallback: `nome` (razão social da empresa) ### Regras de frequência e exclusão: - Horário: 9h às 20h (fora disso bloqueia) - Não liga para: pagos, cancelados, baixados - Não liga para boletos com `protesto_removido = 1` - Tipo 1: máximo 1x no dia do vencimento - Tipo 2: máximo 2x/dia, mínimo 2 dias entre ciclos - Tipo 3: máximo 2x/dia, diariamente - Tabela de controle: `cobranca_ligacao_log` ### Cron no cPanel: ``` */30 9-19 * * * wget -q -O /dev/null https://sistema.gotechbr.com.br/cron/cobranca/ligacoes?token=85f112c18972c700c4583b2d71ada187d05b18c15c1b4ae3dd5ee431895c3e8e ``` ### IVR (menu da ligação): - Tecla 1: Envia boletos por WhatsApp via AGI → endpoint `cron/cobranca/enviar-boleto-whatsapp` - Tecla 2: Transfere para ramais GoTech (SIP/35003516 & SIP/1002 & SIP/1001) - Timeout/tecla inválida: repete a mensagem 1x e desliga ### WhatsApp ao teclar 1: - Mensagem com lista separada: BOLETOS EM ATRASO (valores atualizados: multa 2% + juros 0.033%/dia + taxa cartório R$80) e BOLETOS A VENCER - Boleto protestado: orientação PIX (CNPJ 28.347.294/0001-41), sem PDF - Boleto a vencer: envia PDF do Sicoob - PDF busca: local primeiro (`boleto_{id}_{nn}.pdf`), depois API Sicoob via `buscarSegundaViaDireta()` - DDD > 30: remove 9 extra (tratado no WhatsApp controller) ### Arquitetura: **Servidor Magnus VoIP (69.197.165.194):** - API Python: `/home/customer/cobranca_api.py` porta 8880 (nohup, NÃO PM2) - Aceita POST `/cobranca/ligar` com JSON (token, nome, telefone, tipo, vencidos, a_vencer, vence_hoje) - Gera áudio TTS dinâmico via Edge TTS + Sox - Cria call file no Asterisk spool - Sudoers configurado: `/etc/sudoers.d/customer_cobranca` (cp, chown, mv, rm sem senha) **Servidor Intranet (server.whmservidor.com):** - Método: `CronCobrancaAutomatica::processarLigacoes()` - Rota: `GET /cron/cobranca/ligacoes?token=XXX` - Consulta banco → aplica regras frequência → chama API Magnus via curl - Endpoint WhatsApp: `cron/cobranca/enviar-boleto-whatsapp` (token via GET ou POST) **Asterisk:** - Dialplan: `/etc/asterisk/extensions_cobranca.conf` - Contexto `cobranca-tts`: áudio fixo (testes) - Contexto `cobranca-dinamica`: áudio variável via `${AUDIO_FILE}` - AGI: `/var/lib/asterisk/agi-bin/cobranca_whatsapp.sh` (base64 encoded, lê args do dialplan) - Trunk: `SIP/ILIMITADO_FIXO_PADRAO/10103516#0DDNUMERO` (não usa saldo) - CallerID: "GoTechBR" <3135003516> - Áudio confirmação: `/var/lib/asterisk/sounds/cobranca_confirmacao.wav` ### Monitoramento: - Aba "Ligações VoIP" no monitor de cobranças (`/monitoramento-cobranca`) - Cards: "Ligações Hoje" e "Ligações Mês" - Tabela: data/hora, cliente, telefone, tipo (Lembrete/Vencido/Protestado), status - Endpoint: `GET /monitoramento-cobranca/ligacoes` - Tabela DB: `cobranca_ligacao_log` (cliente_id, boleto_id, tipo_ligacao, telefone, status, data_ligacao) ### IMPORTANTE - API Magnus precisa estar rodando: - Se servidor reiniciar: `nohup python3 /home/customer/cobranca_api.py > /tmp/cobranca_api.log 2>&1 &` - Verificar: `curl -s http://localhost:8880/test` (deve retornar 501 GET not supported = OK) - Credenciais: customer / 3mDxRgKbtE (sudo sem senha para cp/chown) ### Edge TTS: - Engine: Edge TTS (gratuito, sem API key) - Voz: pt-BR-FranciscaNeural (única aprovada, NÃO usar AntonioNeural) - Limitação: NÃO suporta SSML `` - usa escrita fonética em texto puro - Kokoro TTS: NÃO funciona (CPU sem AVX = Illegal instruction) - Coqui TTS VITS: NÃO funciona (CPU sem AVX = Illegal instruction) - Google Cloud TTS: Não implementado (usuário não quer usar API) ### Correções feitas nesta sessão (25/03/2026): - E-mail financeiro: SMTP próprio `financeiro@gotechbr.com.br` (senha: 8?Hhhg$bVb) - Agradecimento: coluna `agradecimento_enviado` anti-duplicata - NFSe: prestador_nome para notas tomadas - Monitor: datas formato brasileiro, filtros por status, aba ligações - Protesto removido: mensagem de remoção atualizada (agradecimento em vez de "regularize") - WhatsApp grupos: alertas na barra superior incluem grupos (per-user tracking)