Constructor de Secuencias de Outreach
Toma una señal de compra. Genera una secuencia de outreach multicanal personalizada. Produce mensajes listos para enviar a través de email, LinkedIn y teléfono.
Regla crítica: Cada mensaje debe estar completamente rellenado con el contexto que cargues. Solo se permite {{first_name}} como variable. Sin corchetes [Nombre de Empresa], sin placeholders [INSERTA PUNTO DE DOLOR]. Si no tienes la información para rellenar algo, pregunta antes de escribir. Nunca envíes un mensaje con un placeholder sin rellenar.
Paso 1: Verificación de Configuración
Confirma las variables de entorno requeridas:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-no configurada, se omitirá la redacción de Gmail}"
Si falta GEMINI_API_KEY: Detente. Dile al usuario: "GEMINI_API_KEY es obligatoria. Consíguela en aistudio.google.com. Añádela a tu archivo .env."
Si falta COMPOSIO_API_KEY: Continúa. Las secuencias se mostrarán como texto formateado para copiar y pegar. La creación de borradores de Gmail se omite.
Paso 2: Cargar Contexto
Verifica si existe un archivo ICP y archivos de cuentas:
ls docs/icp.md 2>/dev/null && echo "icp encontrado" || echo "icp faltante"
ls docs/accounts/ 2>/dev/null && echo "cuentas encontradas" || echo "cuentas faltantes"
Si existe docs/icp.md: Léelo. Extrae:
- Personas objetivo (cargos, nivel jerárquico, departamento)
- Perfil de empresa (tamaño, industria, etapa de financiación)
- Puntos de dolor clave (usa el lenguaje exacto del comprador)
- Diferenciadores clave (por qué tu producto frente a alternativas)
Si existe docs/accounts/{empresa}.md: Lee el archivo relevante. Extrae:
- Nombre de la empresa, tamaño, contexto reciente
- Stack tecnológico o puntos de dolor conocidos
- Cualquier relación existente o contacto previo
Si no existe ninguno: Pregunta al usuario estas 4 preguntas. No continúes hasta que todas estén respondidas:
- ¿Qué hace tu producto? (una o dos frases)
- ¿A quién te diriges? (cargo, tamaño de empresa, industria)
- ¿Cuál es el principal problema que resuelves? (desde la perspectiva del comprador, no la tuya)
- ¿Cuál es tu diferenciador clave? (por qué tú sobre la alternativa que usan hoy)
Paso 3: Identificar la Señal
Determina cuál de los 7 tipos de señal aplica. Lee references/signal-playbook.md para obtener el Insight, Puente, Apertura y Pregunta completa para cada tipo de señal.
7 tipos de señal:
| Señal | Definición |
|---|---|
| Post-Financiación | La empresa recaudó una ronda de financiación en los últimos 30 días |
| Señal de Contratación | La empresa publicó 5 o más puestos en una función a la que sirves |
| Desplazamiento de Competidor | El contacto usa un competidor y muestra frustración |
| Lanzamiento de Producto | La empresa lanzó un nuevo producto o funcionalidad importante |
| Compromiso con Contenido | El contacto dio like, comentó o compartió tu contenido |
| Seguimiento de Evento | Te encontraste o estuviste en la misma sesión en una conferencia o webinar |
| Cambio de Empleo | El contacto se mudó a una nueva empresa en los últimos 60 días |
Si el usuario proporcionó una señal en su prompt: Confirma el tipo y extrae los detalles específicos (tamaño de la ronda, títulos de roles, nombre del producto, nombre del evento, etc.).
Si no hay una señal clara: Pregunta: "¿Qué desencadenó este outreach? (ej. recaudaron una ronda, están contratando ingenieros, te encontraste en un evento)"
Indica el tipo de señal detectada y el detalle específico antes de continuar.
Paso 4: Desarrollar el Ángulo
Usando el tipo de señal y el contexto cargado en los Pasos 2-3, define los cuatro elementos del ángulo. Lee references/signal-playbook.md para la fórmula de este tipo de señal.
Escribe explícitamente antes de generar cualquier mensaje:
Señal: [señal específica + detalle concreto]
Insight: [lo que esta señal revela sobre su situación]
Puente: [cómo tu producto se conecta con lo que la señal revela]
Apertura: [una oración que hace referencia al detalle específico de la señal]
Pregunta: [CTA mínimo viable, menos de 10 palabras]
La apertura debe nombrar el desencadenante específico. Las aperturas vagas se rechazan.
Correcto: "Felicitaciones por la Serie B de $18M — escalar el equipo de ventas rápido normalmente crea una brecha de incorporación." Incorrecto: "Vi que tu empresa recaudó financiación recientemente."
Paso 5: Planificar la Secuencia de Canales
Diseña de 4 a 6 puntos de contacto a través de email, LinkedIn y teléfono. Reglas:
- Duración total: 10-14 días
- Intervalo mínimo: 2 días entre dos contactos cualesquiera
- Nunca uses el mismo canal dos veces seguidas
- Cada seguimiento debe añadir nuevo valor (nuevo recurso, nuevo ángulo, nuevo punto de prueba). Nunca "solo dando seguimiento".
- El punto de contacto final es un mensaje corto de cierre
Cadencia predeterminada para la mayoría de las señales:
Día 1: Email (primer contacto, apertura basada en señal)
Día 3: LinkedIn (nota de conexión o DM corto)
Día 7: Email (nuevo ángulo o caso de estudio)
Día 9: Teléfono (guión de conversación + mensaje de voz)
Día 12: Email (enfoque diferente u objeción abordada)
Día 14: Email (mensaje corto de cierre)
Ajusta según el tipo de señal:
- Post-Financiación: ve más rápido (Día 1, 2, 4, 7, 10). Actúa dentro de las 48 horas del anuncio.
- Seguimiento de Evento: empieza con LinkedIn, no con email (canal más cálido primero)
- Compromiso con Contenido: empieza con una respuesta o comentario en LinkedIn antes del email
Indica el día y canal planificados para cada punto de contacto antes de escribir los mensajes.
Paso 6: Generar la Secuencia
Lee references/sequence-format.md completamente. Lee references/output-template.md y selecciona la plantilla para este tipo de señal.
Escribe la solicitud de Gemini en un archivo temporal:
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "Eres un redactor de ventas B2B que escribe outreach en frío que obtiene respuestas. Reglas: La primera oración de cada mensaje es sobre ELLOS, no sobre tu empresa. Menciona la señal de compra específica por nombre y detalle en el mensaje de apertura. Usa contracciones de forma natural. Oraciones cortas. Sin jerga corporativa. Sin palabras prohibidas: sinergia, apalancamiento, tomar contacto, hacer seguimiento, ping, incluir en el loop, alineamiento, innovador, de vanguardia, mejor de su clase, de clase mundial, revolucionario, disruptivo, ancho de banda, inmersión profunda, fruta madura, mover la aguja. Sin cortesías: sin 'Espero que este email te encuentre bien', sin 'Feliz lunes', sin 'Solo quería'. Cada seguimiento añade nuevo valor — nunca 'solo dando seguimiento'. Límites estrictos: cuerpo del email menos de 100 palabras, nota de LinkedIn menos de 300 caracteres, apertura telefónica menos de 20 palabras. Solo se permite {{first_name}} como variable — completa todos los demás detalles del contexto proporcionado. El mensaje de cierre es corto (3-4 oraciones), amigable y deja la puerta abierta."
}]
},
"contents": [{
"parts": [{
"text": "CONTEXTO_INSTRUCCIONES_AQUÍ"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
Reemplaza CONTEXTO_INSTRUCCIONES_AQUÍ con:
- La descripción del producto, persona objetivo, puntos de dolor y diferenciadores del Paso 2
- El tipo de señal, detalle específico y los cuatro elementos del ángulo del Paso 4
- El plan de canales del Paso 5
- Instrucciones para escribir cada punto de contacto con su asunto (email), número de caracteres (LinkedIn) y guión de conversación (teléfono)
Para cada punto de contacto de email, requiere dos variantes de asunto (prueba A/B).
Paso 7: Mapear Objeciones
Después de generar la secuencia, identifica las 2-4 objeciones más probables para este tipo de señal. Anticípate a cada una de forma natural dentro de un punto de contacto existente. No agregues mensajes separados para manejar objeciones. Integra la anticipación en la secuencia.
Lee el manual de objeciones en references/sequence-format.md. Mapea qué punto de contacto maneja cada objeción.
4 objeciones estándar a anticipar:
| Objeción | Enfoque de anticipación |
|---|---|
| "Ya tenemos una solución" | Reconoce su herramienta actual, posiciona la tuya como complementaria o siguiente paso |
| "No es el momento adecuado" | Vincula la señal directamente con por qué ahora es el momento adecuado |
| "Demasiado caro" | Enmarca el ROI, ancla a un número que les importe |
| "Necesito involucrar a más personas" | Ofrece un recurso compartible (resumen de una página, walkthrough grabado) |
Indica qué punto de contacto maneja cada objeción antes de presentar la secuencia final.
Paso 8: Autoverificación de Calidad
Ejecuta cada verificación y corrige las infracciones antes de presentar:
- Cada mensaje comienza con una oración sobre ELLOS
- El detalle específico de la señal se menciona al menos en el primer punto de contacto
- Sin placeholders sin rellenar excepto
{{first_name}} - Los cuerpos de email tienen menos de 100 palabras (cuenta y declara el recuento de palabras para cada uno)
- Las notas de LinkedIn tienen menos de 300 caracteres (cuenta y declara para cada una)
- La apertura telefónica tiene menos de 20 palabras
- Sin palabras prohibidas en ningún mensaje
- Sin "solo dando seguimiento" en ningún seguimiento
- Cada seguimiento añade un nuevo ángulo o valor
- No se usa el mismo canal dos veces seguidas
- Al menos 2 objeciones anticipadas en toda la secuencia
- El mensaje de cierre tiene 3-4 oraciones, es amigable, sin culpa
Corrige cualquier infracción antes de presentar.
Paso 9: Salida y Guardado
Presenta la secuencia completa en un bloque de código.
Guardar en archivo:
mkdir -p docs/sequences
cat > docs/sequences/TIPO-DE-SEÑAL.md << 'EOF'
CONTENIDO_SECUENCIA_AQUÍ
EOF
echo "Secuencia guardada en docs/sequences/TIPO-DE-SEÑAL.md"
Si COMPOSIO_API_KEY está configurada: Pregunta: "¿Redactar los puntos de contacto de email en Gmail vía Composio?"
Tras la confirmación, para cada punto de contacto de email:
# El agente llama a la acción GMAIL_CREATE_EMAIL_DRAFT de Composio
# con asunto = [línea de asunto], cuerpo = [cuerpo del email], destinatario = [email de contacto si se conoce]
Después de redactar: "Borradores de email creados en Gmail. Revisa tu carpeta de Borradores."
Notas de LinkedIn: Preséntalas como bloques separados para copiar y pegar con una etiqueta clara por punto de contacto. LinkedIn no admite mensajes programáticos.
Guiones telefónicos: Preséntalos como un guión de conversación formateado con viñetas, no un guión rígido.