Implementación de sistema de fallback en cascada para los modelos LLM del Test Suite Global del CRM. Resolución de rate-limit Groq, integración OpenRouter, respuestas canned garantizadas, notificaciones Slack automáticas y corrección del bug de envío manual en modo Toma Manual.
El Test Suite (36 conversaciones) usaba exclusivamente llama-3.3-70b-versatile
para simular el cliente. Modelo 70B consume alta cuota → rate-limit en Groq → el cliente IA
respondía [Sin respuesta Groq] →
conversación truncada → 36/36 resultados quedaron como "Conversación abierta", 0 ventas, 0 escalados.
Al enviar mensajes en modo Toma Manual desde el CRM Web, el browser recibía respuesta vacía
de send_message.php, causando
Unexpected end of JSON input.
Sin ob_start() ni try-catch,
cualquier excepción PHP mataba el script sin devolver JSON.
Cada key en GROQ_API_KEY, GROQ_API_KEY_1, etc. se intenta con cada modelo.
200ms de espera entre reintentos. HTTP 429 → siguiente modelo inmediato.
Requiere OPENROUTER_API_KEY en .env. Cabecera HTTP-Referer: streamingapps.online incluida.
res.text() → JSON.parse() con try-catch que muestra el error PHP real en lugar del mensaje genérico.
Nuevo endpoint PHP que envía resumen en formato Block Kit a Slack. Soporta webhook URL o Bot Token + Channel ID.
Botón Slack en el header del test suite. Se habilita al completar los 36 tests y envía el resumen bajo demanda.
Al completar los 36 tests, se dispara notifySlack(auto=true) automáticamente para notificación en móvil.
test_suite.php — await sleep(2000)
entre cada test del queue. Reduce la presión sobre la API Groq de ~36 requests/segundo
a 1 request cada 2 segundos, permitiendo que los tokens se recuperen entre conversaciones.
Los modelos Ollama del Mac son usables para desarrollo local. El servidor Hostinger no puede alcanzarlos directamente
(red diferente). Para testing local, crear test_generator_local.php con endpoint http://localhost:11434.
ngrok http 11434 y agregar OLLAMA_URL al .env del servidor, o correr el test generator localmente vía CLI.
whatsapp-crm/public/test_generator.php
callLLMCascade() + loadEnvVars() + _groqCall() + _openRouterCall() + _cannedResponse()
whatsapp-crm/public/test_suite.php
Delay 2s + botón Slack + auto-notify + notifySlack()
whatsapp-crm/public/notify_slack.php
Endpoint Slack — webhook URL + Bot Token, Block Kit format
whatsapp-crm/public/send_message.php
ob_start() + ob_clean() + try-catch Throwable
whatsapp-crm/public/index.php
sendManualMsg(): res.text() → JSON.parse() con try-catch para errores reales