Les webhooks sont la façon d'avoir ThriveDesk qui appelle un script sur votre serveur lorsque un ou plusieurs événements se sont produits, vous permettant de réagir comme bon vous semble. Les webhooks peuvent être considérés comme des écouteurs d'événements ou des notifications push.
Événements disponibles :
Événements disponibles :
Chaque corps de requête utilise le format d'objet lié dans le tableau ci-dessous. Tous les webhooks utilisent la charge utile v1
| Nom de l'événement | Type d'événement |
|---|---|
| Conversation créée | conversation.created |
| Conversation assignée | conversation.assigned |
| Note ajoutée à la conversation | conversation.note.added |
| L'utilisateur répond à la conversation | conversation.agent.replied |
| Le client répond à la conversation | conversation.contact.replied |
| Statut de la conversation mis à jour | conversation.status.updated |
| Tags de conversation ajoutés/mis à jour | conversation.tags.updated |
| Conversation déplacée | conversation.moved |
Réponse :
Un exemple de corps de réponse a été démontré ici :
{
"eventType": "conversation.tags.updated",
"data": {
"type": "conversation",
"id": "dea1fca0-6529-43fd-91df-044afbf2a1d4",
"ticketId": 26,
"subject": "Duis aute irure dolor in reprehenderit in voluptate velit",
"excerpt": "Cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat...",
"status": "Actif",
"priority": "Normal",
"active": true,
"createdAt": "2021-06-29T13:04:05.000000Z",
"tags": [
"Beatae",
"Consequuntur",
"Cumque"
],
"inbox": {
"id": "f86385ff-9ce5-456a-a207-0bbf4ec59c0e",
"name": "Dev",
"inboxAddress": "example@app.thrivedesk.email",
"connectedEmailAddress": "example@mail.com"
},
"cc": [
"examplecc@mail.com"
],
"bcc": [
"examplebcc@mail.com"
],
"assignedTo": {
"id": "050cbdb6-a973-40df-a5dd-b7f72c993055",
"firstName": "Assigné",
"lastName": "Exemple",
"email": "exampleassigned@mail.com"
},
"contact": {
"id": "925298d4-a7d9-4d6b-8a01-10b2dea439aa",
"name": "exemple",
"email": "example@mail.com",
"avatar": null
},
"hasAttachment": false,
"hasInlineAttachment": false,
"threadsCount": 3,
"threads": [
{
"id": "967b48b3-32d7-4d63-81cc-4f6d04d879b1",
"type": "Email",
"status": "Actif",
"direction": "Sortant",
"htmlBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut...",
"textBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut...",
"createdAt": "2021-06-29T13:04:05.000000Z",
"updatedAt": "2021-06-29T13:04:05.000000Z",
"viewedAt": null
},
{
"id": "e84aea7e-65ee-4b5a-a8d0-4f216192847e",
"type": "Email",
"status": "Actif",
"direction": "Sortant",
"htmlBody": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea...",
"textBody": null,
"createdAt": "2021-06-29T13:04:46.000000Z",
"updatedAt": "2021-06-29T13:04:46.000000Z",
"viewedAt": null
},
{
"id": "ce7946ae-86c4-4891-af2a-485d984a6a74",
"type": "Note",
"status": "Actif",
"direction": null,
"htmlBody": "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla...",
"textBody": null,
"createdAt": "2021-06-29T13:04:59.000000Z",
"updatedAt": "2021-06-29T13:04:59.000000Z",
"viewedAt": null
}
]
}
}Champs de réponse (Conversation) :
| Chemin | Type | Description |
|---|---|---|
| eventType | String | Type de l'événement, l'un des événements disponibles |
| type | String | Type de données, ex : conversation |
| data | Object | Corps principal de la réponse |
| id | String | Identifiant unique |
| ticketId | Integer | Identifiant unique du ticket |
| subject | String | Sujet de la conversation |
| excerpt | String | Extrait de la conversation |
| status | String | Statut de la conversation, l'un des suivants : Actif En attente Fermé |
| priority | String | Priorité de la conversation, l'une des suivantes : Élevé Normal Faible |
| active | Boolean | Statut actif de la conversation |
| createdAt | String | Heure UTC à laquelle la conversation a été créée |
| tags | Array | Liste des tags, avec les champs suivants : nom |
| inbox | Object | Informations sur la boîte de réception de la conversation, avec les champs suivants : id nom adresseBoîteRéception adresseEmailConnectée |
| cc | Array | Liste des e-mails en copie |
| bcc | Array | Liste des e-mails en copie cachée |
| assignedTo | Object | À qui la conversation est assignée, avec les champs suivants : id prénom nom |
| contactInfo | Object | Un objet contenant les informations de contact associées à la conversation avec les champs suivants : id nom avatar |
| hasAttachment | Boolean | La conversation contient-elle une pièce jointe ou non |
| hasInlineAttachment | Boolean | La conversation contient-elle une pièce jointe en ligne ou non |
| isDraft | Boolean | La conversation est-elle un brouillon ou non |
| threadsCount | Integer | Nombre de fils de discussion que la conversation a |
| threads | Array | Liste des fils de discussion, avec les champs suivants : id type (Email, Note, Brouillon) statut Direction (Entrant, Sortant) htmlBody textBody createdAt updatedAt viewedAt |
En-têtes :
Chaque webhook inclut un en-tête ThriveDesk :
Vérification :
const crypto = require('crypto'); /** * request.body.data * * uniquement le champ de données du corps de la requête */ if (isFromThriveDesk(request.body.data, signature, secret_key)) { // faire quelque chose } let isFromThriveDesk = (data, signature, secret_key) => { return signature === crypto .createHmac('SHA1', secret_key) .update(JSON.stringify(data)) .digest('base64'); }
Réponses :
Tout ce qui est renvoyé au corps de la réponse sera ignoré. Afin de savoir si le webhook a réussi, un code de statut HTTP entre 200 et 299 doit être renvoyé.
Un code de statut de 410 entraînera la désactivation/suppression du webhook.
Tous les codes de statut autres que quelque chose entre 200 et 299 ou 410 sont un échec d'une certaine sorte. Si l'événement échoue plusieurs fois, il est ignoré.