# Códigos de error: Canales: interruptores por cuenta y camino heredado

> Códigos de compatibilidad: los interruptores por cuenta y el camino de envío heredado. Hoy todo número recibe y envía por Boost; estos códigos solo aparecen si una cuenta quedó fuera de ese camino, y desaparecerán junto con él (por eso casi todos están por retirar).

**Cómo se detecta (toda la familia):** La respuesta (`code`) al cambiar los interruptores de una cuenta (solo plataforma) y, desde el chat, la respuesta de un envío cuando la cuenta no sale por la salida directa.

**Qué hacer (toda la familia):** Todo número tiene que recibir y enviar por Boost (`ingress_owner` y `egress_owner` = `boost` en `channel_account_switches`). Si un envío cae en uno de estos códigos, revisa los interruptores de esa cuenta y pásala a Boost; desde el chat, el envío tiene que ir por la salida directa.

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

## `CHANNEL_SWITCHES_NO_WORKFLOW_API_USER`

- **Tipo:** interno · **HTTP:** — · **Estado:** vigente
- **Qué significa:** Se pidió prender los workflows de una entidad (Configuraciones > Workflows) y la entidad no tiene usuario API de workflows (`entity_workflow_configs.workflow_system_user_id`): sin él los workflows fallan, así que no se prendió ninguna cuenta.
- **Qué hacer:** Configurar el usuario de automatización de la entidad (ver el panel de preparación de la entidad) y volver a prender.

## `INTERACTIONS_MESSAGE_RETRY_UNAVAILABLE`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El reintento solo existe para mensajes que salieron por la salida directa de Boost.

## `INTERACTIONS_OUTBOUND_CAPABILITY_UNSUPPORTED`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El canal no soporta esa capacidad (p. ej. plantillas o media) en el camino de envío heredado; solo se llega ahí si la cuenta no sale por Boost.

## `INTERACTIONS_OUTBOUND_CHANNEL_NOT_SENDABLE`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El canal no admite envío de mensajes desde el CRM (solo WhatsApp, Messenger e Instagram).

## `INTERACTIONS_OUTBOUND_NOT_DIRECT`

- **Tipo:** HTTP · **HTTP:** 400 · **Estado:** vigente
- **Qué significa:** El envío no salió por la salida directa de Boost (400) y no hay otro camino: el número no sale por Boost (`egress_owner = boost`) o el envío no pasa por una conversación (`sendAndProjectOutbound`).
- **Qué hacer:** Revisar el interruptor de la cuenta (`yarn -s boost canales cuentas --entidad N`) y que el envío salga de un chat. Desde el 14/10/2026 reemplaza a INTERACTIONS_CHANNEL_ACCOUNT_WITHOUT_COMMUNICATIONS e INTERACTIONS_DIRECT_EGRESS_OUT_OF_SCOPE.

## `INTERACTIONS_TEMPLATES_DIRECT_REQUIRED`

- **Tipo:** HTTP · **HTTP:** 409 · **Estado:** vigente
- **Qué significa:** Las plantillas de este número van directo a Meta desde Boost y eso no está disponible (409): la llave no es de un WhatsApp con WABA en Boost. No hay otro camino.
- **Qué hacer:** Revisar que el número sea de WhatsApp y tenga WABA en Boost; si el error viene como CHANNEL_TEMPLATES_DIRECT_UNAVAILABLE, su token en la bóveda o el permiso `interactions.whatsapp_templates.manage`.

## `CHANNEL_ACCOUNT_NOT_FOUND`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** La cuenta de canal no existe (interruptores por cuenta).
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_AUDIT_UNAVAILABLE`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** No se pudo registrar la decisión de autorización; no se cambió ningún interruptor.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_INGRESS_SKIPS_STEP`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** El ingreso se mueve un paso a la vez (communications ↔ shadow ↔ handover ↔ boost) y se pidió saltar uno.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_INVALID_REQUEST`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** Pedido de cambio de interruptor mal formado (valor desconocido, sin motivo o más de un interruptor).
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_NO_CHANGE`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** El interruptor ya tiene el valor pedido.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_ORDER_A`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** Orden A: el despacho por `bus` exige que la cuenta ya no esté en `communications`.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_ORDER_B`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** Orden B: la salida `boost` exige despacho `bus`.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_ORDER_C`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** Orden C: el ingreso `handover` o `boost` exige salida `boost`.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_PLATFORM_ONLY`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** Solo plataforma puede cambiar los interruptores de una cuenta de canal.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_ROW_EXISTS`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** La cuenta ya tiene fila de interruptores; se cambia con PATCH, no se crea otra.
- **por retirar:** Muere con los interruptores por cuenta.

## `CHANNEL_SWITCHES_ROW_MISSING`

- **Tipo:** interno · **HTTP:** — · **Estado:** por retirar
- **Qué significa:** La cuenta no tiene fila de interruptores; hay que crearla con POST antes de cambiarla.
- **por retirar:** Muere con los interruptores por cuenta.
