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.
Icon Solid Transparent White Qiyu
Contactez-nous