Comment envoyer des messages à un canal API
Comme le canal API ne prend pas en charge la création implicite de contacts, l’envoi de messages via le canal API LiveDesk comprend les trois étapes suivantes :
- Créer un contact
- Créer une conversation à partir des informations du contact
- Envoyer un message
Créer un contact
URL de la requête
https://livedesk-api.engagelab.com/api/v2/accounts/contacts
Exemple de requête
curl -X POST https://livedesk-api.engagelab.com/api/v2/accounts/contacts \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
{
"inbox_id": 407,
"name": "Test", // Facultatif
"email": "alice@acme.inc",
"phone_number": "+123456789",
"avatar_url": "https://example.com/avatar.png",
"identifier": "1234567890"
}
curl -X POST https://livedesk-api.engagelab.com/api/v2/accounts/contacts \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
{
"inbox_id": 407,
"name": "Test", // Facultatif
"email": "alice@acme.inc",
"phone_number": "+123456789",
"avatar_url": "https://example.com/avatar.png",
"identifier": "1234567890"
}
Afficher ce bloc de code dans la fenêtre flottante
En-têtes de la requête
| Field | Type | Description |
|---|---|---|
| Authorization | string | Authentifiez-vous à l’aide de Authorization: Basic base64(API Key:API Secret). Accédez à la page API Keys pour obtenir l’API Key et l’API Secret, séparez-les par deux-points, puis encodez-les en Base64. |
| Content-Type | application/json | Type de données. Utilisez application/json pour les messages texte classiques. |
Paramètres du corps de la requête
| Field | Type | Required | Description |
|---|---|---|---|
| inbox_id | String | Yes | ID du canal. Il correspond à l’ID du canal indiqué dans Project Settings > Channels > Specific Channel > Settings. |
| name | String | No | Nom du contact. |
| String | No | Adresse e-mail. | |
| phone_number | String | No | Numéro de téléphone du contact. |
| avatar_url | String | No | URL de l’avatar. |
| identifier | String | No | Identifiant utilisateur. |
Exemple de réponse
{
"payload": {
"contact": {
"additional_attributes": {},
"availability_status": "offline",
"email": null,
"id": 2219259,
"name": "Test",
"phone_number": null,
"blocked": false,
"identifier": null,
"thumbnail": "",
"custom_attributes": {},
"created_at": 1766571703,
"contact_inboxes": []
},
"contact_inbox": {
"inbox": null,
"source_id": null
}
}
}
{
"payload": {
"contact": {
"additional_attributes": {},
"availability_status": "offline",
"email": null,
"id": 2219259,
"name": "Test",
"phone_number": null,
"blocked": false,
"identifier": null,
"thumbnail": "",
"custom_attributes": {},
"created_at": 1766571703,
"contact_inboxes": []
},
"contact_inbox": {
"inbox": null,
"source_id": null
}
}
}
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de réponse
| Field | Type | Required | Description |
|---|---|---|---|
| additional_attributes | Object | No | Attributs supplémentaires. |
| availability_status | String | No | Statut en ligne. La valeur par défaut est offline. |
| String | No | Adresse e-mail. | |
| id | String | No | ID du contact. |
| name | String | No | Nom. |
| phone_number | String | No | Numéro de téléphone. |
| blocked | String | No | Indique si le contact est bloqué. La valeur par défaut est false. |
| identifier | String | No | Identifiant utilisateur. |
| thumbnail | String | No | URL de la miniature. |
| custom_attributes | String | No | Attributs personnalisés. |
| created_at | String | No | Horodatage de création. |
| contact_inboxes | Array | No | Boîtes de réception du contact. |
| inbox | String | No | Boîte de réception du canal. |
| source_id | String | No | ID source. |
Créer une conversation
URL de la requête
https://livedesk-api.engagelab.com/api/v2/accounts/conversations
Exemple de requête
curl -X POST https://livedesk-api.engagelab.com/api/v2/accounts/conversations \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
{
"inbox_id": 407, // Obligatoire
"contact_id": 2219256, // contact_id ou source_id peut être transmis, mais l'un des deux doit être fourni pour identifier correctement l'expéditeur
"source_id": "123456789"
}
curl -X POST https://livedesk-api.engagelab.com/api/v2/accounts/conversations \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
{
"inbox_id": 407, // Obligatoire
"contact_id": 2219256, // contact_id ou source_id peut être transmis, mais l'un des deux doit être fourni pour identifier correctement l'expéditeur
"source_id": "123456789"
}
Afficher ce bloc de code dans la fenêtre flottante
En-têtes de la requête
| Field | Type | Description |
|---|---|---|
| Authorization | string | Authentifiez-vous à l’aide de Authorization: Basic base64(API Key:API Secret). Accédez à la page API Keys pour obtenir l’API Key et l’API Secret, séparez-les par deux-points, puis encodez-les en Base64. |
| Content-Type | application/json | Type de données. Utilisez application/json pour les messages texte classiques. |
Paramètres du corps de la requête
| Field | Type | Required | Description |
|---|---|---|---|
| inbox_id | String | Yes | ID du canal. Il s’agit du même ID que celui utilisé dans l’API de création d’un contact. |
| contact_id | String | No | ID du contact. Il s’agit de l’id renvoyé dans la réponse de l’API de création d’un contact. |
| source_id | String | No | ID source. |
Exemple de réponse
{
"meta": {
"sender": {
"additional_attributes": {},
"availability_status": "offline",
"email": null,
"id": 2219256,
"name": "wjTest",
"phone_number": null,
"blocked": false,
"identifier": null,
"thumbnail": "",
"custom_attributes": {},
"created_at": 1766571624
},
"channel": "Channel::Api",
"hmac_verified": false
},
"id": 40,
"messages": [],
"account_id": 17623000010928,
"uuid": "660ce36f-46bb-4153-948c-8a26e6dab634",
"inbox_id": 407,
"additional_attributes": {},
"agent_last_seen_at": 0,
"assignee_last_seen_at": 0,
"can_reply": true,
"contact_last_seen_at": 0,
"custom_attributes": {},
"labels": [],
"muted": false,
"snoozed_until": null,
"status": "open",
"priority": null,
"conversation_category": "chat",
"chat_mode": "private_chat",
"is_forum": false,
"created_at": 1766572062,
"updated_at": 1766572062.5803902,
"timestamp": 1766572062,
"first_reply_created_at": 0,
"unread_count": 0,
"last_non_activity_message": null,
"last_activity_at": 1766572062,
"waiting_since": 1766572062,
"sla_policy_id": null,
"ticket_id": null,
"over_limit": false,
"content_preview": {
"content": null,
"message_type": null,
"created_at": null
},
"platform": {
"channel_type": "Channel::Api",
"inbox_name": "JennyApi",
"inbox_id": 407
},
"account_info": {
"contact_name": "wjTest",
"contact_email": null,
"contact_phone": null,
"contact_id": 2219256,
"contact_avatar": ""
},
"assignment": {
"assignee_id": null,
"assignee_name": null,
"assignee_email": null,
"team_id": null,
"team_name": null
}
}
{
"meta": {
"sender": {
"additional_attributes": {},
"availability_status": "offline",
"email": null,
"id": 2219256,
"name": "wjTest",
"phone_number": null,
"blocked": false,
"identifier": null,
"thumbnail": "",
"custom_attributes": {},
"created_at": 1766571624
},
"channel": "Channel::Api",
"hmac_verified": false
},
"id": 40,
"messages": [],
"account_id": 17623000010928,
"uuid": "660ce36f-46bb-4153-948c-8a26e6dab634",
"inbox_id": 407,
"additional_attributes": {},
"agent_last_seen_at": 0,
"assignee_last_seen_at": 0,
"can_reply": true,
"contact_last_seen_at": 0,
"custom_attributes": {},
"labels": [],
"muted": false,
"snoozed_until": null,
"status": "open",
"priority": null,
"conversation_category": "chat",
"chat_mode": "private_chat",
"is_forum": false,
"created_at": 1766572062,
"updated_at": 1766572062.5803902,
"timestamp": 1766572062,
"first_reply_created_at": 0,
"unread_count": 0,
"last_non_activity_message": null,
"last_activity_at": 1766572062,
"waiting_since": 1766572062,
"sla_policy_id": null,
"ticket_id": null,
"over_limit": false,
"content_preview": {
"content": null,
"message_type": null,
"created_at": null
},
"platform": {
"channel_type": "Channel::Api",
"inbox_name": "JennyApi",
"inbox_id": 407
},
"account_info": {
"contact_name": "wjTest",
"contact_email": null,
"contact_phone": null,
"contact_id": 2219256,
"contact_avatar": ""
},
"assignment": {
"assignee_id": null,
"assignee_name": null,
"assignee_email": null,
"team_id": null,
"team_name": null
}
}
Afficher ce bloc de code dans la fenêtre flottante
Paramètres de réponse
| Field | Type | Required | Description |
|---|---|---|---|
| meta | Object | No | Objet de métadonnées. |
| sender | Object | No | Informations sur l’expéditeur. |
| additional_attributes | Object | No | Attributs supplémentaires. |
| availability_status | String | No | Statut de disponibilité. |
| Null | No | Adresse e-mail. | |
| id | Number | No | ID du contact. |
| name | String | No | Nom de l’expéditeur. |
| phone_number | Null | No | Numéro de téléphone. |
| blocked | Boolean | No | Indique si le contact est bloqué. |
| identifier | Null | No | Identifiant utilisateur. |
| thumbnail | String | No | Miniature. |
| custom_attributes | Object | No | Attributs personnalisés. |
| created_at | Number | No | Horodatage de création de la conversation. |
| channel | String | No | Type de canal. |
| hmac_verified | Boolean | No | Statut de vérification HMAC. |
| id | Number | No | ID de la conversation. |
| messages | Array | No | Tableau des messages. |
| account_id | Number | No | ID du projet. |
| uuid | String | No | Identifiant unique. |
| inbox_id | Number | No | ID du canal. |
| additional_attributes | Object | No | Attributs supplémentaires. |
| agent_last_seen_at | Number | No | Heure à laquelle l’agent a consulté ou traité la conversation pour la dernière fois. |
| assignee_last_seen_at | Number | No | Heure à laquelle la personne assignée a consulté ou traité la conversation pour la dernière fois. |
| can_reply | Boolean | No | Indique si une réponse peut être envoyée. |
| contact_last_seen_at | Number | No | Heure à laquelle le contact a été vu pour la dernière fois. |
| custom_attributes | Object | No | Attributs personnalisés. |
| labels | Array | No | Tableau des libellés. |
| muted | Boolean | No | Indique si la conversation est mise en sourdine. |
| snoozed_until | Null | No | Heure jusqu’à laquelle la conversation est mise en attente. |
| status | String | No | Statut. |
| priority | Null | No | Priorité. |
| conversation_category | String | No | Catégorie de la conversation. |
| chat_mode | String | No | Mode de discussion. |
| is_forum | Boolean | No | Indique s’il s’agit d’un forum. |
| created_at | Number | No | Horodatage de création. |
| updated_at | Number | No | Horodatage de mise à jour. |
| timestamp | Number | No | Horodatage. |
| first_reply_created_at | Number | No | Heure de création de la première réponse. |
| unread_count | Number | No | Nombre de messages non lus. |
| last_non_activity_message | Null | No | Dernier message ne correspondant pas à une activité. |
| last_activity_at | Number | No | Heure de la dernière activité. |
| waiting_since | Number | No | Heure du début de l’attente. |
| sla_policy_id | Null | No | ID de la politique SLA. |
| ticket_id | Null | No | ID du ticket. |
| over_limit | Boolean | No | Indique si la limite a été dépassée. |
| content_preview | Object | No | Aperçu du contenu. |
| content_preview.content | Null | No | Contenu de l’aperçu. |
| content_preview.message_type | Null | No | Type de message. |
| content_preview.created_at | Null | No | Heure de création. |
| platform | Object | No | Informations sur la plateforme. |
| channel_type | String | No | Type de canal. |
| inbox_name | String | No | Nom de la boîte de réception. |
| inbox_id | Number | No | ID de la boîte de réception. |
| account_info | Object | No | Informations sur le compte. |
| contact_name | String | No | Nom du contact. |
| contact_email | Null | No | Adresse e-mail du contact. |
| contact_phone | Null | No | Numéro de téléphone du contact. |
| contact_id | Number | No | ID du contact. |
| contact_avatar | String | No | Avatar du contact. |
| assignment | Object | No | Informations sur l’assignation. |
| assignee_id | Null | No | ID de la personne assignée. |
| assignee_name | Null | No | Nom de la personne assignée. |
| assignee_email | Null | No | Adresse e-mail de la personne assignée. |
| team_id | Null | No | ID de l’équipe. |
| team_name | Null | No | Nom de l’équipe. |
Envoyer un message
URL de la requête
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/:conversation_id/messages
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": "Le représentant du service client a envoyé un message. Est-ce normal ?",
"private": false,
"message_type": "incoming",
"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": "Le représentant du service client a envoyé un message. Est-ce normal ?",
"private": false,
"message_type": "incoming",
"content_attributes": {
"in_reply_to": 29
}
}'
Afficher ce bloc de code dans la fenêtre flottante
En-têtes de la requête
| Field | Type | Description |
|---|---|---|
| Authorization | string | Authentifiez-vous à l’aide de Authorization: Basic base64(API Key:API Secret). Accédez à la page API Keys pour obtenir l’API Key et l’API Secret, séparez-les par deux-points, puis encodez-les en Base64. |
| Content-Type | application/json | Type de données. Utilisez application/json pour les messages texte classiques. |
Paramètres du corps de la requête
| Field | Type | Required | Description |
|---|---|---|---|
| content | String | Yes | Contenu du message. |
| private | Boolean | No | Indique s’il s’agit d’un message privé. La valeur par défaut est false. |
| message_type | String | No | Type de message : outgoing ou incoming. Ils désignent respectivement les messages envoyés par le représentant du service client et par l’utilisateur. Si ce paramètre n’est pas spécifié, la valeur par défaut est outgoing. |
| content_attributes | String | No | Attributs du contenu. |
| in_reply_to | String | No | Contenu cible de la réponse. |










