⚓ Setter Élite · Guía ManyChat para dummies

Capitán, esta es la guía de montaje, para dummies, del setter completo.

Primero, el reparto de trabajo. Piensa en un restaurante: la cocina ya está construida. Yo (Claude) ya hice todo lo que se puede hacer con código: el Worker (el programita con la IA que vive en la nube de Cloudflare — la cocina donde se "cocina" cada respuesta), el script que crea solo los 18 campos y 11 etiquetas en ManyChat (para que no los crees a mano uno por uno), todos los textos ya escritos listos para copiar y pegar, y las notificaciones a tu celular por Telegram ya programadas dentro del Worker.

Lo que solo tú puedes hacer con tus manos (porque ManyChat, Calendly y Telegram no dejan entrar a nadie más que al dueño de la cuenta): 1) armar el flujo dentro de las pantallas de ManyChat (es arrastrar bloques y pegar los textos que ya te dejo listos), 2) pegar TU link de Mercado Pago en la rama de venta, 3) correr 2-3 comandos en la Terminal que te dejo escritos letra por letra (solo copiar, pegar y Enter), y 4) crear tu bot de Telegram (5 minutos, guiado paso a paso).

Cómo usar esta guía: ve en orden, de arriba abajo, y marca cada casilla al terminar cada paso. Las casillas se guardan solas en este navegador aunque cierres la página. Todo lo que va en letra verde dentro de cajitas se copia y se pega TAL CUAL, sin cambiar ni una coma (salvo donde diga claramente "TU_..." — ahí va tu dato).

1️⃣ Prerrequisitos (junta las llaves antes de abrir el restaurante)

Antes de montar nada, necesitas tener estas cuentas y "llaves" a mano. Una llave aquí es un texto secreto que dos máquinas comparten para reconocerse, como el santo y seña de un club: si no lo dices exacto, no entras.

Ten ManyChat Pro con tu Instagram conectado. El plan gratis NO sirve: las piezas que usamos (External Requests y automatizaciones) solo existen en Pro. Tu Instagram debe ser cuenta Professional/Business y estar bien enlazada: revísalo en ManyChat → Settings → Instagram. Si ahí se ve conectado, vas bien.
Ten una cuenta de Cloudflare (gratuita, en cloudflare.com). Cloudflare es el "barrio" en la nube donde vive la cocina (el Worker). Solo necesitas la cuenta creada; el resto lo hacen los comandos del bloque 3.
Genera tu token de la API de ManyChat. Un token es una llave maestra que deja que un programa entre a tu ManyChat sin pedirte clave cada vez. Ve a ManyChat → Settings → API → botón Generate your token. Copia esa tira larga de letras y números y guárdala en un lugar seguro (Notas con candado, por ejemplo). La vas a usar dos veces: en el bloque 2 y en el bloque 3.
Ese token da acceso total a tu cuenta: no lo mandes por chat público ni lo dejes en un papel a la vista.
Inventa tu santo y seña: el SETTER_SHARED_SECRET. Es un texto secreto largo que tú te inventas (mínimo 20-30 caracteres revueltos, tipo barco-azul-73-quirofano-Xk9). ManyChat lo dirá al tocar la puerta de la cocina, y la cocina solo abre si coincide. Así nadie más puede usar tu Worker (que gasta tu crédito de IA). Escríbelo y guárdalo: lo usarás en el bloque 3 (al ponerlo en la cocina) y en el bloque 4 (al ponerlo en ManyChat). Debe ser EXACTAMENTE el mismo texto en los dos lados, letra por letra.
Ten a mano tu API key de Anthropic (la llave que le da al Worker permiso de usar la IA Claude; empieza por sk-ant-...). Se genera en console.anthropic.com → API Keys. Es la "cuenta de gas" de la cocina: sin ella, la IA no responde.
Ten cuenta de Calendly (para la Llamada de Evaluación Élite, bloque 6) y Telegram instalado en tu iPhone (para los avisos al celular, bloque 7). Solo instalados y con sesión iniciada; lo demás viene después.

2️⃣ Crear los campos y etiquetas en ManyChat (un solo comando)

El setter necesita 18 "frascos rotulados" (custom fields: casilleros donde ManyChat guarda datos de cada persona, como setter_score) y 11 "etiquetas adhesivas" (tags: calcomanías que marcan en qué punto va cada lead, como setter-calificado). Crearlos a mano serían 29 clics con riesgo de equivocarse en una letra. En vez de eso, ya te dejé un ayudante robot (provision.mjs) que los rotula TODOS de una vez, con los nombres exactos.

Corre el script. Abre la app Terminal del Mac (la pantalla negra donde se le dan órdenes escritas al computador: la encuentras con la lupa 🔍 arriba a la derecha, escribiendo "Terminal"). Copia y pega estas dos líneas (en la segunda, cambia tu_token_aqui por el token de ManyChat del paso g03) y presiona Enter:
cd ~/anesarte/setter-instagram/scripts
MANYCHAT_API_TOKEN=tu_token_aqui node provision.mjs
Verifica el resultado. Al final, el script imprime una tabla con el NOMBRE y el ID de cada campo y cada etiqueta creados. Si la ves completa (18 campos, 11 tags), listo. El script es "idempotente": palabra elegante para decir que puedes correrlo dos veces sin daño — solo crea lo que falte, nunca duplica. Si algo falla a mitad, corre el mismo comando otra vez y ya.

3️⃣ Desplegar el Worker (encender la cocina en la nube)

El código de la cocina ya está escrito. "Desplegar" solo significa subirlo a la nube de Cloudflare y encenderlo. Lo hace por ti un mensajero llamado wrangler con 2-3 comandos. Después le entregas a la cocina sus llaves secretas ("secrets": llaves que quedan guardadas en la caja fuerte de Cloudflare, nunca visibles en el código).

Conéctate a Cloudflare. En la Terminal, copia y pega:
cd ~/anesarte/setter-instagram/worker
npx wrangler login
Se abre el navegador pidiéndote autorizar: acepta "Allow". Es como firmarle un permiso al mensajero para entrar a tu bodega de Cloudflare.
Sube y enciende la cocina. En la misma Terminal:
npx wrangler deploy
Al terminar te muestra la URL pública del Worker, algo como https://setter-instagram.TU-SUBDOMINIO.workers.dev. Anota esa URL completa: es la dirección de la cocina y la necesitas en los bloques 4 y 6.
Entrégale las 3 llaves a la cocina. Corre estos tres comandos, UNO por UNO. Cada uno te pedirá que pegues el valor (no se ve mientras escribes: es normal, es a propósito) y le das Enter:
npx wrangler secret put SETTER_SHARED_SECRET
npx wrangler secret put ANTHROPIC_API_KEY
npx wrangler secret put MANYCHAT_API_TOKEN
Qué pegar en cada uno: 1) tu santo y seña inventado en g04, 2) tu llave de Anthropic de g05, 3) tu token de ManyChat de g03 (sí, el mismo del bloque 2: la cocina también lo necesita para ponerle etiquetas a los contactos cuando Calendly avise).
Prueba que la cocina respira. Abre en Safari tu URL del Worker seguida de /health (ejemplo: https://setter-instagram.TU-SUBDOMINIO.workers.dev/health). Si la página dice ok, la cocina está viva. Si no responde, avísame antes de seguir.

4️⃣ Montar el flujo maestro en ManyChat (la ruta del mesero)

Aquí armas el recorrido completo: ManyChat es el mesero — toma el pedido (lo que escribe el prospecto), lo lleva a la cocina (el Worker), y trae de vuelta el plato (la respuesta de la IA + la decisión). El mesero no cocina. Todo este bloque ocurre dentro del Flow Builder de ManyChat: arrastras bloques y los conectas con flechas.

El arranque

Crea la automatización y el trigger. Un trigger es el "sensor de la puerta": lo que hace arrancar todo. Ve a Automation → New Automation y elige como trigger Instagram Ads. Es el único que conecta el clic de un anuncio Click-to-Instagram-DM (creado en Meta Ads Manager con CTA "Send Instagram message") con este flujo.
ORDEN IMPORTANTE: este trigger debe existir y estar activo ANTES de crear el anuncio en Meta Ads Manager (al crear el anuncio, Ads Manager te dejará elegir este flujo como destino del DM).
Avisos que ahorran dolores de cabeza: solo funciona con anuncios de Ads Manager, NO con publicaciones promocionadas ("boosted") — darle "promocionar" a un post no activa el trigger. Si el trigger no aparece seleccionable, casi siempre la cuenta de Instagram no está como Professional/Business o está mal conectada: revisa Settings → Instagram. Y si un día quieres tráfico que no venga de anuncios (link en bio, Reel), eso se hace con otro trigger llamado Instagram Ref URL (ig.me/m/TU_HANDLE?ref=...).
Añade las acciones iniciales (preparar la mesa antes de que hable el prospecto). Justo después del trigger, añade un bloque Action con estas 3 acciones, en este orden:
1. Set Custom Field  →  setter_stage  =  nuevo
2. Set Custom Field  →  setter_turnos =  0
3. Add Tag           →  setter-frio-nuevo
¿Por qué? La cocina espera recibir la etapa y el contador de turnos en cada llamada; sembrarlos aquí evita que la primera llamada vaya con valores vacíos. El tag te deja ver en la audiencia quién acaba de entrar. Nota: en Instagram los contactos suelen llegar solo con su @handle (instagram_username) y el nombre (first_name) puede venir vacío — no pasa nada, la cocina lo maneja.
Añade el mensaje de bienvenida (bloque Send Message después de las acciones). Copia uno de estos dos textos, tal cual:
Qué bueno tenerte por aquí. Soy parte del equipo que acompaña a quienes van a
entrar a cirugía para que lleguen al quirófano con cabeza fría y cuerpo listo. 🧭
Para entenderte bien: ¿tú o un ser querido tienen una cirugía en el horizonte?
Alternativa más corta:
Hola, qué bueno verte por aquí. Cuéntame: ¿tienes una cirugía en camino, o estás
averiguando para alguien cercano?
Añade el paso "User Input" (el oído del mesero: pausa el flujo y ESPERA a que el prospecto escriba). En el Flow Builder aparece como "Ask a question" / "Collect user input". Configúralo así:
• Reply type = Text (texto libre, teclado abierto — no solo botones).
• Lo que escriba queda solo en el campo de sistema {{last_input_text}}; no necesitas guardarlo en ningún campo aparte.
• Añade una keyword de escape: si escribe "humano" o "asesor", que salte directo a la rama HUMANO (la IA también lo detecta sola, pero este es el cinturón extra).
• Añade un botón Saltar/Skip o un timeout, para que nadie quede colgado.
El anti-loop duro ya lo trae la cocina: si pasa de 8 turnos sin calificar, la IA devuelve humano o nutrir sola.

La llamada a la cocina (External Request) — la pieza central

Añade el bloque External Request justo después del User Input: está en Dev Tools → External Request. Es, literalmente, el viaje del mesero a la cocina. Configura primero método y dirección:
• Method: POST
• Request URL: tu URL del Worker (anotada en g10) + /setter:
https://setter-instagram.TU-SUBDOMINIO.workers.dev/setter
Luego, con el botón Add header, añade estos 2 headers (un header es una notita pegada al pedido; la primera dice "va en formato JSON" y la segunda es el santo y seña):
Content-Type: application/json
X-Setter-Secret: <AQUÍ_EL_VALOR_DE_SETTER_SHARED_SECRET>
En X-Setter-Secret escribe el valor literal de tu santo y seña (el texto de g04, el mismo que pusiste en la cocina en g11). No uses merge tags ahí.
Pega el Body (el contenido del pedido). Tipo: application/json. Pega este JSON EXACTO. Los {{...}} son "merge tags": comodines que ManyChat rellena con el dato real de cada contacto — insértalos con el selector { } del editor (los setter_... los eliges por su nombre desde ese selector; ManyChat los traduce por dentro a un código cuf_XXXXX):
{
  "subscriber_id": "{{contact_id}}",
  "first_name": "{{first_name}}",
  "last_input": "{{last_input_text}}",
  "stage": "{{setter_stage}}",
  "turns": "{{setter_turnos}}",
  "nombre": "{{setter_nombre}}",
  "tipo_cirugia": "{{setter_tipo_cirugia}}",
  "fecha_cirugia": "{{setter_fecha_cirugia}}",
  "dolor": "{{setter_dolor}}",
  "porque_ahora": "{{setter_porque_ahora}}",
  "inversion": "{{setter_inversion}}",
  "score": "{{setter_score}}",
  "resumen": "{{setter_resumen}}",
  "lead_tipo": "{{setter_lead_tipo}}",
  "lead_perfil": "{{setter_perfil}}",
  "lead_contexto": "{{setter_contexto}}",
  "agente": "{{setter_agente}}"
}
Notas importantes:
• last_input = el último mensaje del prospecto. Es lo único imprescindible en cada turno; el resto es la "memoria" acumulada.
• subscriber_id: busca en el selector { } un campo de sistema tipo "Contact ID" / "Subscriber ID". Verifícalo en TU cuenta: el nombre exacto del merge tag varía según el plan/versión de ManyChat. Si no existe ninguno, plan B: crea un campo propio (ej. setter_id), guarda el ID ahí al inicio del flujo y manda {{setter_id}}; o manda {{instagram_username}} como identificador. Este dato es el que después permite reconocer al contacto cuando reserve en Calendly.
• Si al probar ves un cuf_XXXXX literal, no es error del JSON: es que ese campo estaba VACÍO en el contacto de prueba.
Configura el Response Mapping (el paso MÁS importante). La cocina responde con una bandeja de datos, y aquí le dices al mesero en qué frasco va cada cosa. ManyChat NO lo hace solo: en la pestaña Response Mapping del External Request crea, una por una, exactamente estas 17 filas (JSON Path → Custom Field; el $. significa "desde la raíz de la respuesta"):
$.reply         ->  setter_reply           (text)
$.stage         ->  setter_stage           (text)
$.score         ->  setter_score           (number)
$.accion        ->  setter_accion          (text)
$.agente        ->  setter_agente          (text)
$.lead_tipo     ->  setter_lead_tipo       (text)
$.lead_perfil   ->  setter_perfil          (text)
$.lead_contexto ->  setter_contexto        (text)
$.nombre        ->  setter_nombre          (text)
$.tipo_cirugia  ->  setter_tipo_cirugia    (text)
$.fecha_cirugia ->  setter_fecha_cirugia   (text)
$.dolor         ->  setter_dolor           (text)
$.porque_ahora  ->  setter_porque_ahora    (text)
$.inversion     ->  setter_inversion       (text)
$.resumen       ->  setter_resumen         (text)
$.motivo        ->  setter_motivo          (text)
$.turns         ->  setter_turnos          (number)
NO añadas ningún Set Field extra para setter_turnos: la cocina ya devuelve el contador incrementado (+1). Si lo sumas tú también, contaría doble y el anti-loop cortaría la conversación antes de tiempo.
Tres avisos críticos (las causas #1 de "no se me llenan los campos"):
1. El botón "Send test request" NO ejecuta el Response Mapping. En el test solo ves la respuesta cruda; los frascos solo se llenan cuando el flujo corre de verdad (contacto real o "Preview as contact"). No te asustes si tras el test los campos siguen vacíos.
2. Timeout de 10 segundos: si la cocina tarda más de 10s, ManyChat dice "Response is Null" y el loop se rompe. La cocina ya está afinada para responder rápido (Sonnet 4.6, esfuerzo bajo, respuesta corta); si vieras nulls, avísame para revisar la latencia.
3. La cocina responde solo JSON válido (ya está resuelto en el código; solo para que sepas que texto plano rompería el mapeo en silencio).

Mostrar la respuesta y ramificar

Añade el Send Message con la respuesta de la IA. Después del External Request, un bloque Send Message cuyo contenido sea ÚNICAMENTE este merge tag:
{{setter_reply}}
No agregues texto alrededor: la IA ya escribió un DM completo, corto y con el tono de marca. Este bloque es el mesero sirviendo el plato tal como salió.
Añade el nodo Condition (el semáforo de 7 luces). Después del Send Message, un bloque Condition que mire el campo {{setter_accion}} (la decisión que tomó la IA) y dirija el tráfico. Crea estas 7 ramas:
Si setter_accion es…RamaQué hace
continuarLOOPVuelve la flecha al User Input: siguen conversando.
venderVENDEREnvía el link de Mercado Pago + tag + vuelve al User Input.
agendarAGENDARManda el link de Calendly + tag calificado.
ofrecer_lowticketLOWTICKETTag interesado + vuelve al User Input.
nutrirNUTRIRTag nutrición + cierre suave.
cerrarCERRARTag descalificado + fin (sin mensaje extra).
humanoHUMANOTag handoff + avisarte a ti + fin.
Tip de orden: pon primero las salidas (agendar, humano, cerrar, nutrir, ofrecer_lowticket, vender) y deja continuar (o el "cualquier otro caso") de última: así, si la IA dijera algo raro, el comportamiento por defecto es seguir conversando, no romper.
Rama CONTINUAR: dibuja el loop. En la rama continuar, arrastra la flecha de regreso al nodo User Input (g16). Esa flechita es TODO el bucle: prospecto escribe → cocina responde → semáforo → vuelve a esperar al prospecto. Así conversan hasta que la IA decida otra cosa.
Rama VENDER (cierre EN el DM 💰). La IA solo elige vender cuando el lead cumplió la Regla de Oro del Link: dijo explícitamente que quiere entrar, sin objeciones pendientes, confirmó que puede invertir ~6,60 USD/día y ya verbalizó su dolor y su porqué-ahora. El mensaje de la IA anuncia que el acceso llega en el siguiente mensaje; el link real lo pone ManyChat (la IA jamás escribe links). Monta la rama así, en orden:
1. Add Tag → setter-oferta-hecha (tu pipeline de ventas vive en los tags).
2. Set Field → setter_stage = oferta.
3. Send Message con este texto, pegando TÚ tu link real donde dice https://mpago.la/1rdBZby (lo pegas una sola vez al montar la rama):
Aquí está tu acceso seguro por Mercado Pago (hasta 12 cuotas sin interés
según tu banco, acepta tarjetas internacionales) 👇
https://mpago.la/1rdBZby
Recuerda: garantía de 14 días — si terminas el primer tramo y no te sientes
satisfech@, te devolvemos todo, sin insistencias. Tu cohorte inicia el
primer lunes del mes y son 10 cupos. Cuando completes el pago, me avisas
por aquí y te doy la bienvenida a bordo 🚢
4. Vuelve la flecha al User Input: la conversación sigue (dudas del pago, confirmación, bienvenida). Además, la cocina te avisa al celular por Telegram en el instante en que se envía el link (bloque 7).
5. Cuando confirmes el pago (aviso del lead + verificación en Mercado Pago), ponle A MANO el tag setter-ganado desde el Live Chat. Si tras el seguimiento se enfría definitivo: tag setter-perdido.
Rama AGENDAR. Dato clave: el link de Calendly YA va dentro de {{setter_reply}} — la cocina lo pega al final de la respuesta, ya armado (nombre pre-rellenado + identificador escondido para el cruce con el timbre). O sea que el lead ya lo recibió en el mensaje anterior. Esta rama solo necesita:
1. Add Tag → setter-calificado
2. Set Field → setter_stage = calificado
3. NO agregues otro Send Message con link (quedaría repetido). Si quieres un empujón extra, un mensaje corto SIN link tipo:
Cualquier duda antes de agendar, aquí estoy. Esto complementa a tu equipo médico, no lo reemplaza.
4. No cierres el loop aquí. Cuando el prospecto reserve, el timbre de Calendly (bloque 6) sonará en la cocina y ella le pondrá sola el tag setter-agendado-llamada — que a su vez enciende la secuencia de pre-llamada (bloque 5).
Rama LOWTICKET. En orden:
1. Add Tag → setter-lowticket-interesado (así tienes la lista de espera del método lista para cuando exista el link de pago).
2. Vuelve la flecha al User Input: la IA ya presentó el método en su mensaje y quedó en capturar el interés; deja que el prospecto responda y la charla siga (puede terminar en método, comunidad o incluso subir a llamada).
3. (Opcional, para el futuro) Cuando el método tenga página de pago, añades aquí un Send Message con este texto + el link:
Me alegra que quieras empezar por el método 🙌 Es el entrenamiento de mentalidad
y hábitos del barco, a tu ritmo. Apenas abra la puerta te aviso por aquí de
primero. Mientras, cuéntame: ¿qué es lo que más quieres trabajar tú?
Rama NUTRIR. En orden:
1. Add Tag → setter-nutricion
2. Set Field → setter_stage = descalificado si no hay cirugía relevante, o déjalo en su etapa si es un "todavía no".
3. Send Message de cierre cálido (y si tienes una secuencia de contenido de valor, conéctala aquí; no insistas con la llamada):
Te entiendo. Por ahora quizá no sea tu momento para una llamada, y está perfecto.
Me quedo por aquí y de vez en cuando te comparto cosas que ayudan a llegar más
fuerte a una cirugía. Cuando lo sientas, me escribes y retomamos. 🙏
Rama CERRAR. Solo dos cosas:
1. Add Tag → setter-descalificado
2. Fin del flujo. No agregues NINGÚN mensaje: la IA ya se despidió con elegancia en su reply (competencia y haters no reciben proceso de venta). El tag te deja auditar después cuánta maleza llega y de qué tipo (mira setter_lead_tipo y setter_motivo en la ficha del contacto).
Rama HUMANO (te toca a ti). En orden:
1. Add Tag → setter-handoff-humano
2. Set Field → deja setter_stage en su etapa actual (no la borres) y revisa setter_motivo: ahí la IA explica por qué te lo pasó.
3. Notificarte: añade la acción interna de notificación al admin (aparece como "Notify Admins" en las Actions; el detalle de activarla en tu celular está en el bloque 7) con este texto:
🔔 HANDOFF — un prospecto necesita atención humana.
Nombre: {{setter_nombre}}  |  IG: @{{instagram_username}}
Motivo: {{setter_motivo}}
Etapa: {{setter_stage}}  |  Score: {{setter_score}}
Resumen: {{setter_resumen}}
Responde desde el Inbox (Human Agent te da hasta 7 días desde su último mensaje).
4. Cierra el flujo automatizado. De aquí en adelante respondes TÚ desde el Inbox / Live Chat de ManyChat.

5️⃣ Automatización PRE-LLAMADA (mantener el horno caliente hasta la llamada)

Esta es una automatización SEPARADA del flujo maestro. Se enciende sola cuando alguien reserva en Calendly: el timbre de Calendly avisa a la cocina, la cocina le pone al contacto el tag setter-agendado-llamada y guarda la hora de la llamada en setter_fecha_llamada — y ese tag dispara estos 4 "toques" que evitan que el lead se enfríe antes de la llamada. Los textos completos de los 4 toques están en la página Guiones + Pre-llamada (y en PRE-LLAMADA.md).

Crea la automatización. New Automation → Trigger = "Tag applied" → tag setter-agendado-llamada. Es decir: "cuando a alguien le pongan esta calcomanía, arranca esto".
Toque 1 (inmediato): Send Message de confirmación + refuerzo + micro-tarea (el texto usa los merge tags {{setter_nombre}} y {{setter_fecha_llamada}}). Este toque PIDE una respuesta a propósito: si el lead contesta, la ventana de 24h se renueva y los toques siguientes salen bien (ver g35).
Smart Delay de 4 horas → Toque 2: añade un bloque Smart Delay (un temporizador de cocina: "espera 4 horas") y después el Send Message de valor puente (un pulso gratuito conectado a {{setter_dolor}}).
Smart Delay hasta 1 día antes de la llamada → Toque 3: en el Smart Delay usa la opción de esperar hasta una fecha guardada en un custom field y elige setter_fecha_llamada menos 1 día (el campo es tipo datetime, o sea fecha con hora). Después, el Send Message recordatorio re-calentador que pide reconfirmación ("¿sigues en pie?").
Smart Delay hasta 1 hora antes → Toque 4: igual que el anterior, pero esperando hasta setter_fecha_llamada menos 1 hora. Send Message de anticipación final.
Activa los recordatorios propios de Calendly (por email, 24h y 1h antes) en la configuración del evento. Esos correos NO dependen de la ventana de Instagram y cubren el hueco si los toques 3 y 4 no pudieran salir por DM (ver g35). Cinturón y tirantes.
LEE esto (solo lectura, marca la casilla cuando lo entiendas): la ventana de 24 horas. Es una regla de Instagram (no de ManyChat) y te afecta directo. Imagínala como una puerta que se cierra sola:
• La puerta se ABRE con cualquier interacción del prospecto (incluido el clic en tu anuncio). Cada respuesta suya reinicia el reloj. Mientras siga respondiendo, el ida-y-vuelta automatizado funciona sin límite.
• Si el prospecto desaparece más de 24h sin responder, la puerta se cierra y el bot YA NO PUEDE reabrirla. No insistas con automatizaciones: van a fallar. Por eso los Toques 3 y 4 solo salen por DM si el lead interactuó en las últimas 24h.
• Para reactivar fuera de 24h solo hay caminos humanos o de utilidad: Human Agent (7 días) — una persona (tú) puede escribir desde el Inbox hasta 7 días después de la última interacción; solo vale para mensajes mandados a mano, no automatizados. Útil para la rama HUMANO o para rescatar a un enfriado el día antes de su llamada con un toque humano de 1 línea. La otra vía "oficial" son los Utility Message Templates / opt-in de notificación recurrente (requieren configuración aparte).
• NO uses los "Message Tags" clásicos (CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE, POST_PURCHASE_UPDATE): Meta los retiró — dejaron de funcionar en ManyChat el 9-feb-2026 y devuelven error desde el 27-abr-2026. Hoy ya no sirven.
Conclusión práctica: todo el embudo está diseñado para vivir DENTRO de las 24h, que se renuevan solas mientras el prospecto conteste. Si se enfría más de 24h: tú desde el Inbox, o secuencia de utilidad — nunca una automatización normal.

6️⃣ Calendly: el evento y el timbre (webhook)

Dos piezas: el link de agendado (lo que el prospecto abre para reservar, con su nombre pre-rellenado y una "etiqueta secreta" que dice quién es) y el webhook — el timbre que Calendly toca en tu cocina cada vez que alguien reserva, para que la cocina le ponga sola el tag al contacto en ManyChat sin que nadie mire nada a mano.

Crea el evento "Llamada de Evaluación Élite". En Calendly: Create → Event Type → One-on-One y configura:
• Event name: Llamada de Evaluación Élite
• Duration: 20 min · Location: Google Meet, Zoom o llamada · Costo: ninguno (no actives cobros).
• Descripción (tono de marca):
20 minutos para trazar tu ruta antes del quirófano. Aquí el capitán de la
travesía eres tú; el navegante es el doctor Leonel Núñez. Esta llamada complementa
a tu equipo médico, no lo reemplaza. Sin costo.
• El slug (la colita final de la URL) debe quedar tal que la URL base sea:
https://calendly.com/leon-nunez-periop-anesarte/20min
(El slug verificado es /20min — el /30min viejo daba error 404. La duración configurada debe ser 20 min y la URL debe coincidir con la que usa la cocina para armar los links.) No cambies el slug sin avisarme: habría que actualizar también la variable del Worker.
Configura las preguntas de filtro, EN ESTE ORDEN. En el evento, abre "Invitee Questions" / "Booking page → Questions" y deja: primero las nativas Name y Email, y luego estas 3 preguntas custom:
a1 → ¿Qué tipo de cirugía tienes en el horizonte?
     (plástica / bariátrica / traumatológica / ya operado / otra)
a2 → ¿Para cuándo es, o qué tan urgente?
a3 → ¿Cuál es tu mayor preocupación de cara a la cirugía?
El ORDEN importa muchísimo: el pre-rellenado se basa en la POSICIÓN de la pregunta (a1 = primera custom, a2 = segunda…), no en su texto. No reordenes ni insertes preguntas nuevas arriba sin avisarme: se desplazarían todas. Estas respuestas son para que llegues a la llamada con contexto; el cruce técnico real viaja escondido en el link (la cocina mete el identificador del contacto en el parámetro utm_content, uno de los únicos 6 que Calendly conserva y reenvía; parámetros inventados los bota en silencio). Aviso extra: el link debe apuntar DIRECTO a calendly.com, sin acortadores ni redirecciones de dominio en el medio: esos saltos se comen los parámetros.
Genera tu Personal Access Token de Calendly (otra llave maestra, esta vez de Calendly). En Calendly: Integrations → API & Webhooks → Personal Access Tokens → crear uno → cópialo y guárdalo con los demás secretos.
Averigua la dirección de tu organización en Calendly. En la Terminal, pega este comando (cambiando TU_PERSONAL_ACCESS_TOKEN por el token de g38):
curl -H "Authorization: Bearer TU_PERSONAL_ACCESS_TOKEN" https://api.calendly.com/users/me
En la respuesta busca current_organization: es una dirección tipo https://api.calendly.com/organizations/XXXX.... Cópiala: la necesitas en el siguiente paso.
Instala el timbre: crea la suscripción al webhook. Primero inventa OTRO texto secreto largo y aleatorio: el signing_key (la firma con la que Calendly sellará cada aviso, para que la cocina sepa que el timbre lo tocó Calendly de verdad y no un extraño). Guárdalo apenas lo inventes: no se puede recuperar después; si se pierde, toca recrear la suscripción. Luego pega en la Terminal este comando, reemplazando las 4 cosas en mayúsculas (tu token de g38, tu URL del Worker de g10, la dirección de organización de g39 y tu signing_key recién inventado):
curl -X POST "https://api.calendly.com/webhook_subscriptions" \
  -H "Authorization: Bearer TU_PERSONAL_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://setter-instagram.TU-SUBDOMINIO.workers.dev/calendly",
    "events": ["invitee.created"],
    "organization": "https://api.calendly.com/organizations/TU_ORG_UUID",
    "scope": "organization",
    "signing_key": "TU_SIGNING_KEY_SECRETO_LARGO"
  }'
Traducción: "Calendly, cada vez que alguien reserve (invitee.created), toca el timbre en /calendly de mi cocina, y firma cada aviso con esta clave". No omitas el signing_key: sin él los avisos llegan sin firma y la cocina no puede verificar que son legítimos.
Entrégale a la cocina la copia de esa firma. En la Terminal:
cd ~/anesarte/setter-instagram/worker
npx wrangler secret put CALENDLY_SIGNING_KEY
Cuando pida el valor, pega EXACTAMENTE el mismo signing_key de g40. Deben ser idénticos letra por letra: es la misma firma vista desde los dos lados.
Haz una reserva de prueba. Abre un link de agendado como los que arma la cocina (con utm_content) y reserva una cita de mentira. Verifica dos cosas: que la cocina recibió el aviso (yo puedo revisar los logs contigo) y que en ManyChat el contacto quedó con el tag setter-agendado-llamada puesto automáticamente. Si eso pasó, el timbre funciona de punta a punta. Ejemplo de la forma del link (así lo arma la cocina; no tienes que armarlo tú):
https://calendly.com/leon-nunez-periop-anesarte/20min?name=Camila%20Restrepo&utm_source=manychat&utm_medium=instagram&utm_campaign=setter&utm_content=123456789

7️⃣ Notificaciones a tu celular ("el setter te necesita" 🔔)

Objetivo: que cuando la IA decida que te necesita (humano) o cuando envíe el link de pago (vender), te llegue un aviso push AL INSTANTE con el resumen del lead. Son dos capas — cinturón y tirantes: Telegram (tu timbre propio, ya programado dentro de la cocina; solo faltan 2 llaves) y la app de ManyChat (que te abre directo el teclado para responder). Telegram te despierta, ManyChat te da el teclado.

Capa 1 — Telegram (5 minutos, una sola vez)

Instala Telegram en tu iPhone (App Store) si no lo tienes, y crea tu cuenta.
Crea tu bot con BotFather. Dentro de Telegram busca el usuario @BotFather (el oficial, con check azul) y escríbele: /newbot
• Nombre visible: Vigía del Barco (o el que quieras).
• Username: algo único que termine en bot, ej. vigia_barco_bot.
BotFather te responde con un token (tira larga tipo 1234567890:AAH...xyz). Cópialo: es el secreto #1. Piénsalo así: acabas de fabricar un timbre que solo suena en TU teléfono; la cocina lo apretará, y nadie más puede.
Abre el chat con tu bot recién creado (BotFather te deja el link), púlsale Start y mándale cualquier mensaje ("hola"). Esto es necesario para el paso siguiente.
Averigua tu chat_id (el número de TU buzón en Telegram). Abre en Safari esta URL, reemplazando TU_TOKEN por el token de g44:
https://api.telegram.org/botTU_TOKEN/getUpdates
En el texto que aparece, busca "chat":{"id": seguido de un número (ej. 812345678). Ese número es tu chat_id: el secreto #2.
Entrégale las 2 llaves a la cocina. En la Terminal, uno por uno (pega el token en el primero y el chat_id en el segundo):
cd ~/anesarte/setter-instagram/worker && npx wrangler secret put TELEGRAM_BOT_TOKEN
cd ~/anesarte/setter-instagram/worker && npx wrangler secret put TELEGRAM_CHAT_ID
Listo: desde ese momento, cada humano o vender = push instantáneo en tu celular con nombre del lead, score, clasificación, motivo y resumen. (Por qué Telegram y no WhatsApp: gratis, instantáneo, sin límites, API oficial estable, y no depende de Meta — si Instagram/ManyChat se cae, el aviso te llega igual.)
Activa las notificaciones de Telegram en iOS: Ajustes → Notificaciones → Telegram → Permitir. Y si quieres distinguir este timbre de los demás chats, ponle un tono distinto: dentro del chat del bot → toca el nombre → Sonido.

Capa 2 — La app de ManyChat (para responder ahí mismo)

Instala la app de ManyChat en tu iPhone (App Store) e inicia sesión con tu cuenta. (La acción "Notify Admins" de la rama HUMANO ya la montaste en g28; elige ahí tu usuario como destinatario.)
Activa las push de la app: ManyChat app → Settings → Notifications → Live Chat y Admin notifications en ON. Y en iOS: Ajustes → Notificaciones → ManyChat → Permitir. Ventaja: este aviso te abre DIRECTO la conversación en el Live Chat para responder ahí mismo. Por qué no basta sola: las push de la app a veces se retrasan o se agrupan (iOS las modera); Telegram no falla.
LEE el protocolo de 1 minuto (marca la casilla cuando lo entiendas):
AvisoSignificaTu acción
🚨 "te necesita un lead" La IA decidió handoff: caso sensible, aliado/referidor, pidió humano, urgencia médica o se atascó Abre ManyChat → Live Chat → responde TÚ. Tienes ventana Human Agent de 7 días desde su último mensaje.
💰 "link de Mercado Pago ENVIADO" Un lead pasó la Regla de Oro y tiene el link en la mano Vigila la conversación; si paga → tag setter-ganado + bienvenida personal tuya (oro puro). Si duda → entra tú a cerrar en caliente.
Regla de oro tuya: el aviso 💰 merece respuesta humana en menos de 30 minutos. Un lead con el link en la mano y sin acompañamiento se enfría rápido.

8️⃣ Protocolo de prueba final (el ensayo general antes de abrir las puertas)

Antes de conectar el anuncio real, prueba TODO el circuito tú mismo, como un cliente de mentira. Aquí está qué probar y qué mirar.

Prueba con "Preview as contact" (la opción de ManyChat que te deja vivir el flujo como si fueras un prospecto). OJO: el botón "Send test request" del External Request NO ejecuta el Response Mapping — solo te muestra la respuesta cruda de la cocina. Los campos SOLO se llenan cuando el flujo corre de verdad (Preview as contact o un contacto real). Si tras un "Send test request" ves los campos vacíos, NO es un error.
Qué mirar durante la prueba:
• Llega la bienvenida → escribes algo → la IA responde en menos de ~10 segundos (si ManyChat dijera "Response is Null", la cocina tardó más de 10s: avísame y reviso la latencia).
• Abre la ficha del contacto de prueba y verifica que los frascos se llenaron: setter_reply con el texto, setter_accion con la decisión, setter_turnos subiendo de a 1 (¡de a UNO! si sube de a 2, sobró un Set Field — revisa g19).
• El loop funciona: respondes de nuevo y la conversación sigue sola.
Prueba las ramas y los timbres:
• Escribe "humano" → debe saltar a la rama HUMANO, ponerte el tag, y sonar el push de Telegram 🚨 y el de la app de ManyChat.
• Simula una conversación de compra hasta que la IA decida (o fuerza la rama VENDER en preview) → debe salir el mensaje con TU link de Mercado Pago y sonar el push 💰.
• Con la reserva de prueba de Calendly (g42) verifica que el tag setter-agendado-llamada encendió la secuencia PRE-LLAMADA y llegó el Toque 1.
Repaso final de marca en TODOS los textos que pegaste: tuteo siempre (tú/te/ tienes; prohibido el voseo: nada de vos/tenés/querés/dale); nunca la palabra de la marca comercial — se dice "el barco", "esta Tribu", "el método", "la Tribu Inquebrantable"; el paciente es el capitán y el Dr. Leo Núñez es el navegante (no capitán); la IA firma como Gabriel (leads mujer) o Valentina (leads hombre), "del equipo del doctor Leonel Núñez"; sin promesas de resultados clínicos — se habla de "aumentar tus probabilidades dentro de tus posibilidades reales"; siempre el disclaimer de que esto complementa, no reemplaza a tu equipo médico; la IA no lidera con precio (solo la oferta completa en zona de compra: ≈6,60 USD/día, garantía 14 días, 10 cupos); sin lenguaje inclusivo; máximo 1-2 emojis por mensaje; mensajes cortos de 1-4 frases, estilo DM real. Si todo esto está: el setter está listo para zarpar ⚓.

Tu feedback (cópialo y pégamelo en el chat)