--- name: Fix ligações cobrança: 2 bugs encadeados (2026-04-23) description: Ligações de cobrança paravam desde 19/04 por dois bugs combinados (token .env + PATH do edge-tts) type: project originSessionId: b36e383a-8f99-440c-a4c8-ab2f0625f864 --- # Fix ligações VoIP de cobrança (2026-04-23) Todas as ligações ficavam com `status=erro` desde 19/04. Duas causas encadeadas: ## Bug 1: Token não lido do .env `CronCobrancaAutomatica` usava `getenv('CRON_TOKEN_SECRETO')` — que **não lê `.env` no CI4** (só lê variáveis de ambiente do SO). Caía no fallback hardcoded `741e87...`. Mas o servidor Magnus (Python em 69.197.165.194:8880) espera token `58253c...` (do .env). A API rejeitava com `{"error": "token invalido"}`. Parou em 19/04 quando o token do `.env` foi trocado — antes disso, o fallback `741e87...` batia com o Python hardcoded. **Fix**: `env('CRON_TOKEN_SECRETO')` (helper CI4 que lê .env) com fallback em `getenv()` e por último o hardcoded. ## Bug 2: edge-tts fora do PATH do serviço Depois do token corrigido, Magnus retornou HTTP 500: ``` {"error": "[Errno 2] No such file or directory: 'edge-tts'"} ``` O serviço Python em 69.197.165.194 roda com `PATH=/usr/bin:/bin` (systemd padrão), mas `edge-tts` está em `/usr/local/bin/edge-tts`. `subprocess.run(['edge-tts', ...])` não achava. **Fix**: `sudo ln -sf /usr/local/bin/edge-tts /usr/bin/edge-tts` no servidor Magnus. ## OPcache no servidor hospedagem Servidor tem `opcache.enable=1` e `opcache.validate_timestamps=0`. Deploy no disco NÃO reflete no PHP até resetar OPcache. Para forçar: `pkill -9 -u gotechbr php-cgi`. Criado endpoint `/cron/cobranca/opcache-reset?token=XXX` que chama `opcache_reset()`. Usar após todo deploy. ## Teste validando Chamada manual em 14:15 retornou status `disparada` com gravacao_uid `FORTINOX_OLIVEIRA_E_ESQUADRIAS_1776964515_3341`. DB confirma. ## Verificar após próximo deploy - Pkill php-cgi do gotechbr OU chamar `/cron/cobranca/opcache-reset?token=...` - Confirmar que mudanças refletem antes de considerar deploy terminado ## Contexto servidor Magnus - SSH: `plink -pw 3mDxRgKbtE -batch -no-antispoof customer@69.197.165.194` - sudo senha: `3mDxRgKbtE` (mesma do SSH) - API cobrança em porta 8880, Python, `/home/customer/cobranca_api.py` - Token esperado hardcoded no Python: `58253c6ba4027c651b51eb7c47ea5a6ce9eae2efa0a9fc46a3ec58794a3fb2b3`