> ## 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.

# Enviar interacción

> Envía un mensaje o acción de usuario al agente por el canal personalizado

## Descripción

Tu aplicación envía una interacción al agente. Jelou valida la firma HMAC, responde de inmediato con `202` y un `executionId`, y procesa el flujo de forma asíncrona. Las respuestas del agente llegan después a tu `webhookUrl`.

## Endpoint

```
POST https://chatbot.jelou.ai/v1/custom-channel/{botId}
```

## Parámetros de ruta

<ParamField path="botId" type="string" required>
  Identificador del agente con canal personalizado habilitado.
</ParamField>

## Parámetros del cuerpo

<ParamField body="referenceId" type="string" required>
  Identificador estable del usuario en tu sistema. Se usa como `userId` en las entregas salientes y para consultar el estado de la sesión.
</ParamField>

<ParamField body="message" type="object" required>
  Payload del mensaje. Se reenvía al flujo del agente. Un ejemplo típico de texto es `{ "type": "TEXT", "text": "Hola" }`.
</ParamField>

## Autenticación / firma

Incluye el header obligatorio:

```
X-Jelou-Signature: sha256=<HMAC_HEX>
```

La firma se calcula sobre el **raw body** exacto de la petición (HMAC-SHA256). Detalles en [Firma HMAC](/api/canal-personalizado/firma-hmac).

La autenticación `credentials.auth` del canal **no** se exige en este endpoint: solo aplica a las llamadas salientes de Jelou hacia tu webhook.

## Ejemplo de solicitud

```bash cURL theme={null}
curl --request POST \
  --url https://chatbot.jelou.ai/v1/custom-channel/BOT_ID \
  --header 'Content-Type: application/json' \
  --header 'X-Jelou-Signature: sha256=HMAC_HEX' \
  --data '{
    "referenceId": "user-123",
    "message": {
      "type": "TEXT",
      "text": "Hola"
    }
  }'
```

## Respuestas

| Código | Estado                | Descripción                                                 |
| ------ | --------------------- | ----------------------------------------------------------- |
| 202    | Accepted              | Interacción aceptada. El flujo se procesa en segundo plano. |
| 400    | Bad Request           | Falta `referenceId` o está vacío.                           |
| 401    | Unauthorized          | Firma inválida, ausente o no se pudo resolver la clave.     |
| 500    | Internal Server Error | Error interno (por ejemplo, canal no resuelto).             |

## Ejemplo de respuesta

```json theme={null}
{
  "executionId": "EXECUTION_ID"
}
```

<Warning>
  Un `202` no garantiza que el flujo terminó con éxito. Usa [consultar estado](/api/canal-personalizado/consultar-estado) y/o espera la entrega en tu webhook.
</Warning>
