# Códigos de error: Errores de Meta (Graph API)

> Códigos numéricos que devuelve la Graph API de Meta al enviar o en un estado `failed` de WhatsApp. Boost los traduce en `src/channels/send/meta/meta-graph-errors.ts` (envío: límite = 429 con el tiempo de Meta, permanente = 502) y los clasifica en `src/interactions/interactions-message-status.ts` (`failure_class` de un `failed`). Algunos solo se entienden con el subcódigo (`PERMANENT_SUBCODES`, Messenger e Instagram) y van como `meta.<código>.<subcódigo>`. Un código de Meta que no está en esas tablas sale como `CHANNEL_SEND_META_<n>` con el texto de Meta.

**Cómo se detecta (toda la familia):** Envío rechazado: línea `channel_send_rejected … meta=<n>` en Render y el `code` `CHANNEL_SEND_META_<n>` en la respuesta. Estado `failed`: `channel_messages.status = 'failed'` con `error_code = <n>` y el detalle en `error_json`.

**Qué hacer (toda la familia):** Los de límite se resuelven esperando lo que dice Meta (no reintentes antes). Los permanentes no se arreglan reintentando: lee la ficha del código. Un código nuevo que se repite se agrega a la tabla de `meta-graph-errors.ts` o de `interactions-message-status.ts` y aparece aquí solo.

Lo que un código no dice lo hereda de la familia.

## `meta.10`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** La app de Meta no tiene permiso para esta operación.
- **Causa típica:** Es el `10` genérico. Con subcódigo `2018278` o `2018300` (Messenger e Instagram) es otra cosa y tiene ficha propia (`meta.10.<subcódigo>`).

## `meta.10.2018278`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Meta no dejó enviar el mensaje: dice que está fuera de la ventana de mensajes permitida para esta conversación (Messenger o Instagram).
- **Causa típica:** Meta lo manda con el texto `This message is sent outside of allowed window`. No es la ventana de 24 h que calcula Boost: en prod (15/10/2026, Tecnipesa, 8 fallos en Messenger) falló a segundos de que escribiera el cliente. Antes caía en el `10` genérico y decía "la app no tiene permiso", que era falso.
- **Cómo detectarlo:** Base: `channel_messages.status = 'failed'` con `error_code = CHANNEL_SEND_META_10` y en `error_json` `meta_subcode = 2018278`, `failure_class = outside_window` y el texto de Meta en `meta_message`. Render: `channel_send_rejected … meta=10/2018278`.
- **Qué hacer:** Reintentar el mismo mensaje no lo arregla (el front no ofrece Reintentar). Revisar con `fbtrace_id` si el hilo lo controla otra app (ver `meta.100.2534037`) o contestar desde Meta Business Suite.

## `meta.10.2018300`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Otra app tiene el control de esta conversación en Meta y no deja que Boost conteste (Messenger o Instagram).
- **Causa típica:** Conversation Routing de Meta: la bandeja de Meta Business Suite u otra app conectada es la dueña del hilo. Meta lo manda con el texto `another app is controlling this thread`. Mismo caso que `meta.100.2534037`.
- **Cómo detectarlo:** Base: `channel_messages.status = 'failed'` con `error_code = CHANNEL_SEND_META_10` y en `error_json` `meta_subcode = 2018300`, `failure_class = thread_control` y el texto de Meta en `meta_message`.
- **Qué hacer:** Se arregla en Meta, del lado del cliente: contestar desde Meta Business Suite, o que el administrador de la página ponga a Boost como app receptora (en el anuncio o en Enrutamiento de conversaciones de la página). Reintentar desde Boost no sirve.

## `meta.100.2534037`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Otra app tiene el control de esta conversación en Meta y no deja que Boost conteste (Messenger o Instagram).
- **Causa típica:** Conversation Routing de Meta: el hilo es de otra app (`receiving_app_id`). Típico de un hilo que abrió un anuncio Click-to-Direct (referral `ADS`/`OPEN_THREAD`): Meta le da el hilo a la app del anuncio. Meta lo manda con el texto `The action is invalid since it's not the thread owner`. Visto en prod el 15/10/2026 (Tecnipesa, entidad 759, Instagram). Antes salía el texto crudo en inglés.
- **Cómo detectarlo:** Base: `channel_messages.status = 'failed'` con `error_code = CHANNEL_SEND_META_100` y en `error_json` `meta_subcode = 2534037`, `failure_class = thread_control` y el texto de Meta en `meta_message`. Render: `channel_send_rejected … meta=100/2534037`.
- **Qué hacer:** Se arregla en Meta, del lado del cliente: contestar desde Meta Business Suite, o que el administrador de la página ponga a Boost como app receptora (en el anuncio Click-to-Direct o en Enrutamiento de conversaciones de la página). Reintentar desde Boost no sirve.

## `meta.130429`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Se alcanzó la velocidad máxima de envío del número de WhatsApp.

## `meta.130472`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Meta no entregó el mensaje porque el número del cliente está en un experimento de Meta (grupo de control de marketing).
- **Qué hacer:** Nada que hacer desde Boost; se cuenta aparte como `experiment`.

## `meta.131026`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** WhatsApp no pudo entregar el mensaje a este destinatario.
- **Causa típica:** Según Meta: el número no tiene WhatsApp, no aceptó los términos nuevos o usa una versión vieja de la app. Es el fallo de entrega más común (153 en los 30 días al 30/09/2026).
- **Cómo detectarlo:** Base: `channel_messages.status = 'failed'` y `error_code = 131026`. Envío: `CHANNEL_SEND_META_131026`.
- **Qué hacer:** Confirmar el número con el cliente por otro medio; reintentar el mismo número no ayuda.

## `meta.131042`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Problema de pago de la cuenta de WhatsApp Business (método de pago de la WABA).
- **Qué hacer:** Revisar el método de pago de la WABA en el administrador de Meta. Se cuenta aparte (`billing`) para no confundirlo con fallos de entrega.

## `meta.131047`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Pasaron más de 24 h desde el último mensaje del cliente: solo se puede enviar una plantilla.

## `meta.131048`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** El número emisor tiene restringido el envío por calidad o reportes de spam. Esperar no lo resuelve.

## `meta.131049`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Meta no entregó el mensaje para cuidar la experiencia del destinatario (límite de mensajes de marketing por persona).
- **Causa típica:** Meta limita cuántos mensajes de marketing recibe cada persona. El segundo fallo más común (60 en los 30 días al 30/09/2026).
- **Qué hacer:** No reintentar enseguida: bajar la frecuencia de promociones a ese contacto o mandar una plantilla de utilidad si aplica.

## `meta.131050`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** El destinatario pidió no recibir mensajes de marketing de este negocio.

## `meta.131053`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Meta no pudo subir o procesar la media del mensaje.
- **Qué hacer:** Revisar el archivo (formato y tamaño que acepta WhatsApp) y volver a mandarlo.

## `meta.131056`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Demasiados mensajes al mismo destinatario en poco tiempo.

## `meta.133016`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Demasiados intentos de registro o baja del número: Meta lo bloquea 72 h.

## `meta.190`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** El token de acceso de Meta expiró o fue revocado.
- **Qué hacer:** Reconectar la cuenta del canal (alta de nuevo) para guardar un token nuevo en la bóveda.

## `meta.200`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** El token de acceso de Meta no tiene los permisos necesarios.

## `meta.4`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** La aplicación de Meta alcanzó su límite de llamadas por hora.

## `meta.613`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Se superó el límite de llamadas por hora de la Graph API.

## `meta.80007`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** La cuenta de WhatsApp Business (WABA) alcanzó su límite de llamadas por hora.

## `meta.80008`

- **Tipo:** Meta · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Demasiadas llamadas de administración a la cuenta de WhatsApp Business (p. ej. leer plantillas).
- **Causa típica:** Muchas lecturas de plantillas en poco tiempo. Por eso las plantillas se leen con caché y candado por WABA (`constraint.whatsapp-templates-read-is-cached-and-latched-per-waba-2`).
- **Qué hacer:** Esperar el tiempo que diga Meta; no reintentar en bucle.
