> ## 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 mensaje al usuario final

> Envía mensajes de texto y multimedia al usuario final desde el proveedor externo

<Warning>
  La cabecera `X-Jelou-Signature` es obligatoria.
</Warning>

## Descripción

Envía un mensaje al usuario final a través de Jelou. El cliente ejecuta este recurso para notificar a Jelou que debe entregar un mensaje al usuario final activo en la conversación.

Jelou validará la firma del request, procesará el contenido y lo entregará al usuario a través del canal configurado (por ejemplo, WhatsApp).

## Endpoint

```
POST https://chatbot.jelou.ai/v1/external-support/webhook
```

## Parámetros del cuerpo

<ParamField body="field" type="string" required>
  Tipo de campo del evento. Valor fijo: `messages`.
</ParamField>

<ParamField body="object" type="string" required>
  Tipo de objeto del evento. Valor fijo: `message_event`.
</ParamField>

<ParamField body="event_type" type="string" required>
  Tipo de evento. Valor fijo: `incoming_message`.
</ParamField>

<ParamField body="project_id" type="string" required>
  Identificador del proyecto de Jelou al que pertenece la conversación.
</ParamField>

<ParamField body="room_id" type="string" required>
  Identificador de la sala de conversación activa.
</ParamField>

<ParamField body="bot_id" type="string" required>
  Identificador del bot de Jelou asociado a la conversación.
</ParamField>

<ParamField body="user_id" type="string" required>
  Identificador del usuario final que recibirá el mensaje.
</ParamField>

<ParamField body="value" type="object" required>
  Contenido del mensaje a entregar al usuario final.

  * `id` — Identificador único del mensaje.
  * `type` — Tipo de mensaje: `text`, `image`, `video`, `audio`, `document`.
  * `content` — Objeto con el contenido según el tipo (ver tabla de tipos al final de esta página).
</ParamField>

## Autenticación

Este recurso valida la cabecera `X-Jelou-Signature`.

## Ejemplo de solicitud

El siguiente ejemplo envía un mensaje de texto al usuario final a través de Jelou:

```bash cURL theme={null}
curl --request POST \
  --url https://chatbot.jelou.ai/v1/external-support/webhook \
  --header 'Content-Type: application/json' \
  --header 'X-Jelou-Signature: sha256=HMAC_SIGNATURE' \
  --data '{
    "field": "messages",
    "object": "message_event",
    "event_type": "incoming_message",
    "project_id": "PROJECT_ID",
    "room_id": "ROOM_ID",
    "bot_id": "BOT_ID",
    "user_id": "USER_ID",
    "value": {
      "id": "MESSAGE_ID",
      "type": "text",
      "content": {
        "body": "Hola usuario, ¿en qué puedo ayudarte?"
      }
    }
  }'
```

## Respuestas

| Código | Estado                | Descripción                             |
| ------ | --------------------- | --------------------------------------- |
| 200    | OK                    | Mensaje recibido y procesado por Jelou. |
| 500    | Internal Server Error | Error interno del servidor.             |

## Tipos de mensajes soportados

| Tipo       | Campo `value.content`                              | Campos adicionales    |
| ---------- | -------------------------------------------------- | --------------------- |
| `text`     | `{ "body": "Texto del mensaje" }`                  | —                     |
| `image`    | `{ "url": "...", "mime_type": "image/jpeg" }`      | `caption` (opcional)  |
| `video`    | `{ "url": "...", "mime_type": "video/mp4" }`       | `caption` (opcional)  |
| `audio`    | `{ "url": "...", "mime_type": "audio/mpeg" }`      | —                     |
| `document` | `{ "url": "...", "mime_type": "application/pdf" }` | `filename` (opcional) |

<Note>
  Las URLs de archivos multimedia deben ser accesibles vía HTTPS.
</Note>
