> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Canal personalizado

> Conecta tu propia aplicación a los flujos de Brain Studio mediante webhook y API REST

Con un **canal personalizado** tu app (web, móvil u otro backend) puede ejecutar flujos publicados en Brain Studio sin depender de WhatsApp ni Meta. Tu sistema envía interacciones a Jelou, el agente procesa el flujo de forma asíncrona y Jelou entrega las respuestas a un `webhookUrl` que tú controlas.

Algunos nodos y herramientas del builder no están disponibles en este canal. Consulta las [limitaciones del canal](/guides/activacion-canales/personalizado#limitaciones-del-canal).

***

## Proceso de integración

<Steps>
  <Step title="Activar el canal en el builder">
    Habilita **personalizado**, define el webhook, su autenticación y la clave de firma HMAC (obligatoria) desde la interfaz.

    [Guía de activación →](/guides/activacion-canales/personalizado)
  </Step>

  <Step title="Firmar las peticiones">
    Firma el cuerpo de cada petición entrante (interacción y consulta de estado) y verifica la firma de cada entrega saliente.

    [Firma HMAC →](/api/canal-personalizado/firma-hmac)
  </Step>

  <Step title="Enviar interacciones">
    Envía mensajes o acciones de usuario a `POST /v1/custom-channel/:botId`. Jelou responde de inmediato con un `executionId` y procesa el flujo en segundo plano.

    [Enviar interacción →](/api/canal-personalizado/enviar-interaccion)
  </Step>

  <Step title="Recibir respuestas">
    Jelou hace `POST` a tu webhook con el mensaje del bot. Revisa los formatos por tipo de burbuja.

    [Formato de respuesta →](/api/canal-personalizado/formato-respuesta)
  </Step>

  <Step title="Consultar el estado">
    Usa `POST /v1/custom-channel/:botId/status` con firma HMAC para saber si la sesión está en ejecución, esperando input o idle.

    [Consultar estado →](/api/canal-personalizado/consultar-estado)
  </Step>
</Steps>

<Warning>
  La entrega saliente tiene **hasta 3 intentos en total, dentro de un límite de 20s** ante fallos rápidos (5xx, 429, conexión rechazada o reseteada). Los reintentos llevan el **mismo `messageId`**, así que tu endpoint debe deduplicar por él y responder de forma idempotente. Un timeout nunca se reintenta. Tu endpoint debe responder rápido y de forma confiable.

  [Entrega y reintentos →](/api/canal-personalizado/formato-respuesta#entrega-y-reintentos)
</Warning>
