Publicado: 11 de agosto de 2026

Auditor de tasa de respuesta outbound en n8n

Auditor de tasa de respuesta outbound en n8n | Logixb2b

Consentimiento + personalización + delays + cupo → riskScore → allowSend → Sheets Auditor_Respuesta_Outbound (Europe/Madrid).

JSON auditor outbound n8n: riskScore, allowSend, HITL e Instantly/LinkedIn antes de enviar. Europe/Madrid RGPD.

Descarga el workflow

JSON listo para importar en n8n (Import from File). Sustituye solo REEMPLAZA_* y credenciales.

Qué problema resuelve el auditor de tasa de respuesta

Antes de empujar una cola a Instantly, LinkedIn o WhatsApp Cloud API, necesitas un semáforo: ¿esta fila puede enviarse sin matar la tasa de respuesta? Este flujo calcula un riskScore, lista killerFlags y deja allowSend claro en Sheets Auditor_Respuesta_Outbound.

No envía SMTP ni mensajes: solo juzga. Sirve a freelancers y equipos 1-10 en España/UE que ya tienen secuencias y quieren frenos operativos bajo Europe/Madrid. Si el comercial ve “verde” sin revisar flags, el auditor no sirve: el valor está en la traza, no en el color.

La guía educativa está en /errores-tasa-respuesta-outbound-automatizado. Combínalo con verificación de emails y secuencias outbound; no al revés. Un ESP a tope sobre lista no verificada no se arregla con más volumen.

También documenta quién puede marcar hitlApproved=true. Sin dueño, el flag se vuelve decorativo y el riskScore pierde autoridad frente al equipo.

Qué necesitas antes de importar el JSON

Una instancia n8n y una definición escrita de cupo diario (<code>dailyCap</code>) y delay mínimo entre toques. Sin esas dos cifras, el semáforo no tiene política y cada comercial inventa la suya el viernes por la tarde.

Credenciales en producción: Google Sheets OAuth (pestañas Auditor_Respuesta_Outbound y Auditor_Respuesta_Historial) y Slack Incoming Webhook. Con REEMPLAZA_* el flujo hace skip y termina en resumen local: útil para importar y validar lógica sin gastar OAuth.

Importa con Import from File. El JSON es estricto (JSON.stringify). No pegues el archivo a mano. Si n8n dice JSON inválido, vuelve a descargar el recurso; no edites comas a ojo.

Prepara un lote demo de 5 filas: dos “limpias”, dos sin consentimiento u opt-out, una con volumen por encima del cupo. Así pruebas verde, ámbar y rojo en la misma sesión.

Mapa del lienzo paso a paso

Sticky INSTRUCCIONES + COLUMNAS → Manual Trigger → Config → Validar Config → IF válida. Form Trigger y Schedule están en el lienzo pero desconectados: cablealos solo cuando pases a producción o a revisiones semanales.

Config inválida: Slack error (continueOnFail) y Stop. Así no escribes basura en Sheets si falta un campo numérico o el batchLabel es demasiado corto.

Válida: Calcular riskScore → IF allowSend. Si allowSend=false: Slack alerta (o skip demo) → Restaurar cifras. Si true: passthrough. Luego Limpiar fila → IF Sheets (Append dual o skip) → IF Slack OK → Resumen final local con ok=true.

No hay nodos Merge ni LangChain: las ramas IF se unen al mismo nodo siguiente. Eso reduce cuelgues al importar en self-hosted. active:false al importar; actívalo cuando el Manual Trigger haya pasado limpio dos veces.

Si activas Schedule, marca runSource=schedule en un Set previo para no mezclar auditorías manuales con las semanales en el historial.

Señales que suben el riskScore

consentOptIn=false, hasPersonalizationToken=false, hasOptOutLine=false, listVerified=false y hitlApproved=false suman peso alto. Son los “mata respuestas” más baratos de corregir y los más caros si los ignoras.

delayHoursSinceLastTouch por debajo del mínimo (p. ej. 24 h) y dailyVolume > dailyCap también empujan a rojo. Un delay de 10 minutos entre toques se siente como ráfaga, no como conversación.

subjectLength/bodyLength extremos (asunto vacío o muro de texto) marcan flags. channel (email|linkedin|whatsapp) queda en la traza para filtrar informes por canal sin mezclar reputaciones.

Personalización real no es {{nombre}} pegado: es un token que demuestra contexto (empresa, cargo, señal). Si hasPersonalizationToken=true pero el mensaje es genérico, el comercial debe fallar el HITL a mano.

allowSend, riskLevel y recomendación

riskLevel: verde (bajo), ámbar (revisar), rojo (bloquear). allowSend solo es true en verde o en ámbar si tu política lo permite (Config).

recommendation es una frase operativa: qué flag corregir primero. No es un KPI de bonus comercial.

El comercial decide el mensaje; el auditor decide si la fila merece salir hoy.

Sheets Auditor_Respuesta_Outbound y Slack

Columnas sugeridas: fecha, batchLabel, channel, riskScore, riskLevel, allowSend, killerFlags, recommendation, consentOptIn, hasPersonalizationToken, hasOptOutLine, delayHoursSinceLastTouch, dailyVolume, dailyCap, listVerified, hitlApproved, complianceFlag.

Historial puede ser más corto (fecha, batchLabel, riskScore, riskLevel, allowSend, channel). Sirve para ver tendencias semanales sin saturar la hoja principal.

Slack alerta cuando allowSend=false. Slack OK resume riskScore y riskLevel tras el Append (o tras skip en demo). Pon el webhook fuera del JSON versionado.

No mezcles el cuerpo del email con PII innecesaria en la hoja del auditor: guarda flags e IDs de fila, no dumps de mensaje. El inventario de contactos vive en CRM o en otra pestaña con retención corta.

Prueba Manual y puente a Form Trigger

Ejecuta Manual Trigger con demoMode=true y REEMPLAZA_*. Comprueba riskScore y allowSend a mano con tus flags. Anota el resultado en el sticky o en una fila de prueba.

Fuerza consentOptIn=false una vez para ver la rama Slack/skip y el Resumen final. Luego fuerza dailyVolume > dailyCap. Si ambos caminos llegan a ok=true local, el grafo está sano.

Producción: Form Trigger con los mismos campos → Config. Coloca este flujo delante del nodo que llama a Instantly o a la Cloud API. Si allowSend=false, no continues la rama de envío.

Cuando el techo de calidad esté estable, enlaza métricas reales de apertura/respuesta del ESP hacia el CRM. El auditor evita daños; las métricas confirman si el mensaje convierte.

VPS UE 24/7 y Make/Zapier

Self-hosted: Docker + Postgres + HTTPS + GENERIC_TIMEZONE=Europe/Madrid + N8N_ENCRYPTION_KEY. Backups antes de Active.

Make: Webhook fila → Router reglas → Sheets + Slack. Zapier: Form → Paths por riesgo → Sheets → Slack. El JSON n8n es la referencia.

RGPD y EU AI Act

El outbound trata datos de contacto: base jurídica, minimización y opt-out real son obligatorios en España/UE.

Este flujo base no llama a un LLM. Si añades briefing IA, sois deployers bajo el Reglamento (UE) 2024/1689 Art. 4.

Detalle: /uso-responsable-de-ia-y-transparencia. Guía: /errores-tasa-respuesta-outbound-automatizado (11 de agosto de 2026). Texto informativo, no asesoramiento legal.

Preguntas frecuentes

¿Este flujo envía cold email o WhatsApp?

No. Solo audita y registra. El envío vive en otro workflow tras allowSend=true.

¿Qué es riskLevel?

verde = riesgo bajo; ámbar = revisar flags; rojo = no enviar hoy.

¿Puedo probar sin Sheets ni Slack?

Sí. Deja REEMPLAZA_*: skipSheets/skipSlack y Resumen final local con ok=true.

¿Dónde está la guía del artículo?

En /errores-tasa-respuesta-outbound-automatizado (publicado 11 de agosto de 2026).

¿Sustituye a la verificación de emails?

No. listVerified debe venir de tu flujo de verificación previo.