Envoyer un message

Les développeurs peuvent envoyer des messages à un ID de conversation spécifié 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 de détails sur l'authentification, consultez la section correspondante dans la Présentation de l'API.

Requête texte

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": "L'\''agent envoie un message, est-ce 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": "L'\''agent envoie un message, est-ce 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 Utilisez Authorization: Basic base64(API Key:API Secret) pour l'authentification. Veuillez consulter la page des clés API pour obtenir l'API Key et l'API Secret, les relier avec un deux-points, puis encoder le tout en Base64.
Content-Type application/json Type de données. Utilisez application/json pour les messages texte simples.

Paramètres de chemin

Champ Type Obligatoire Description
conversation_id string Oui ID de conversation.

Paramètres du corps de la requête

Champ Type Obligatoire Description
content String Oui Contenu du message.
private Boolean Non Indique s'il s'agit d'un message privé. La valeur par défaut est false.
content_attributes Object Non Attributs du contenu. Par exemple, lors d'une réponse à un message, utilisez le champ in_reply_to pour spécifier l'ID du message.

Exemple de réponse texte

Exemple de réponse

{ "id": 3030, "content": "L'agent envoie un message, est-ce 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": "L'agent envoie un message, est-ce 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 conversation.
message_type Int Type de message.
content_type String Type de contenu.
status String Statut du message, par exemple "sent", "delivered", etc.
content_attributes Object Attributs du contenu.
created_at Int Horodatage de création du message.
private Boolean Indique s'il s'agit d'un message privé.
source_id Int ID de la source.
sorting_id Int ID de tri.
sender Object Informations sur l'expéditeur.
id Int ID de l'expéditeur.
name String Nom de l'expéditeur.
available_name String Nom d'affichage de l'expéditeur.
avatar_url String URL de l'avatar de l'expéditeur.
type String Type d'expéditeur (par ex. user).
availability_status String Statut en ligne de l'expéditeur (par ex. offline).
thumbnail String Miniature de l'expéditeur.

Requête image/audio/fichier

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[]=@attachments[]=@/path/to/your/file.jpg" \ -F "content=Image détaillée comme suit"
              
              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=Image détaillée comme suit" 

            
Afficher ce bloc de code dans la fenêtre flottante

Paramètres de chemin

Champ Type Obligatoire Description
conversation_id string Oui ID de conversation.

Exemple de réponse image/audio/fichier

Exemple de réponse

{ "id": 3031, "content": "Image détaillée comme suit", "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": "Image détaillée comme suit",
    "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 conversation.
message_type Int Type de message.
content_type String Type de contenu.
status String Statut du message, par exemple "sent", "delivered", etc.
content_attributes Object Attributs du contenu.
created_at Int Horodatage de création du message.
private Boolean Indique s'il s'agit d'un message privé.
source_id Int ID de la source.
sorting_id Int ID de tri.
sender Object Informations sur l'expéditeur.
id Int ID de l'expéditeur.
name String Nom de l'expéditeur.
available_name String Nom d'affichage de l'expéditeur.
avatar_url String URL de l'avatar de l'expéditeur.
type String Type d'expéditeur (par ex. user).
availability_status String Statut en ligne de l'expéditeur (par ex. offline).
thumbnail String Miniature de l'expéditeur.
attachments Array Liste des informations sur les pièces jointes.
id Int ID de la pièce jointe.
message_id Int ID du message auquel elle appartient.
file_type String Type de fichier (par ex. image).
account_id Int ID du compte.
extension String Extension du fichier.
data_url String URL du fichier.
thumb_url String URL de la miniature (type image uniquement).
file_size Int Taille du fichier (octets).
width Int Largeur du fichier (type image uniquement).
height Int Hauteur du fichier (type 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": "Texte d'\''affichage pour l'\''interface de chat", "message_type": "outgoing", "template_params": { "name": "order_update", "namespace": "optional_namespace", "language": "en_US", "category": "MARKETING", "processed_params": { "1": "John", "2": "expédié" }, "header_params": { "type": "text", "text_variables": { "1": "Commande #456" } }, "footer_params": { "text_variables": { "1": "Acme SARL" } }, "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": "Texte d'\''affichage pour l'\''interface de chat",
    "message_type": "outgoing",
    "template_params": {
      "name": "order_update",
      "namespace": "optional_namespace",
      "language": "en_US",
      "category": "MARKETING",
      "processed_params": {
        "1": "John",
        "2": "expédié"
      },
      "header_params": {
        "type": "text",
        "text_variables": {
         "1": "Commande #456" }
      },
      "footer_params": {
        "text_variables": { "1": "Acme SARL" }
      },
      "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 conversation.

Paramètres du corps de la requête

Champ Type Obligatoire Description
content String Oui Contenu du message affiché dans l'interface de chat.
message_type String Oui Type de message. Fixé à outgoing lors de l'envoi d'un message modèle.
template_params Object Oui Objet des paramètres du message modèle.
name String Oui Nom du modèle.
namespace String Non Espace de noms du modèle (utilisé par WhatsApp Cloud / 360Dialog).
language String Oui Code de langue du modèle, par exemple en_US.
category String Non Catégorie du modèle, par exemple MARKETING.
processed_params Object Non Valeurs des variables du corps du modèle. La clé est la position de la variable ("1", "2") ou son nom.
header_params Object Non Paramètres du composant d'en-tête du modèle. Voir les détails ci-dessous.
footer_params Object Non Paramètres du composant de pied de page du modèle. Voir les détails ci-dessous.
button_params Array Non Paramètres du composant de boutons du modèle. Voir les détails ci-dessous.

Description des paramètres header_params

La structure de header_params varie selon le type d'en-tête :

Type texte :

{ "type": "text", "text_variables": { "1": "Commande #456" } }
              
              {
  "type": "text",
  "text_variables": { "1": "Commande #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 document :

{ "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": "Siège d'Acme", "address": "123 Main St, San Francisco" } }
              
              {
  "type": "location",
  "location": {
    "latitude": 37.7749,
    "longitude": -122.4194,
    "name": "Siège d'Acme",
    "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. Prend en charge text, image, video, document, location.
text_variables Object Non Utilisé pour le type texte. La clé correspond à la position de la variable et la valeur au contenu de remplacement.
media_url String Non Utilisé pour les types média. URL du fichier média.
filename String Non Utilisé pour le type document. Nom du fichier.
location Object Non Utilisé pour le type localisation.
latitude Float Oui Latitude.
longitude Float Oui Longitude.
name String Non Nom du lieu.
address String Non Adresse du lieu.
{ "text_variables": { "1": "Acme SARL" } }
              
              {
  "text_variables": { "1": "Acme SARL" }
}

            
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 des paramètres 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, commençant à 0.
sub_type String Oui Type de bouton. Prend en charge url, quick_reply.
text String Non Utilisé pour les boutons de type URL. Suffixe d'URL ou chemin de redirection.
payload String Non Utilisé pour les boutons de type quick_reply. Contenu du payload retourné.

Exemple de réponse

Réponse réussie

{ "id": 123, "content": "Texte d'affichage pour l'interface de chat", "message_type": 1, "status": "sent", "additional_attributes": { "template_params": { "name": "order_update", "language": "en_US", "category": "MARKETING" } } }
              
              {
  "id": 123,
  "content": "Texte d'affichage pour l'interface de chat",
  "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 échouée

{ "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, failed, etc.
additional_attributes Object Attributs supplémentaires.
template_params Object Informations sur les paramètres du modèle envoyés.
content_attributes Object Attributs du contenu. Contient les informations d'erreur en cas d'échec d'envoi.
external_error String Informations d'erreur externes retournées en cas d'échec d'envoi du message.

Réessayer un message échoué

Si le statut du message est failed, vous pouvez réinitialiser le statut du message et le renvoyer via l'API suivante :

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 conversation.
message_id string Oui ID du message.
Icon Solid Transparent White Qiyu
Contactez-nous