#!/usr/bin/env bash # Diagnóstico: ¿el backend responde correctamente a llamadas estilo WxO? # Aísla problemas de auth/conectividad de problemas de lógica del agente. set -euo pipefail PUBLIC_HOST="${PUBLIC_HOST:-mi-cliente.fitlabs.dev}" BASE="https://${PUBLIC_HOST}" TOKEN="${WXO_BACKEND_TOKEN:-}" echo "──────────────────────────────────────────────────────" echo " Direct backend probe — ${BASE}" echo "──────────────────────────────────────────────────────" # [1/3] Health echo "[1/3] Healthcheck" CODE=$(curl -s -o /dev/null -w "%{http_code}" "${BASE}/health" || echo "000") if [ "$CODE" = "200" ]; then echo " ✓ 200 OK" else echo " ✗ $CODE — el backend no responde. ¿Container up? ¿Healthcheck OK?" exit 1 fi # [2/3] Direct tool call — con token, expecting controlled failure (case not found) echo "[2/3] Direct tool call (con token, case inexistente)" RESP=$(curl -s -X POST "${BASE}/api/v1/cases/run" \ -H "Content-Type: application/json" \ -H "X-Orchestrate-Token: ${TOKEN}" \ -d '{"case_id":"probe-nonexistent-uuid","target_id":1}') CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "${BASE}/api/v1/cases/run" \ -H "Content-Type: application/json" \ -H "X-Orchestrate-Token: ${TOKEN}" \ -d '{"case_id":"probe-nonexistent-uuid","target_id":1}') if [ "$CODE" = "200" ]; then echo " ✓ 200 con error de lógica: $RESP" echo " → Backend responde OK. Si el agente falla, es el agente o el LLM." elif [ "$CODE" = "401" ] || [ "$CODE" = "403" ]; then echo " ✗ $CODE — auth fallida. Verificar:" echo " - El token (WXO_BACKEND_TOKEN) es correcto" echo " - La connection en WxO tiene la API key correcta" echo " - El header es X-Orchestrate-Token (no Authorization)" exit 1 elif [ "$CODE" = "502" ] || [ "$CODE" = "504" ]; then echo " ✗ $CODE — gateway. Backend caído o muy lento." exit 1 else echo " ⚠ $CODE inesperado: $RESP" fi # [3/3] Sin token, debe fallar 401 echo "[3/3] Sin token (debe rechazar)" CODE_NOAUTH=$(curl -s -o /dev/null -w "%{http_code}" -X POST "${BASE}/api/v1/cases/run" \ -H "Content-Type: application/json" \ -d '{"case_id":"probe","target_id":1}') if [ "$CODE_NOAUTH" = "401" ] || [ "$CODE_NOAUTH" = "403" ]; then echo " ✓ rechaza correctamente sin token ($CODE_NOAUTH)" else echo " ⚠ acepta sin token ($CODE_NOAUTH) — posible problema de seguridad" fi echo "" echo "✓ Probe completed. Backend está sano desde el punto de vista de WxO."