Enviar mensaje
Los desarrolladores pueden enviar mensajes a un ID de conversación especificado a través de la API.
Método de solicitud
POST
URL de solicitud
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages
Autenticación
Consulte la descripción del método de autenticación en Descripción general de la API para más detalles.
Solicitud de texto
Ejemplo de solicitud
curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
-d '{
"content": "El agente está enviando un mensaje, ¿es normal?",
"private": false,
"content_attributes": {
"in_reply_to": 29
}
}'
curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
-d '{
"content": "El agente está enviando un mensaje, ¿es normal?",
"private": false,
"content_attributes": {
"in_reply_to": 29
}
}'
Este bloque de código se muestra en una ventana flotante
Encabezados de solicitud
| Campo | Tipo | Descripción |
|---|---|---|
| Authorization | string | Use Authorization: Basic base64(API Key:API Secret) para la autenticación. Vaya a la página de claves de API para obtener la API Key y el API Secret, concaténelos con dos puntos y luego codifíquelos en Base64. |
| Content-Type | application/json | Tipo de datos. Use application/json para mensajes de texto simples. |
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | ID de conversación. |
Parámetros del cuerpo de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| content | String | Sí | Contenido del mensaje. |
| private | Boolean | No | Indica si es un mensaje privado. El valor predeterminado es false. |
| content_attributes | Object | No | Atributos del contenido; por ejemplo, al responder a un mensaje puede usar el campo in_reply_to para especificar el ID del mensaje. |
Ejemplo de respuesta de texto
Ejemplo de respuesta
{
"id": 3030,
"content": "El agente está enviando un mensaje, ¿es normal?",
"inbox_id": 79,
"conversation_id": 141,
"message_type": 1,
"content_type": "text",
"status": "sent",
"content_attributes": {},
"created_at": 1762331029,
"private": false,
"source_id": null,
"sorting_id": 4,
"sender": {
"id": 3,
"name": "TEST",
"available_name": "TEST",
"avatar_url": "",
"type": "user",
"availability_status": "offline",
"thumbnail": ""
}
}
{
"id": 3030,
"content": "El agente está enviando un mensaje, ¿es normal?",
"inbox_id": 79,
"conversation_id": 141,
"message_type": 1,
"content_type": "text",
"status": "sent",
"content_attributes": {},
"created_at": 1762331029,
"private": false,
"source_id": null,
"sorting_id": 4,
"sender": {
"id": 3,
"name": "TEST",
"available_name": "TEST",
"avatar_url": "",
"type": "user",
"availability_status": "offline",
"thumbnail": ""
}
}
Este bloque de código se muestra en una ventana flotante
Parámetros de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| id | Int | ID del mensaje. |
| content | String | Contenido del mensaje. |
| inbox_id | Int | ID de la bandeja de entrada. |
| conversation_id | Int | ID de conversación. |
| message_type | Int | Tipo de mensaje. |
| content_type | String | Tipo de contenido. |
| status | String | Estado del mensaje, como "sent", "delivered", etc. |
| content_attributes | Object | Atributos del contenido. |
| created_at | Int | Marca de tiempo de creación del mensaje. |
| private | Boolean | Indica si es un mensaje privado. |
| source_id | Int | ID de origen. |
| sorting_id | Int | ID de ordenación. |
| sender | Object | Información del remitente. |
| id | Int | ID del remitente. |
| name | String | Nombre del remitente. |
| available_name | String | Nombre para mostrar del remitente. |
| avatar_url | String | URL del avatar del remitente. |
| type | String | Tipo de remitente (p. ej. user). |
| availability_status | String | Estado de conexión del remitente (p. ej. offline). |
| thumbnail | String | Miniatura del remitente. |
Solicitud de imagen/audio/archivo
Ejemplo de solicitud
curl -X POST "https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages" \
-H "Authorization: Basic base64(api_key:api_secret)" \
-F "attachments[]=@attachments[]=@/path/to/your/file.jpg" \
-F "content=Imagen detallada a continuación"
curl -X POST "https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages" \
-H "Authorization: Basic base64(api_key:api_secret)" \
-F "attachments[]=@attachments[]=@/path/to/your/file.jpg" \
-F "content=Imagen detallada a continuación"
Este bloque de código se muestra en una ventana flotante
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | ID de conversación. |
Ejemplo de respuesta de imagen/audio/archivo
Ejemplo de respuesta
{
"id": 3031,
"content": "Imagen detallada a continuación",
"inbox_id": 79,
"conversation_id": 141,
"message_type": 1,
"content_type": "text",
"status": "sent",
"content_attributes": {},
"created_at": 1762331762,
"private": false,
"source_id": null,
"sorting_id": 5,
"sender": {
"id": 3,
"name": "Wenjie Yu",
"available_name": "Wenjie Yu",
"avatar_url": "",
"type": "user",
"availability_status": "offline",
"thumbnail": ""
},
"attachments": [
{
"id": 199,
"message_id": 3031,
"file_type": "image",
"account_id": 14,
"extension": null,
"data_url": "https://livedesk.engagelab.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamNUIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--727ba7469d64f90790d242c743f254b5c9013fe1/android-icon-48x48.png",
"thumb_url": "https://livedesk.engagelab.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamNUIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--727ba7469d64f90790d242c743f254b5c9013fe1/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RTNKbGMybDZaVjkwYjE5bWFXeHNXd2RwQWZvdyIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--63c890cbf173eb3dc92a8786fcc3e120c329852d/android-icon-48x48.png",
"file_size": 589136,
"width": null,
"height": null
}
]
}
{
"id": 3031,
"content": "Imagen detallada a continuación",
"inbox_id": 79,
"conversation_id": 141,
"message_type": 1,
"content_type": "text",
"status": "sent",
"content_attributes": {},
"created_at": 1762331762,
"private": false,
"source_id": null,
"sorting_id": 5,
"sender": {
"id": 3,
"name": "Wenjie Yu",
"available_name": "Wenjie Yu",
"avatar_url": "",
"type": "user",
"availability_status": "offline",
"thumbnail": ""
},
"attachments": [
{
"id": 199,
"message_id": 3031,
"file_type": "image",
"account_id": 14,
"extension": null,
"data_url": "https://livedesk.engagelab.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamNUIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--727ba7469d64f90790d242c743f254b5c9013fe1/android-icon-48x48.png",
"thumb_url": "https://livedesk.engagelab.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamNUIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--727ba7469d64f90790d242c743f254b5c9013fe1/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RTNKbGMybDZaVjkwYjE5bWFXeHNXd2RwQWZvdyIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--63c890cbf173eb3dc92a8786fcc3e120c329852d/android-icon-48x48.png",
"file_size": 589136,
"width": null,
"height": null
}
]
}
Este bloque de código se muestra en una ventana flotante
Parámetros de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| id | Int | ID del mensaje. |
| content | String | Contenido del mensaje. |
| inbox_id | Int | ID de la bandeja de entrada. |
| conversation_id | Int | ID de conversación. |
| message_type | Int | Tipo de mensaje. |
| content_type | String | Tipo de contenido. |
| status | String | Estado del mensaje, como "sent", "delivered", etc. |
| content_attributes | Object | Atributos del contenido. |
| created_at | Int | Marca de tiempo de creación del mensaje. |
| private | Boolean | Indica si es un mensaje privado. |
| source_id | Int | ID de origen. |
| sorting_id | Int | ID de ordenación. |
| sender | Object | Información del remitente. |
| id | Int | ID del remitente. |
| name | String | Nombre del remitente. |
| available_name | String | Nombre para mostrar del remitente. |
| avatar_url | String | URL del avatar del remitente. |
| type | String | Tipo de remitente (p. ej. user). |
| availability_status | String | Estado de conexión del remitente (p. ej. offline). |
| thumbnail | String | Miniatura del remitente. |
| attachments | Array | Lista de información de adjuntos. |
| id | Int | ID del adjunto. |
| message_id | Int | ID del mensaje al que pertenece. |
| file_type | String | Tipo de archivo (p. ej. image). |
| account_id | Int | ID de la cuenta. |
| extension | String | Extensión del archivo. |
| data_url | String | URL del archivo. |
| thumb_url | String | URL de la miniatura (solo tipo imagen). |
| file_size | Int | Tamaño del archivo (bytes). |
| width | Int | Ancho del archivo (solo tipo imagen). |
| height | Int | Alto del archivo (solo tipo imagen). |
Ejemplo de solicitud de mensaje de plantilla de WhatsApp
Ejemplo de solicitud
curl -X POST 'https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages'\
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)'\
-d '{
"content": "Texto de visualización para la interfaz de chat",
"message_type": "outgoing",
"template_params": {
"name": "order_update",
"namespace": "optional_namespace",
"language": "en_US",
"category": "MARKETING",
"processed_params": {
"1": "John",
"2": "enviado"
},
"header_params": {
"type": "text",
"text_variables": {
"1": "Pedido #456" }
},
"footer_params": {
"text_variables": { "1": "Acme S. A." }
},
"button_params": [
{
"index": 0,
"sub_type": "url",
"text": "track/12345"
}
]
}
}'
curl -X POST 'https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages'\
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)'\
-d '{
"content": "Texto de visualización para la interfaz de chat",
"message_type": "outgoing",
"template_params": {
"name": "order_update",
"namespace": "optional_namespace",
"language": "en_US",
"category": "MARKETING",
"processed_params": {
"1": "John",
"2": "enviado"
},
"header_params": {
"type": "text",
"text_variables": {
"1": "Pedido #456" }
},
"footer_params": {
"text_variables": { "1": "Acme S. A." }
},
"button_params": [
{
"index": 0,
"sub_type": "url",
"text": "track/12345"
}
]
}
}'
Este bloque de código se muestra en una ventana flotante
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | ID de conversación. |
Parámetros del cuerpo de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| content | String | Sí | Contenido del mensaje para mostrar en la interfaz de chat. |
| message_type | String | Sí | Tipo de mensaje. Se fija en outgoing al enviar mensajes de plantilla. |
| template_params | Object | Sí | Objeto de parámetros del mensaje de plantilla. |
| name | String | Sí | Nombre de la plantilla. |
| namespace | String | No | Espacio de nombres de la plantilla (utilizado por WhatsApp Cloud / 360Dialog). |
| language | String | Sí | Código de idioma de la plantilla, como en_US. |
| category | String | No | Categoría de la plantilla, como MARKETING. |
| processed_params | Object | No | Valores de las variables del cuerpo de la plantilla. La clave es la posición de la variable ("1", "2") o el nombre de la variable. |
| header_params | Object | No | Parámetros del componente de encabezado de la plantilla. Consulte los detalles a continuación. |
| footer_params | Object | No | Parámetros del componente de pie de página de la plantilla. Consulte los detalles a continuación. |
| button_params | Array | No | Parámetros del componente de botones de la plantilla. Consulte los detalles a continuación. |
Descripción de los parámetros header_params
La estructura de header_params varía según el tipo de encabezado:
Tipo texto:
{
"type": "text",
"text_variables": { "1": "Pedido #456" }
}
{
"type": "text",
"text_variables": { "1": "Pedido #456" }
}
Este bloque de código se muestra en una ventana flotante
Tipo imagen:
{
"type": "image",
"media_url": "https://example.com/image.jpg"
}
{
"type": "image",
"media_url": "https://example.com/image.jpg"
}
Este bloque de código se muestra en una ventana flotante
Tipo vídeo:
{
"type": "video",
"media_url": "https://example.com/video.mp4"
}
{
"type": "video",
"media_url": "https://example.com/video.mp4"
}
Este bloque de código se muestra en una ventana flotante
Tipo documento:
{
"type": "document",
"media_url": "https://example.com/invoice.pdf",
"filename": "invoice.pdf"
}
{
"type": "document",
"media_url": "https://example.com/invoice.pdf",
"filename": "invoice.pdf"
}
Este bloque de código se muestra en una ventana flotante
Tipo ubicación:
{
"type": "location",
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"name": "Sede de Acme",
"address": "123 Main St, San Francisco"
}
}
{
"type": "location",
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"name": "Sede de Acme",
"address": "123 Main St, San Francisco"
}
}
Este bloque de código se muestra en una ventana flotante
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| type | String | Sí | Tipo de encabezado. Admite text, image, video, document, location. |
| text_variables | Object | No | Se usa para el tipo texto. La clave es la posición de la variable y el valor es el contenido de reemplazo. |
| media_url | String | No | Se usa para tipos multimedia. URL del archivo multimedia. |
| filename | String | No | Se usa para el tipo documento. Nombre del archivo. |
| location | Object | No | Se usa para el tipo ubicación. |
| latitude | Float | Sí | Latitud. |
| longitude | Float | Sí | Longitud. |
| name | String | No | Nombre del lugar. |
| address | String | No | Dirección del lugar. |
Descripción de los parámetros footer_params
{
"text_variables": { "1": "Acme S. A." }
}
{
"text_variables": { "1": "Acme S. A." }
}
Este bloque de código se muestra en una ventana flotante
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| text_variables | Object | No | La clave es la posición de la variable y el valor es el contenido de reemplazo. |
Descripción de los parámetros button_params
[
{
"index": 0,
"sub_type": "url",
"text": "track/12345"
},
{
"index": 1,
"sub_type": "quick_reply",
"payload": "OPT_OUT"
}
]
[
{
"index": 0,
"sub_type": "url",
"text": "track/12345"
},
{
"index": 1,
"sub_type": "quick_reply",
"payload": "OPT_OUT"
}
]
Este bloque de código se muestra en una ventana flotante
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| index | Int | Sí | Índice del botón, comenzando en 0. |
| sub_type | String | Sí | Tipo de botón. Admite url, quick_reply. |
| text | String | No | Se usa para botones de tipo URL. Sufijo de URL o ruta de redirección. |
| payload | String | No | Se usa para botones de tipo quick_reply. Contenido del payload devuelto. |
Ejemplo de respuesta
Respuesta exitosa
{
"id": 123,
"content": "Texto de visualización para la interfaz de chat",
"message_type": 1,
"status": "sent",
"additional_attributes": {
"template_params": {
"name": "order_update",
"language": "en_US",
"category": "MARKETING"
}
}
}
{
"id": 123,
"content": "Texto de visualización para la interfaz de chat",
"message_type": 1,
"status": "sent",
"additional_attributes": {
"template_params": {
"name": "order_update",
"language": "en_US",
"category": "MARKETING"
}
}
}
Este bloque de código se muestra en una ventana flotante
Respuesta fallida
{
"id": 123,
"status": "failed",
"content_attributes": {
"external_error": "131047: Re-engagement message is not allowed"
}
}
{
"id": 123,
"status": "failed",
"content_attributes": {
"external_error": "131047: Re-engagement message is not allowed"
}
}
Este bloque de código se muestra en una ventana flotante
Parámetros de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| id | Int | ID del mensaje. |
| content | String | Contenido del mensaje. |
| message_type | Int | Tipo de mensaje. |
| status | String | Estado del mensaje, como sent, delivered, failed, etc. |
| additional_attributes | Object | Atributos adicionales. |
| template_params | Object | Información de los parámetros de plantilla enviados. |
| content_attributes | Object | Atributos del contenido. Contiene información de error cuando el envío falla. |
| external_error | String | Información de error externa devuelta cuando falla el envío del mensaje. |
Reintentar mensaje fallido
Si el estado del mensaje es failed, puede restablecer el estado del mensaje y reenviarlo mediante la siguiente API:
URL de solicitud
POST https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages/:message_id/retry
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | ID de conversación. |
| message_id | string | Sí | ID del mensaje. |










