Los webhooks son la forma de hacer que ThriveDesk llame a un script en su servidor cuando uno o más eventos han ocurrido, permitiéndole reaccionar como desee. Los webhooks se pueden considerar como oyentes de eventos o notificaciones push.
Eventos disponibles:
Eventos disponibles:
Cada cuerpo de solicitud utiliza el formato de objeto vinculado en la tabla a continuación. Todos los webhooks utilizan la carga útil v1
| Nombre del evento | Tipo de evento |
|---|---|
| Conversación creada | conversation.created |
| Conversación asignada | conversation.assigned |
| Nota añadida a la conversación | conversation.note.added |
| El usuario responde a la conversación | conversation.agent.replied |
| El cliente responde a la conversación | conversation.contact.replied |
| Estado de la conversación actualizado | conversation.status.updated |
| Etiquetas de conversación añadidas/actualizadas | conversation.tags.updated |
| Conversación movida | conversation.moved |
Respuesta:
Un cuerpo de respuesta de muestra se ha demostrado aquí:
{
"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": "Activo",
"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": "Asignado",
"lastName": "Ejemplo",
"email": "exampleassigned@mail.com"
},
"contact": {
"id": "925298d4-a7d9-4d6b-8a01-10b2dea439aa",
"name": "ejemplo",
"email": "example@mail.com",
"avatar": null
},
"hasAttachment": false,
"hasInlineAttachment": false,
"threadsCount": 3,
"threads": [
{
"id": "967b48b3-32d7-4d63-81cc-4f6d04d879b1",
"type": "Email",
"status": "Activo",
"direction": "Saliente",
"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": "Activo",
"direction": "Saliente",
"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": "Nota",
"status": "Activo",
"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
}
]
}
}Campos de respuesta (Conversación):
Los webhooks pueden ser verificados como provenientes de ThriveDesk calculando una firma digital. Cada solicitud de webhook contiene un X-TD-SIGNATURE encabezado, generado utilizando la clave secreta dada, junto con los datos de carga útil codificados en JSON (solo el campo de datos de la respuesta) enviados en la solicitud.
Para verificar si la solicitud provino de ThriveDesk, calcula el HMAC hash y compáralo con el valor del encabezado enviado en la solicitud. Si las firmas calculadas coinciden, puedes estar seguro de que la solicitud fue enviada desde ThriveDesk.
Las firmas se calculan en función del cuerpo de la solicitud en bruto que ThriveDesk pasa a tus servidores. Esto significa que si hay caracteres no ASCII en la carga útil, necesitarás calcular la firma en función de la cadena escapada y transliterada que ThriveDesk te pasa. Recomendamos esto como mejor práctica en general, incluso para aquellos que trabajan principalmente con datos ASCII.
PHP
function isFromThriveDesk($data, $signature, $secret_key) { $calculate = base64_encode(hash_hmac('sha1', json_encode($data), $secret_key, true)); return $signature == $calculate; } /** * $request->get('data') * * solo el campo de datos del cuerpo de la solicitud */ if (isFromThriveDesk($request->get('data'), $signature, $secret_key)) { // hacer algo }
Node JS
const crypto = require('crypto'); /** * request.body.data * * solo el campo de datos del cuerpo de la solicitud */ if (isFromThriveDesk(request.body.data, signature, secret_key)) { // hacer algo } let isFromThriveDesk = (data, signature, secret_key) => { return signature === crypto .createHmac('SHA1', secret_key) .update(JSON.stringify(data)) .digest('base64'); }
Respuestas:
Cualquier cosa devuelta al cuerpo de la respuesta será descartada. Para saber que el webhook fue exitoso, debe devolverse un código de estado HTTP entre 200 y 299.
Un código de estado de 410 hará que el webhook se desactive/elimine.
Cualquier código de estado diferente a algo entre 200 y 299 o 410 es un fallo de algún tipo. Si el evento falla varias veces, se descarta.