00La tesis
La interfaz declara la frontera
El mapa curso→API dejó una lección incómoda: no todo lo que enseña el curso vive en la API. Hay capacidades con endpoint verificado, hay criterio que ningún endpoint reemplaza, y hay cosas que Meta bloqueó por versión o dejó solo en Ads Manager. En vez de esconder esa frontera, el módulo la firma en cada control con cinco sellos: tres dicen el poder del control, dos el origen del dato. Es la regla C13 hecha interfaz: nada finge llamar a Graph, y el «quién» nunca pretende venir de Meta.
Este control ejecuta un path verificado del mapa (`02-api-map.md`). El sello lleva el endpoint al lado — si no está en el mapa, el botón no existe.
Zona de criterio: aprobar gasto, escribir ángulos, narrar resultados. El admin da estructura y datos; la decisión queda registrada con nombre y hora.
Meta lo cerró: por versión (ASC legacy desde v24), por producto (solo Ads Manager) o por política. La UI lo dice con la cita — nunca lo disfraza de botón.
Dato que ya es de Mogos: la conversación en Bandeja, el cliente, la cotización, la orden. Meta no entrega personas — el «quién» vive aquí, y por eso es el activo.
Comportamiento web con consentimiento: UTMs, fbclid, landing, funnel cotización→orden (`apps/client/lib/posthog/`). Sin opt-in no hay fila — y la UI lo dice.
Fuente: docs/meta-ads/02 y 05 · counts: api_mapped=18 · not_in_api=13 · el «quién» nunca sale de Graph
02Home del módulo
Salud primero, métricas después
Lo primero que se ve no es una campaña: es si el sistema está sano para operar. El GATE V completo (los 8 checks de `03-quality-gates.md`) con evidencia, la cuenta conectada con sus scopes, el gasto contra el tope, la fase de aprendizaje de cada campaña — y el kill switch a un click de distancia, siempre.
Gasto · 7d API
$1,203.40
mes: $4,812.40 de $6,000 · spend_cap
Resultados Mogos · 7d First-party
12 · 3 · 9
cotizaciones · órdenes · chats WA atribuidos
Costo por cotización 7d Humano
$41.20
▼ 12% · CPA Meta de referencia: $7.12
Gasto con atribución PostHog
72%
28% ciego: sin UTM o sin consentimiento
GATE V · lectura autorizada 8 / 8
- V1✓App Business en el BM de Mogos
- V2✓Cuenta act_1029384756 documentada
- V3✓System user solo ads_read · prueba negativa 12/08
- V4✓Token fuera del repo · vault
- V5✓Acceso Full · 500+ llamadas/15d
- V6✓Versión pineada v25.0
- V7✓Log de toda llamada Graph
- V8✓Freno de rate limit al 80%
Aprendizaje API
- SUCCESSVENTAS-VE-LOCKER-2026-08
- LEARNINGLEADS-VE-AEREO-2026-08 · 31/50 conv.
- SUCCESSVENTAS-VE-CATALOGO-2026-08
Con menos de ~50 conversiones/semana el sistema no sale de aprendizaje — clase 03.
Kill switch Humano
Pausa todas las campañas en lote (POST /{campaign_id} · status PAUSED). Pide confirmación con nombre. Último simulacro: 12/08 · 3 min 40 s.
Visible en cada pantalla del módulo — nunca a más de un click.
Pausar todo ahora- El toggle Sandbox/Live vive en la barra: el sandbox acepta todo pero no entrega ni gasta — ahí corre la Fase 2 del camino agéntico.
- Si un check del GATE V cae, el módulo entero degrada a solo-lectura con el estado correspondiente (sección 15).
Clases 01 · 03 · 10 · Gates V1–V8 · Fases 0–1 de 04-agentic-path.
03Campañas
La lista lee como el negocio
Una fila por campaña con las métricas que el curso enseñó a leer (clase 06): CTR para el creativo, CPC para el costo de atención, CPA para la verdad, ROAS para el negocio y frecuencia para la fatiga. La nomenclatura de la clase 12 hace que el nombre solo ya diga objetivo, país, producto y mes.
| Campaña | Objetivo | Presupuesto | Estado | Aprendizaje | Gasto | CTR | CPC | CPA | ROAS | Frec. |
|---|---|---|---|---|---|---|---|---|---|---|
| VENTAS-VE-LOCKER-2026-08 | OUTCOME_SALES | CBO $60/día | Activa | SUCCESS | $1,240.10 | 2.1% | $0.38 | $6.90 | 3.4× | 1.8 |
| LEADS-VE-AEREO-2026-08 | OUTCOME_LEADS | ABO $25/set | Activa | LEARNING | $486.00 | 1.6% | $0.52 | $3.10 | — | 1.3 |
| VENTAS-VE-CATALOGO-2026-08 | OUTCOME_SALES | CBO $45/día | Activa | SUCCESS | $3,086.30 | 2.4% | $0.31 | $7.40 | 2.9× | 2.1 |
| MENSAJES-VE-WHATSAPP-2026-09 | CTWA | ABO $18/set | En pausa · espera aprobación | — | $0.00 | — | — | — | — | — |
| VENTAS-VE-CATALOGO-2026-09 | OUTCOME_SALES | CBO $45/día | Meta revisa | — | $0.00 | — | — | — | — | — |
Lectura: GET /act_{id}/campaigns + GET /{campaign_id}/insights · header de uso BUC al 34% · datos cada 5 min.
- ABO/CBO es una columna, no una configuración escondida — la clase 11 la volvió decisión de negocio.
- «En pausa · espera aprobación» y «Meta revisa» son estados distintos: uno es nuestro (humano), el otro es de Meta (API).
Clases 05 · 06 · 11 · 12 — leer campañas con criterio.
04Detalle
Campaña → conjunto → anuncio, sin perderse
La jerarquía de Meta en un solo panel: a la izquierda el árbol con estado y aprendizaje por nivel; a la derecha los insights del nivel seleccionado con breakdowns, ventana de atribución y el trabajo asíncrono cuando el reporte es grande.
Estructura API
- VENTAS-VE-LOCKER-2026-08 CBO $60
- Broad VE 18–65 SUCCESS
- — Locker gancho dolor · Activo
- — Locker prueba social · Activo
- — Locker contraste · Pausado
- Remarketing web 30d SUCCESS
- Lookalike compradores 1% LEARNING
- Broad VE 18–65 SUCCESS
Duplicar sin reiniciar aprendizaje: POST /{adset_id}/copies — práctica de la clase 15.
Insights · conjunto «Broad VE 18–65»
Reporte grande en cola API
job report_run_id 664102938 · 68% · se consulta cada 30 s · expira a los 30 días
- Los cortes disponibles son los del mapa: edad, género, país, plataforma de publicación — cada chip lleva su parámetro real.
- El nivel seleccionado cambia el edge: GET /{campaign_id}/insights, /{adset_id}/insights o /{ad_id}/insights.
Clases 06 · 13 · 15 — diagnóstico por nivel.
05Canales · la puerta
Entras a Instagram y estás en Instagram
La pregunta de Carlos tiene respuesta de dos capas. ¿Se puede ver por canal con la API? Sí, derivándolo: no existe GET /instagram/campaigns ni «el canal» como carpeta — el enum documentado de publisher_platforms es facebook · instagram · threads · messenger · audience_network, y WhatsApp ni siquiera está ahí: es destino (CTWA). Por eso cada canal es una casa que Mogos arma con tres materiales: insights rebanados por plataforma (API), destino del anuncio (API) y lo first-party que ya es nuestro. Una habitación por pregunta — no un filtro sobre la tabla de campañas.
Instagram API · derivado
@mogosgroup · instagram_user_id
gasto 7d 3 · 1
bandeja: atendidas · por atender 3
campañas con entrega 6
cotizaciones vía UTM
WhatsApp First-party destino
+58 412 MOGOS · Bandeja de Entrada
gasto CTWA 7d 4 · 2
bandeja: atendidas · por atender 1
campaña CTWA 6 + 3
chats con · sin referral
Facebook API · derivado
$181.30 · 4 campañas · 3 cotizaciones
Bandeja: este canal no existe en Conversation — el enum trae WHATSAPP · INSTAGRAM · TIKTOK.
Messenger API
$0.00 · sin campañas CTM activas
Bandeja: sin canal en Conversation — si algún día entra, la casa lo contará.
Audience Network · Threads
$28.80 AN · Threads: en el enum, sin gasto aún
La casa se arma con GET /{nivel}/insights?breakdowns=publisher_platform + destino del creative + Bandeja/PostHog. Enum citado de publisher_platforms: facebook · instagram · threads · messenger · audience_network (placement-targeting, v25.0) — WhatsApp no está: entra por destino.
- Una campaña Advantage+ vive en varias casas a la vez: al entrar a Instagram ves su trozo IG, nunca «esta campaña es de IG».
- Threads aparece porque el enum lo trae — cero teatro: sin gasto, se dice sin gasto.
- «Atendida / por atender» usa la misma regla de la Bandeja, no una inventada: conversación activa en modo humano donde lo último lo dijo el cliente (lastUserMessageAt ≥ lastMessageAt) o hay handoff PENDING — el predicado unanswered de messaging-admin.service.ts. El inbox ya conoce TIKTOK: cuando haya pauta ahí, la casa nace con bandeja.
Enums citados: publisher_platforms · instagram_positions · whatsapp_positions:"status" · messenger_positions (doc placement-targeting v25.0).
06Canales · Instagram
La casa Instagram: todo lo que es IG, en un solo lugar
Dentro del canal hay habitaciones, no un filtro: resumen, campañas con su trozo IG, creativos que corrieron ahí, posiciones (el enum real: stream · story · reels · explore…), quién llegó con utm_medium=instagram, y la señal que alimenta la entrega. El Resumen junta una vista de cada habitación.
- La casa
- Resumen
- Campañas y anuncios
- Creativos que corrieron
- Posiciones
- Quién llegó
- Señal y públicos
Qué funcionó aquí API · trozo IG
| Campaña | Gasto IG / total | Cotiz. IG |
|---|---|---|
| VENTAS-VE-LOCKER-2026-08 también en Facebook | $142.10 de $412.00 | 5 |
| VENTAS-VE-CATALOGO-2026-08 | $59.80 de $618.40 | 1 |
El badge es la honestidad Advantage+: Meta eligió el sitio; aquí ves el trozo, el total vive en la campaña.
Posiciones API
Nombres del enum real (stream · story · explore · explore_home · reels · profile_feed · ig_search · profile_reels); la barra pinta lo que Insights devuelva.
Creativos que corrieron aquí
Vista previa por posición: GET /{ad_id}/previews.
Quién llegó desde IG PostHog
El «quién» de IG es UTM nuestro — Meta no entrega personas por canal.
La Bandeja de esta casa First-party 3 atendidas 1 por atender
DMs de Instagram en Conversation (channel=INSTAGRAM). «Por atender» = la regla real del inbox: activa, en modo humano, y lo último lo dijo el cliente (lastUserMessageAt ≥ lastMessageAt) o hay handoff pendiente.
Abrir la cola → /inbox?channel=INSTAGRAM&filter=unansweredHumano Instagram no se gestiona aparte: el algoritmo reparte entre casas. Lo que sí es de esta casa: sus creativos, sus posiciones y su gente.
Identidad IG del mapa (gap-agent Page/IG) · breakdowns VERIFIED · enum de posiciones citado.
07Canales · WhatsApp
La casa WhatsApp: el canal de Mogos, no un Ads Manager falso
WhatsApp no es un publisher_platform (el enum citado no lo trae) — es destino. Su casa se arma con lo que Mogos ya tiene: campañas CTWA, los creativos que llevan al chat, la Bandeja con sus hilos (con y sin referral), y las plantillas que usamos alrededor del anuncio. Existe además whatsapp_positions: "status" como targeting documentado — si algún día pautamos en Status, la habitación ya tiene percha.
- La casa
- Resumen
- Campañas CTWA
- Conversaciones
- Plantillas de ads
- Quién llegó
Campañas que llevan aquí API · destino
| Campaña | Gasto 7d | Chats |
|---|---|---|
| MENSAJES-VE-WHATSAPP-2026-09 Activa | $126.00 | 6 |
Costo por chat con cliente: $21.00 — la vara elegida por ops para este canal.
Conversaciones de esta casa First-party
Cada hilo abre en la Bandeja real; la cola completa: /inbox?channel=WHATSAPP&filter=unanswered. Esta casa no duplica el inbox: lo enlaza.
Plantillas alrededor del anuncio First-party
Las plantillas viven en el WABA de Mogos (registro propio) — el anuncio abre la puerta, la plantilla continúa la conversación.
Status, por si acaso API
La doc de targeting trae whatsapp_positions: "status". Hoy Mogos no pauta ahí: la habitación existe, vacía y dicha — sin gasto, sin filas.
Bloqueado Lead ads dentro de Messenger sigue fuera (v24+); y no hay «Ads Manager de WhatsApp» que imitar — esta casa es de Mogos.
- Vacíos honestos listos: «no hay campañas CTWA» invita a crear una (queda en pausa); «hay chats sin referral» cuenta cuántos y por qué no se atribuyen.
Clase 16 · CTWA VERIFIED · whatsapp_positions citado · Bandeja y plantillas = activo Mogos.
08Resultados Mogos · qué funcionó
Éxito no es CTR: es en qué se volvió
Ads Manager rankea por métricas de Meta. Mogos rankea por lo que entró al negocio: cotizaciones, órdenes, conversaciones que se volvieron cliente. La definición es nuestra y está a la vista — y al abrir una campaña no cae un dump de columnas: cae el cruce, la cadena completa de gasto a margen.
Éxito para Mogos = Humano
Costo por cotización enviadaCosto por ordenCosto por chat WA con cliente CTR y likes no rankean aquí — son diagnóstico, no éxito.| Campaña | Gasto 7d | Cotizaciones | Costo / cotización | CPA Meta | Aprendizaje | Fuente del «quién» |
|---|---|---|---|---|---|---|
| VENTAS-VE-LOCKER-2026-08 | $412.00 | 9 | $45.78 | $6.90 | SUCCESS | PostHog |
| MENSAJES-VE-WHATSAPP-2026-09 | $126.00 | 6 chats | $21.00 | — | LEARNING | First-party |
| VENTAS-VE-CATALOGO-2026-08 | $618.40 | 3 | $206.13 | $7.40 | SUCCESS | sin UTM · ciego |
El cruce · VENTAS-VE-LOCKER-2026-08
Dos verdades, cada una con su fuente: CPA Meta $6.90 (purchase del píxel) · costo por cotización Mogos $45.78 (funnel first-party). El cruce no las mezcla: las enfrenta.
- La fila «sin UTM · ciego» existe a propósito: el catálogo dice cuánto gasto no podemos explicar — y empuja la guarda del wizard.
- Insights aporta gasto y CPA (GET /{campaign_id}/insights); todo lo demás de la cadena es tubería Mogos.
Clases 06 · 13 · 14 — leer con criterio; el ranking es de negocio.
09Resultados Mogos · dónde
Instagram, Facebook o donde Meta decidió
El «dónde» agregado sale de Insights con breakdowns=publisher_platform,platform_position (VERIFIED; también existen device_platform e impression_device). El «quién por plataforma» solo existe si el UTM lleva la plataforma — Meta no da personas por placement, y la pantalla lo dice.
VENTAS-VE-LOCKER-2026-08 · gasto por plataforma y posición API
| Plataforma · posición | Gasto | Clics | Cotizaciones* |
|---|---|---|---|
| facebook · feed | $181.30 | 204 | 3 |
| instagram · stream | $142.10 | 231 | 5 |
| instagram · story + reels | $59.80 | 88 | 1 |
| audience_network · classic | $28.80 | 41 | 0 |
*Cotizaciones vía UTM con utm_medium={publisher} — lectura PostHog, no de Meta. Nombres tomados del enum de targeting citado (placement-targeting v25.0: facebook · instagram · threads · messenger · audience_network; posiciones feed/stream/story/reels/…); los valores de Insights se pintan tal como los devuelva la API.
¿Quién eligió el sitio?
Meta eligió Advantage+ placements = campos de placement omitidos (así está en el mapa).
Posición fijada nosotros escribimos publisher_platforms en el conjunto.
Personas por placement Bloqueado
No existe GET /ad/clicked_users. Meta entrega agregados; el feed de personas es siempre tubería Mogos.
Clase 09 (placements broad) · 13 (breakdowns) — el dónde agregado es de Meta; el dónde con nombre es nuestro.
10Resultados Mogos · quién (web)
Del clic a la cotización, con nombre cuando lo hay
PostHog ya vive en la página de Mogos (apps/client/lib/posthog/: provider, identify al login, consentimiento opt-in, funnel cotización→orden). Lo que falta —y esta pantalla asume construido— es el catálogo de atribución: utm_* + fbclid guardados en la persona. Cada fila declara si es un cliente identificado o un visitante anónimo.
| Persona | Llegó a | utm_campaign | fbclid | Identidad | Se volvió |
|---|---|---|---|---|---|
| Andrea V. | /calculator | VENTAS-VE-LOCKER-2026-08 | sí | user Mogos #8841 | Cotización #C-2214 → orden $618 |
| visitante an-39f2 | / | VENTAS-VE-LOCKER-2026-08 | sí | anónimo · sin registro | navegó 2 páginas y salió |
| Luis P. | /register | VENTAS-VE-LOCKER-2026-08 | no | user Mogos #9002 | se registró · aún sin cotizar |
| entrada directa | /calculator | sin UTM | — | anónimo | cotizó — no sabemos desde qué anuncio |
Lo que ya existe PostHog
Provider + identify al login + eventos Zod del funnel (calculadora, cotización, registro, envío). Replay con máscara. Token vía NEXT_PUBLIC_POSTHOG_TOKEN.
Lo que falta Por construir
Catálogo utm_* / fbclid / campaign_id en la persona y en cada evento del funnel — hoy no existe en apps/client. Sin eso, esta tabla no tiene columnas de anuncio.
- «Solo con consentimiento» no es un filtro decorativo: sin opt-in PostHog no captura, y la fila no existe. El % ciego del home sale de aquí.
- La fila «entrada directa» mantiene la honestidad: cotizó, pero atribuirla a Meta sería inventar.
Sello PostHog — comportamiento web propio; Meta nunca entrega este nivel.
11Resultados Mogos · quién (WhatsApp)
El chat que llegó desde un anuncio, dicho con pruebas
Cloud API manda en el primer mensaje de un CTWA un bloque referral (source_id, source_url, headline, ctwa_clid). La Bandeja ya existe; el hueco natural para persistirlo es Conversation.context — hoy un JSON vacío por defecto. Cuando la conversación tiene userId, el «quién» es un cliente Mogos con nombre; si no, es un teléfono en inbox. Y si no hay referral, se dice.
«Vi lo del locker, ¿cuánto sale traer un teléfono?»
anuncio: MENSAJES-VE-WHATSAPP-2026-09 · DOLOR-V1 · ctwa_clid a91…f3 · headline «¿Tu carga sigue en camino?»
«info del envío marítimo por favor»
anuncio: MENSAJES-VE-WHATSAPP-2026-09 · el teléfono vive en inbox; si se registra, el hilo hereda el cliente
Llegó al WhatsApp — no sabemos de qué anuncio: el primer mensaje no trajo referral.
El deep-link cierra el loop
«Abrir en Bandeja» lleva a admin.mogos.com/inbox?conversation=88412 — el hilo real, con la operadora respondiendo. El activo no duplica el inbox: lo enlaza.
Persistir el referral Por construir
El webhook de Instagram ya tipa referral de stories; el CTWA de WhatsApp aún no se guarda. Destino natural: Conversation.context (schema.prisma:2013, hoy @default("{}")).
Clase 16 (mensajes) — la conversación es el resultado; el referral es la prueba.
12Alta con guardas
El agente propone, el humano dispone
El wizard puede llenarlo una persona o el agente de Mogos — da igual: las guardas son las mismas. El payload se ve completo antes de tocar Meta, el dry-run es el default, el estado PAUSED va fijo en el código, y activar es otra acción, con otro registro. Los checks C del gate acompañan todo el flujo.
Objetivo API
VentasLeadsTráficoMensajesEl objetivo valida los conjuntos hijos — no se cambia después sin recrear (clase 03).
Categoría especial · obligatoria API
NONE — comercio generalViviendaEmpleoCréditoLa API lo exige en toda creación. Declarar una categoría restringe la segmentación (18–65+, sin lookalikes).
Presupuesto
CBO — a nivel campañaABO — por conjunto$ 40.00USDTope interno de Mogos: $150/día por campaña (check C6). Por encima, el formulario no envía.
Segmentación
Broad VE — el sistema aprendeRemarketing web 30dLookalike compradoresBroad como default — clases 02 y 09: los públicos entran como señal, no como jaula.
Creativo y destino
Locker · gancho dolor + carruselElegir de la libreríaSe arma en la sección Creativos (object_story_spec) y se referencia aquí.
mogos.com/calculator?utm_source=meta&utm_medium={publisher}&utm_campaign={nombre}&utm_content={ad_id}Sin la plantilla, el envío a aprobación se bloquea: es lo que vuelve legible «Resultados Mogos». El fbclid viaja solo y PostHog lo guarda. Si la campaña es CTWA, aquí se recuerda: el referral del primer mensaje se persiste en la conversación.
name: "VENTAS-VE-LOCKER-2026-09"
objective: "OUTCOME_SALES"
special_ad_categories: ["NONE"]
daily_budget: 4000 · centavos
buying_type: "AUCTION"
status: "PAUSED" · fijo en código
ref externa: mogos-ads-2026-08-30-a41
Guardas del envío
- C3✓Se crea en PAUSED, sin excepción
- C5✓Categoría especial declarada
- C6✓Bajo el tope interno
- C7✓Ref externa única — sin duplicados
- C13✓Solo paths VERIFIED del mapa
- UTM✓Plantilla UTM en el destino — sin UTM no se aprueba
Aprobación registrada Humano
Andrea Ortega · 30/08/2026 · 11:42 — «Aprobar y crear en pausa». La activación será otra aprobación, desde el detalle, nunca desde este flujo.
- Después de crear: conjunto (POST /act_{id}/adsets), creativo (/adcreatives) y anuncio (/ads) siguen el mismo patrón payload-visible.
- Fase 2 del camino agéntico: este mismo wizard corre idéntico contra la cuenta sandbox antes de tocar la real.
Clases 04 · 05 · Gates C3 C5 C6 C7 C13 · Fases 2–3.
13Creativos
El anuncio es el targeting
La clase 07 dio la estructura (gancho, contexto, valor, prueba, CTA) y la 08 el sistema de variaciones. El builder arma el object_story_spec; las variaciones van en asset_feed_spec con el conjunto en dinámico; y las mejoras Advantage+ se prenden por feature, nunca en bloque.
Historia del anuncio API
Variaciones API
3 ganchos × 2 cuerpos × 2 imágenes = 12 combinaciones — el sistema reparte y aprende (clase 08).
- ✓Gancho dolor · «¿Tu carga sigue en camino?»
- ✓Gancho beneficio · «Tu carga, visible 24/7»
- ✓Gancho contraste · «Otros prometen. Mogos muestra.»
Mejoras Advantage+ API
- ✓Optimizar brillo OPT_IN
- –Música automática OPT_OUT
- –Reescritura de texto OPT_OUT · la voz es nuestra
Vista previa por ubicación
Feed FB · Stories IG · Reels — GET /act_{id}/generatepreviews antes del anuncio, GET /{ad_id}/previews después.
- El copy de los ganchos lleva sello Humano dentro del builder: la estructura la da el admin, la voz la pone el equipo.
- Imagen y video suben por act_{id}/adimages y /advideos a la librería de la cuenta.
Clases 07 · 08 · 09 — creativo como palanca principal.
14Públicos
Audiencias con origen y candados honestos
Cada audiencia dice su subtipo y su origen. Subir clientes hashea en la máquina del equipo antes de salir (SHA256, exigencia de la API). Y donde Meta no da endpoint — crear audiencias guardadas — el panel lo dice con todas las letras en vez de esconder el botón.
| Audiencia | Subtipo | Origen | Tamaño aprox. | Estado |
|---|---|---|---|---|
| Compradores 180d | CUSTOM | Archivo de clientes · hasheado | 8,420 | Lista |
| Visitantes web 30d | WEBSITE | Píxel Mogos Web | 31,800 | Lista |
| IG engagement 365d | ENGAGEMENT | @mogosgroup | 54,200 | Lista |
| Lookalike compradores 1% VE | LOOKALIKE | Semilla: Compradores 180d | 210,000 | Procesando · hasta 24 h |
Crear audiencia API
Subtipos del mapa: CUSTOM · WEBSITE · ENGAGEMENT · LOOKALIKE. Lotes de 10,000; hasta 24 h de proceso; exclusiones directo en el targeting del conjunto.
Audiencias guardadas · solo lectura Bloqueado
La API las lista (GET /act_{id}/saved_audiences) pero no permite crearlas — lo dice su referencia. Se crean en Ads Manager; aquí se ven y se usan.
- El botón de subir dice lo que pasa: el hasheo ocurre antes de salir de la máquina — la API rechaza PII en claro.
- Remarketing de carritos (clase 03): audiencia WEBSITE filtrada por evento AddToCart sin Purchase.
Clases 03 · 09 — públicos como señal.
15Píxel y señal
La señal es el producto
La clase 02 lo dejó claro: sin señal el sistema no optimiza. El panel muestra el píxel, la calidad de coincidencia y el flujo de eventos con su deduplicación navegador+servidor — el event_id pareado es visible, no magia.
Píxel API
Píxel Mogos Web
pixel 1447620923 · único de la cuenta
Calidad de coincidencia
7.2 / 10
EMQ · GET /dataset_quality
Eventos 24 h
1,982
62% con par navegador + servidor
Flujo de eventos API
Servidor: lote ≤1,000 eventos · hasta 7 días hacia atrás · dedup por event_id dentro de 48 h.
Modo prueba API
Eventos con test_event_code TEST7231 caen en Test Events y no ensucian producción. La regla del mapa es literal: «quítalo antes del payload real» — el admin lo quita solo al salir de sandbox.
Puente con PostHog PostHog Por construir
Los mismos hitos del funnel (calculadora → cotización → registro → orden) se mandan a CAPI con external_id = user id Mogos y el mismo event_id que el evento PostHog: una sola verdad, deduplicada en ambos lados, y los UTMs viajan también en custom_data.
- Conversiones personalizadas (act_{id}/customconversions, máx. 100) para «Cotización enviada» sin tocar el código del sitio.
Clases 02 · 04 · 05 — señal confiable antes de gastar.
16Multi-objetivo
Tráfico, leads y mensajes — cada uno con su verdad
La clase 16 enseñó a repartir presupuesto por objetivo según los datos. El módulo lo refleja: tres flujos con sus endpoints reales — y el único pedazo que Meta cerró (lead ads dentro de Messenger) aparece cerrado, con la versión que lo cerró.
Tráfico API
Optimiza a LINK_CLICKS hacia el cotizador. Alimenta el remarketing web 30d — el tráfico de hoy es la audiencia de mañana.
Leads API
Formulario «Cotización aérea VE» con preguntas de calificación. Los leads llegan por webhook en tiempo real (leadgen) y caen a la Bandeja de Entrada del admin; export CSV disponible.
Permisos: leads_retrieval + pages_manage_ads · App Review + verificación del negocio (en modo desarrollo no hay leads).
Mensajes API
Click-to-WhatsApp al número de Mogos con mensaje de bienvenida; click-to-Messenger con destination_type=MESSENGER. Las conversaciones caen en la Bandeja de Entrada.
Lead ads dentro de Messenger Bloqueado
Desde v24.0 solo se crean en Ads Manager. El admin no lo finge: enlaza a Ads Manager con contexto.
Clases 03 · 16 — objetivo según los datos del negocio.
17Catálogo
Los productos se venden solos, el feed se cuida
La clase 17 armó el catálogo y sus anuncios dinámicos. Aquí: el feed con su revisión diaria, los conjuntos de productos, y el creativo plantilla que Meta llena por persona — con la cadena completa de endpoints confirmada en el mapa.
Catálogo Locker Mogos API
128 productos · feed diario 06:00 Al día
- ✓Feed programado /product_feeds
- ✓Carga manual disponible /uploads
- ✓Lote de cambios /items_batch
Permiso catalog_management · roles del catálogo asignados desde el BM.
Conjuntos de productos API
Cada conjunto alimenta una campaña de ventas por catálogo; el remarketing dinámico persigue lo visto y lo abandonado.
Creativo plantilla API
{{product.name}}
{{product.price}} · llega con Mogos
Meta rellena por persona: «Router WiFi 6 — $84.90 · llega con Mogos». Vista previa antes de activar.
Clase 17 — catálogos y anuncios dinámicos, cadena completa confirmada.
18Reglas y nombres
El sistema se cuida solo de noche
Las reglas de la clase 12 corren en Meta, no en un cron nuestro: adrules_library evalúa y ejecuta aunque nadie mire. El admin las redacta en lenguaje de negocio y muestra la traducción exacta. La nomenclatura tiene validador en vivo: si el nombre no cuenta la campaña, no pasa.
Regla activa API
SI CPA > $12.00 durante 7 días Y gasto > $50
ENTONCES pausar el anuncio y avisar a #mogos-ads
Se traduce a evaluation_spec + execution_spec + schedule_spec — visibles al expandir, nunca editados a mano.
Nomenclatura viva Humano API
Patrón OBJETIVO-PAÍS-PRODUCTO-AAAA-MM. La convención es nuestra; el campo name la lleva a los tres niveles.
Clase 12 — nombres que informan, reglas que apagan.
19Reportes
Los datos son de la API, la historia es nuestra
Las columnas guardadas y las tablas dinámicas que el curso armó en Ads Manager (clase 13) viven aquí, en el admin — la API entrega los datos, las vistas son nuestras, y eso convierte un NOT_IN_API en una ventaja. La clase 14 aporta la plantilla de narrativa: es un formulario para humanos, no un botón de IA.
Vista guardada · «Semanal dirección» API
| Semana | Gasto | Compras | CPA | ROAS |
|---|---|---|---|---|
| 18–24 ago | $1,102.40 | 148 | $7.45 | 3.0× |
| 25–31 ago | $1,239.80 | 174 | $7.12 | 3.1× |
Export XLS vía export_report — endpoint fuera del versionado Graph; el admin lo trata como cortesía, no como contrato.
Narrativa de la semana Humano
Clases 13 · 14 — Contexto → Hallazgo → Interpretación → Acción.
20Loop y escala
Lanzar, medir, decidir, iterar, escalar
El árbol de decisión de la clase 15 como interfaz: tres síntomas, cada uno con su diagnóstico y su acción — y las acciones distinguen su sello. Escalar existe en dos direcciones; la heurística del 20–30% acompaña como consejo, porque es criterio, no un parámetro de Graph.
No gasta
Señal insuficiente, público demasiado cerrado o presupuesto inviable. Revisar píxel y abrir segmentación.
Gasta y no convierte
CTR alto + conversión baja = el problema está fuera de Meta: oferta, landing, precio, fricción. Diagnóstico humano.
Convierte caro
Escalar lo que funciona o recortar lo que no. Duplicar en vez de editar — no se reinicia el aprendizaje.
Escala vertical API Humano
Subir daily_budget con aprobación. El consejo acompaña, no bloquea: 20–30% gradual y nada de tocar las primeras 24–48 h — heurística de las clases 10 y 18, no regla de la API.
Advantage+ ventas API
El estado Advantage+ de cada campaña se lee (advantage_state_info). Crear ASC con smart_promotion_type está bloqueado desde v24 — el flujo moderno es la campaña Advantage+ de ventas normal.
ASC legacy · v24+Clases 10 · 15 · 18 — sistemas, no campañas.
21Auditoría y límites
Todo queda escrito, nada se agota en silencio
Cada llamada Graph —humana o del agente— deja fila: quién, qué path, con qué scope, qué respondió. Los dos tokens viven separados: ads_read para todos los que leen, ads_management solo en el servicio backend. Y el rate limit se administra como presupuesto, leyendo el header de Meta en cada respuesta.
Registro de llamadas API
Presupuesto de llamadas API
header X-Business-Use-Case-Usage
Al 80% el cliente frena solo (check V8). Errores 17 · 613 · 80004 mapeados a espera, nunca a reintento ciego.
Dos llaves
ads_read · todos los roles con ANALYZE
ads_management · solo el system user del backend — token sin expiración, jamás en un navegador.
Gates V3 · V7 · V8 · C9 · C11 — el porqué de cada fila.
22Estados
Los días malos también están diseñados
Siete estados reales del sistema, cada uno con qué pasó y qué hacer — en la voz del admin, sin disculpas vacías.
VacíoSin campañas todavía
La cuenta está sana y conectada. La primera campaña nace en pausa y pasa por aprobación.
→ Crear la primera campaña
Sin tokenLa llave no responde
El vault no entregó el token o fue invalidado. El módulo queda en solo-lectura de datos cacheados.
→ Revisar V3/V4 en Configuración
Error GraphMeta devolvió 190
Token inválido o vencido. Guardamos fbtrace_id 8f2…c1 para soporte y no reintentamos a ciegas.
→ Regenerar token del system user
SandboxEntorno de práctica
Todo funciona, nada entrega ni gasta: cero impresiones por diseño. Banner visible en cada pantalla.
→ Salir a live exige GATE C completo
Sin permisoTu rol no escribe
Tienes ANALYZE: puedes ver todo. Crear o activar exige ADVERTISE y aprobación registrada.
→ Pedir el rol en Roles y permisos
LímitePresupuesto de llamadas agotado
Meta pide esperar (~4 min según el header). Las lecturas siguen del caché; la cola de escritura espera.
→ Se reanuda solo · nada se perdió
En revisiónMeta revisa el anuncio
Estado PENDING_REVIEW: sin acción posible hasta el veredicto. Si vuelve DISAPPROVED, se muestra el motivo — editar y reenviar, no insistir.
→ Nada que hacer aquí: es de Meta
Sin PostHogLa atribución web está a oscuras
El token de PostHog no responde. Insights de Meta siguen; «Quién llegó · web» queda vacío y el % ciego sube — se muestra, no se rellena.
→ Revisar NEXT_PUBLIC_POSTHOG_TOKEN
Sin consentimientoLa persona dijo que no
Sin opt-in no hay captura ni fila — por diseño. El gasto de esa visita cuenta como ciego y así se reporta.
→ Nada que arreglar: es la regla
Sin referralEl chat llegó sin origen
El primer mensaje no trajo bloque referral: hay conversación pero no anuncio de origen. El hilo vive en Bandeja; aquí figura como «origen desconocido».
→ Se atiende igual — atribuir sería inventar
Post-processing y revisión — la API decide el ritmo, el admin lo cuenta.
23Zona humana
Lo que ningún endpoint hace
El curso insistió más en criterio que en botones. Estas cuatro superficies existen en el módulo justamente para no pretender que son API.
Andrómeda no se configura Humano
El algoritmo de entrega no tiene panel: se entrena con creativo, oferta y señal (clase 02). El módulo muestra la salud de esas tres palancas en vez de un falso dashboard de Andrómeda.
Ángulos y voz Humano
Problema, deseo, objeción y caso de uso (clase 07) son trabajo de escritura. El builder da la estructura de cinco bloques; las palabras son del equipo — la reescritura automática de Meta queda OPT_OUT.
Espiar con criterio Humano
La Biblioteca de Anuncios (clase 08) es otro producto de Meta, fuera de la Marketing API — quedó como gap en el mapa. El módulo enlaza afuera y da la plantilla de análisis: hooks, mensajes, CTAs, destino.
El playbook Humano
Presupuesto 3–5× el CPA esperado, no tocar nada 24–48 h, consistencia sobre intensidad (clases 10 y 18). Aparecen como consejos en el momento justo — nunca como validaciones que fingen ser de Meta.
El éxito lo define ops Humano
Costo por cotización, por orden o por chat con cliente: la vara la elige el equipo en «Resultados Mogos» y queda a la vista. Andrómeda optimiza lo suyo; la definición de negocio no se delega.
Incrementalidad, sin teatro Humano
La optimización de conversión incremental está prohibida en la API desde 2022 (así consta en el mapa). El activo compara fuentes y enfrenta verdades — no finge un experimento de incrementalidad que Meta no ofrece.
Clases 01 · 02 · 07 · 08 · 10 · 14 · 18 — el criterio es la diferencia.