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
email
contactInfo Object Un objet contenant les informations de contact associées à la conversation avec les champs suivants :
id
nom
email
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é.