--- name: URA Reversa - modulo de campanhas VoIP programaveis description: Sistema de campanhas URA reversa (TTS dinamico + DTMF + disparo em massa). Infra isolada do cobranca_api.py. Bugs ja corrigidos. Trunk dinamico em desenvolvimento. type: project originSessionId: cb486933-f159-41f1-8bb7-f110a95c9e0f --- ## Status: EM PRODUCAO desde 2026-04-20 (sistema.gotechbr.com.br/ura-campanhas) ### Arquitetura - TUDO ISOLADO da cobranca **Magnus (69.197.165.194):** - `ura_api.py` porta **8881** (independente do cobranca_api.py 8880 — usuario fez questao) - AGI: `/var/lib/asterisk/agi-bin/ura_callback.sh` (callback HTTP do Asterisk) - Audio: `/var/lib/asterisk/sounds/ura/` (asterisk:asterisk) - Preview WAVs: `/home/customer/ura_preview/` (servidos via GET /preview/) - Sudoers: `/etc/sudoers.d/customer_ura` (permite bash, tee, asterisk reload — alem dos cp/chown/mv/rm do customer_cobranca) - Cron @reboot auto-start - Auto-restart NAO funciona via systemctl — usar `nohup python3 /home/customer/ura_api.py > /tmp/ura_api.log 2>&1 < /dev/null & disown` **Intranet (sistema.gotechbr.com.br):** - Controller `UraCampanhas` (CRUD + preview TTS + importar CSV + disparar/pausar/cancelar) - Controller `CronUraCampanhas` (processador com flock anti-overlap) - 4 Models: UraCampanhaModel, UraDestinatarioModel, UraDtmfModel, UraLigacaoLogModel - Views auto-contidas em `app/Views/ura_campanhas/` (index/form/detalhe) — carregam jquery+bootstrap+metisMenu manualmente porque nao usam layout padrao - 4 tabelas: ura_campanhas, ura_destinatarios, ura_dtmf, ura_ligacao_log - 6 permissoes grupo "URA Reversa": ver_campanhas, criar_campanha, disparar_campanha, importar_lista, ver_relatorios, gerenciar - Cron `*/1 9-19 * * *` chama `/cron/ura-campanhas/processar?token=58253...` - Menu duplicado: aparece em **Telefonia** (subTelefonia) e em **OPERACIONAL** ### Token URA = mesmo do .env prod `58253c6ba4027c651b51eb7c47ea5a6ce9eae2efa0a9fc46a3ec58794a3fb2b3` (env: CRON_TOKEN_SECRETO). ura_api.py tem hardcoded — nao usar 741e... do fallback. ### Tunings aplicados pelo usuario - Batch: **20 destinatarios** por execucao (era 5) - Intervalo padrao entre disparos: **30 segundos** (era 5) - Max intervalo: **300s** (era 60) - Lock `flock` em `writable/tmp/ura_cron.lock` previne overlap quando batch ainda rodando - Requeue: destinatarios em "ligando" > 2 min voltam pra "pendente" (ate atingir max_tentativas, ai vira "nao_atendida") ### Bugs ja corrigidos (NAO regredir) 1. **Permission denied ao gerar TTS**: `customer` nao escreve em `/var/lib/asterisk/sounds/ura/`. Fix: gerar em `/tmp/