Envoyer un message
Les développeurs peuvent envoyer des messages à une conversation_id spécifiée via l'API.
Méthode de requête
POST
URL de requête
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages
Authentification
Pour plus d'informations, consultez les instructions d'authentification dans Présentation de l'API.
Requête en texte brut
Exemple de requête
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": "Customer service is sending a message. Is this 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": "Customer service is sending a message. Is this normal?",
"private": false,
"content_attributes": {
"in_reply_to": 29
}
}'
Afficher ce bloc de code dans la fenêtre flottante
En-têtes de requête
| Champ | Type | Description |
|---|---|---|
| Authorization | string | Authentifiez-vous avec Authorization: Basic base64(API Key:API Secret). Accédez à la page des clés API pour obtenir l'API Key et l'API Secret, associez-les avec deux-points, puis encodez-les en Base64. |
| Content-Type | application/json | Type de données. Utilisez application/json pour les messages en texte brut. |
Paramètres de chemin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| conversation_id | string | Oui | ID de la conversation. |
Paramètres du corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| content | String | Oui | Contenu du message. |
| private | Boolean | Non | Indique si le message est privé. La valeur par défaut est false. |
| content_attributes | Object | Non | Attributs du contenu. Par exemple, pour répondre à un message, utilisez le champ in_reply_to afin de spécifier l'ID du message. |
Exemple de réponse en texte brut
Exemple de réponse
{
"id": 3030,
"content": "Customer service is sending a message. Is this 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": "Customer service is sending a message. Is this 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": ""
}
}
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de réponse
| Champ | Type | Description |
|---|---|---|
| id | Int | ID du message. |
| content | String | Contenu du message. |
| inbox_id | Int | ID de la boîte de réception. |
| conversation_id | Int | ID de la conversation. |
| message_type | Int | Type de message. |
| content_type | String | Type de contenu. |
| status | String | Statut du message, par exemple sent ou delivered. |
| content_attributes | Object | Attributs du contenu. |
| created_at | Int | Horodatage de création du message. |
| private | Boolean | Indique si le message est privé. |
| source_id | Int | ID de la source. |
| sorting_id | Int | ID de tri. |
| sender | Object | Informations sur l'expéditeur. |
| sender.id | Int | ID de l'expéditeur. |
| sender.name | String | Nom de l'expéditeur. |
| sender.available_name | String | Nom affiché de l'expéditeur. |
| sender.avatar_url | String | URL de l'avatar de l'expéditeur. |
| sender.type | String | Type d'expéditeur, par exemple user. |
| sender.availability_status | String | Statut en ligne de l'expéditeur, par exemple offline. |
| sender.thumbnail | String | Miniature de l'expéditeur. |
Requêtes d'images, d'audio et d'autres fichiers
Exemple de requête
curl -X POST "https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages" \
-H "Authorization: Basic base64(api_key:api_secret)" \
-F "attachments[]=@/path/to/your/file.jpg" \
-F "content=Detailed image below"
curl -X POST "https://livedesk.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages" \
-H "Authorization: Basic base64(api_key:api_secret)" \
-F "attachments[]=@/path/to/your/file.jpg" \
-F "content=Detailed image below"
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de chemin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| conversation_id | string | Oui | ID de la conversation. |
Exemple de réponse pour une image, un fichier audio ou un autre fichier
Exemple de réponse
{
"id": 3031,
"content": "Detailed image below",
"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": "Detailed image below",
"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
}
]
}
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de réponse
| Champ | Type | Description |
|---|---|---|
| id | Int | ID du message. |
| content | String | Contenu du message. |
| inbox_id | Int | ID de la boîte de réception. |
| conversation_id | Int | ID de la conversation. |
| message_type | Int | Type de message. |
| content_type | String | Type de contenu. |
| status | String | Statut du message, par exemple sent ou delivered. |
| content_attributes | Object | Attributs du contenu. |
| created_at | Int | Horodatage de création du message. |
| private | Boolean | Indique si le message est privé. |
| source_id | Int | ID de la source. |
| sorting_id | Int | ID de tri. |
| sender | Object | Informations sur l'expéditeur. |
| sender.id | Int | ID de l'expéditeur. |
| sender.name | String | Nom de l'expéditeur. |
| sender.available_name | String | Nom affiché de l'expéditeur. |
| sender.avatar_url | String | URL de l'avatar de l'expéditeur. |
| sender.type | String | Type d'expéditeur, par exemple user. |
| sender.availability_status | String | Statut en ligne de l'expéditeur, par exemple offline. |
| sender.thumbnail | String | Miniature de l'expéditeur. |
| attachments | Array | Liste des informations sur les pièces jointes. |
| attachments.id | Int | ID de la pièce jointe. |
| attachments.message_id | Int | ID du message associé. |
| attachments.file_type | String | Type de fichier, par exemple image. |
| attachments.account_id | Int | ID du compte. |
| attachments.extension | String | Extension du fichier. |
| attachments.data_url | String | URL du fichier. |
| attachments.thumb_url | String | URL de la miniature (types d'image uniquement). |
| attachments.file_size | Int | Taille du fichier en octets. |
| attachments.width | Int | Largeur du fichier (types d'image uniquement). |
| attachments.height | Int | Hauteur du fichier (types d'image uniquement). |
Exemple de requête de message modèle WhatsApp
Exemple de requête
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": "Display text for chat UI",
"message_type": "outgoing",
"template_params": {
"name": "order_update",
"namespace": "optional_namespace",
"language": "en_US",
"category": "MARKETING",
"processed_params": {
"1": "John",
"2": "shipped"
},
"header_params": {
"type": "text",
"text_variables": {
"1": "Order #456" }
},
"footer_params": {
"text_variables": { "1": "Acme Corp" }
},
"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": "Display text for chat UI",
"message_type": "outgoing",
"template_params": {
"name": "order_update",
"namespace": "optional_namespace",
"language": "en_US",
"category": "MARKETING",
"processed_params": {
"1": "John",
"2": "shipped"
},
"header_params": {
"type": "text",
"text_variables": {
"1": "Order #456" }
},
"footer_params": {
"text_variables": { "1": "Acme Corp" }
},
"button_params": [
{
"index": 0,
"sub_type": "url",
"text": "track/12345"
}
]
}
}'
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de chemin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| conversation_id | string | Oui | ID de la conversation. |
Paramètres du corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| content | String | Oui | Contenu du message affiché dans l'interface de discussion. |
| message_type | String | Oui | Type de message. Lors de l'envoi d'un message modèle, définissez sa valeur sur outgoing. |
| template_params | Object | Oui | Objet contenant les paramètres du message modèle. |
| template_params.name | String | Oui | Nom du modèle. |
| template_params.namespace | String | Non | Espace de noms du modèle (utilisé par WhatsApp Cloud / 360Dialog). |
| template_params.language | String | Oui | Code de langue du modèle, par exemple en_US. |
| template_params.category | String | Non | Catégorie du modèle, par exemple MARKETING. |
| template_params.processed_params | Object | Non | Valeurs des variables du corps du modèle. La clé correspond à la position de la variable ("1", "2") ou à son nom. |
| template_params.header_params | Object | Non | Paramètres du composant d'en-tête du modèle. Consultez les instructions ci-dessous. |
| template_params.footer_params | Object | Non | Paramètres du composant de pied de page du modèle. Consultez les instructions ci-dessous. |
| template_params.button_params | Array | Non | Paramètres du composant bouton du modèle. Consultez les instructions ci-dessous. |
Description du paramètre header_params
La structure de header_params varie selon le type d'en-tête :
Type texte :
{
"type": "text",
"text_variables": { "1": "Order #456" }
}
{
"type": "text",
"text_variables": { "1": "Order #456" }
}
Afficher ce bloc de code dans la fenêtre flottante
Type image :
{
"type": "image",
"media_url": "https://example.com/image.jpg"
}
{
"type": "image",
"media_url": "https://example.com/image.jpg"
}
Afficher ce bloc de code dans la fenêtre flottante
Type vidéo :
{
"type": "video",
"media_url": "https://example.com/video.mp4"
}
{
"type": "video",
"media_url": "https://example.com/video.mp4"
}
Afficher ce bloc de code dans la fenêtre flottante
Type fichier :
{
"type": "document",
"media_url": "https://example.com/invoice.pdf",
"filename": "invoice.pdf"
}
{
"type": "document",
"media_url": "https://example.com/invoice.pdf",
"filename": "invoice.pdf"
}
Afficher ce bloc de code dans la fenêtre flottante
Type localisation :
{
"type": "location",
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"name": "Acme HQ",
"address": "123 Main St, San Francisco"
}
}
{
"type": "location",
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"name": "Acme HQ",
"address": "123 Main St, San Francisco"
}
}
Afficher ce bloc de code dans la fenêtre flottante
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| type | String | Oui | Type d'en-tête. Valeurs prises en charge : text, image, video, document, location. |
| text_variables | Object | Non | Utilisé pour les types texte. La clé correspond à la position de la variable et la valeur au contenu de remplacement. |
| media_url | String | Non | Utilisé pour les types multimédias. URL du fichier multimédia. |
| filename | String | Non | Utilisé pour les types fichier. Nom du fichier. |
| location | Object | Non | Utilisé pour les types localisation. |
| location.latitude | Float | Oui | Latitude. |
| location.longitude | Float | Oui | Longitude. |
| location.name | String | Non | Nom du lieu. |
| location.address | String | Non | Adresse du lieu. |
Description du paramètre footer_params
{
"text_variables": { "1": "Acme Corp" }
}
{
"text_variables": { "1": "Acme Corp" }
}
Afficher ce bloc de code dans la fenêtre flottante
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| text_variables | Object | Non | La clé correspond à la position de la variable et la valeur au contenu de remplacement. |
Description du paramètre 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"
}
]
Afficher ce bloc de code dans la fenêtre flottante
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| index | Int | Oui | Index du bouton, à partir de 0. |
| sub_type | String | Oui | Type de bouton. Valeurs prises en charge : url, quick_reply. |
| text | String | Non | Utilisé pour les boutons de type URL. Suffixe de l'URL ou chemin de redirection. |
| payload | String | Non | Utilisé pour les boutons de type quick_reply. Contenu de la charge utile renvoyée. |
Exemple de réponse
Réponse réussie
{
"id": 123,
"content": "Display text for chat UI",
"message_type": 1,
"status": "sent",
"additional_attributes": {
"template_params": {
"name": "order_update",
"language": "en_US",
"category": "MARKETING"
}
}
}
{
"id": 123,
"content": "Display text for chat UI",
"message_type": 1,
"status": "sent",
"additional_attributes": {
"template_params": {
"name": "order_update",
"language": "en_US",
"category": "MARKETING"
}
}
}
Afficher ce bloc de code dans la fenêtre flottante
Réponse en cas d'échec
{
"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"
}
}
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de réponse
| Champ | Type | Description |
|---|---|---|
| id | Int | ID du message. |
| content | String | Contenu du message. |
| message_type | Int | Type de message. |
| status | String | Statut du message, par exemple sent, delivered ou failed. |
| additional_attributes | Object | Attributs supplémentaires. |
| additional_attributes.template_params | Object | Informations sur les paramètres du modèle envoyé. |
| content_attributes | Object | Attributs du contenu. Contient les informations d'erreur en cas d'échec de l'envoi. |
| content_attributes.external_error | String | Informations sur l'erreur externe renvoyées en cas d'échec de l'envoi du message. |
Réessayer les messages échoués
Si le statut du message est failed, utilisez le point de terminaison suivant pour réinitialiser le statut du message et le renvoyer :
URL de requête
POST https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages/:message_id/retry
Paramètres de chemin
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| conversation_id | string | Oui | ID de la conversation. |
| message_id | string | Oui | ID du message. |










