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.
Settings → Instagram. Si ahí se ve conectado,
vas bien.
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.
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.
sk-ant-...). Se genera en
console.anthropic.com → API Keys. Es la "cuenta de gas" de la cocina: sin ella, la
IA no responde.
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.
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
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).
cd ~/anesarte/setter-instagram/worker npx wrangler loginSe abre el navegador pidiéndote autorizar: acepta "Allow". Es como firmarle un permiso al mensajero para entrar a tu bodega de Cloudflare.
npx wrangler deployAl 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.
npx wrangler secret put SETTER_SHARED_SECRET npx wrangler secret put ANTHROPIC_API_KEY npx wrangler secret put MANYCHAT_API_TOKENQué 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).
/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
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=...).
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.
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?
• 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
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/setterLuego, 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í.
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.
$. 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
{{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ó.
{{setter_accion}} (la decisión
que tomó la IA) y dirija el tráfico. Crea estas 7 ramas:
| Si setter_accion es… | Rama | Qué hace |
|---|---|---|
continuar | LOOP | Vuelve la flecha al User Input: siguen conversando. |
vender | VENDER | Envía el link de Mercado Pago + tag + vuelve al User Input. |
agendar | AGENDAR | Manda el link de Calendly + tag calificado. |
ofrecer_lowticket | LOWTICKET | Tag interesado + vuelve al User Input. |
nutrir | NUTRIR | Tag nutrición + cierre suave. |
cerrar | CERRAR | Tag descalificado + fin (sin mensaje extra). |
humano | HUMANO | Tag handoff + avisarte a ti + fin. |
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.
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.
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.
{{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).
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ú?
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. 🙏
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).
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).
New Automation → Trigger =
"Tag applied" → tag setter-agendado-llamada. Es decir: "cuando a
alguien le pongan esta calcomanía, arranca esto".
{{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).
{{setter_dolor}}).
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?").
setter_fecha_llamada menos 1 hora. Send Message de
anticipación final.
• 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.
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.
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.
Integrations → API & Webhooks → Personal Access
Tokens → crear uno → cópialo y guárdalo con los demás secretos.
TU_PERSONAL_ACCESS_TOKEN por el token de g38):
curl -H "Authorization: Bearer TU_PERSONAL_ACCESS_TOKEN" https://api.calendly.com/users/meEn la respuesta busca
current_organization: es una dirección tipo
https://api.calendly.com/organizations/XXXX.... Cópiala: la necesitas
en el siguiente paso.
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.
cd ~/anesarte/setter-instagram/worker npx wrangler secret put CALENDLY_SIGNING_KEYCuando 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.
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)
/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.
https://api.telegram.org/botTU_TOKEN/getUpdatesEn el texto que aparece, busca
"chat":{"id": seguido de un número (ej.
812345678). Ese número es tu chat_id: el secreto #2.
cd ~/anesarte/setter-instagram/worker && npx wrangler secret put TELEGRAM_BOT_TOKEN
cd ~/anesarte/setter-instagram/worker && npx wrangler secret put TELEGRAM_CHAT_IDListo: 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.)
Capa 2 — La app de ManyChat (para responder ahí mismo)
| Aviso | Significa | Tu 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. |
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.
• 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.
• 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.