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 ID de conversación.

Parámetros del cuerpo de la solicitud

Campo Tipo Obligatorio Descripción
content String 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 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 ID de conversación.

Parámetros del cuerpo de la solicitud

Campo Tipo Obligatorio Descripción
content String Contenido del mensaje para mostrar en la interfaz de chat.
message_type String Tipo de mensaje. Se fija en outgoing al enviar mensajes de plantilla.
template_params Object Objeto de parámetros del mensaje de plantilla.
name String Nombre de la plantilla.
namespace String No Espacio de nombres de la plantilla (utilizado por WhatsApp Cloud / 360Dialog).
language String 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 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 Latitud.
longitude Float Longitud.
name String No Nombre del lugar.
address String No Dirección del lugar.
{ "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 Índice del botón, comenzando en 0.
sub_type String 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 ID de conversación.
message_id string ID del mensaje.
Icon Solid Transparent White Qiyu
Contacto