Webhooks
Vous saurez tout sur l'intégration de webhooks dans Dastra
Dernière mise à jour
Cet article vous a-t-il été utile ?
Vous saurez tout sur l'intégration de webhooks dans Dastra
Dernière mise à jour
Cet article vous a-t-il été utile ?
Pour faire simple, les webhooks permettent de déclencher une action suite à un événement. Ils sont généralement utilisés pour faire communiquer des systèmes. C’est la façon la plus simple de recevoir une alerte lorsque quelque chose se produit dans Dastra. L'objectif est de notifier des applications tierces (API, CRM, Fonctions serverless...) en temps réel.
Pour configurer vos webhooks, rendez-vous sur la page : https://app.dastra.eu/general-settings/webhooks
Cliquez sur créer une "url de webhook"
Renseignez l'url de réception de votre webhook. Pour en savoir plus consultez la section Comment réceptionner le webhook.
Renseignez l'espace de travail concerné
Sélectionnez le ou les évènements auxquels vous souhaitez vous abonner. Le type de données renvoyés sera différent selon le type d'évènement. Par exemple, vous pouvez déclencher le webhook lors de la création d'une nouvelle demande d'exercice de droit. Dans ce cas le body de la requête contiendra un json
Enregistrez le webhook
Vous arrivez sur l'écran de détail du webhook.
Pour réceptionner les requêtes du webhook, vous devez créer un endpoint d'API de captation de l'évènement. La requête effectuée est en POST et sera toujours structurée de cette façon. Le body de la requête contient un json avec le détail de l'évènement déclenché.
Voici la structure générale de la réponse envoyée :
{
"webhookId": <id of the webhook configured in dastra>,
"signatureUrl": "https://yourapi.com/webhooks/handle",
"userId": <The user whot triggered the event>,
"eventType": <The id of the event>,
"eventName": <The label of the event>,
"data": <Event dynamic data>,
"date": <date of the event>
}
Un timeout de 10 secondes est appliqué sur la requête, au delà de ce temps la requête sera en erreur. Il est nécessaire que le code de réponse soit 200.
Il peut y avoir un petit délai entre le moment où l'évènement a lieu dans l'application et le déclenchement du webhooks (ce délai est lié à la nature asynchrone de l'exécution du webhook dans notre infrastructure). Ce délai est plus ou moins important selon la charge de notre infrastructure et peut aller jusque 60-120 secondes maximum.
Vous allez pouvoir tester votre webhook en condition réelle en cliquant sur le bouton "Tester".
Chaque fois qu'une requête de modification, suppression d'un élément de Dastra est effectuée, nous allons poster un objet sur toutes les urls que vous avez configurés sur l'évènement voulu. Dans chaque requête POST figurera une entête Dastra-Signature, cette entête peut être récupérée côté serveur.
Cette entête correspond à l'intégralité du JSON posté est hashé à l'aide de l'algorithme HMAC-Sha256 à l'aide de la clé de validation du webhook.
DastraSignature = HMAC256(<JSON sérialisé du POST>,<clé de validation du webhook>)
Voici quelques exemples de validation de la signature de la requête :
error_reporting(E_ALL);
ini_set('display_errors', 1);
c
$secret = "your dastra validation key";// your secret key
$payload = "";// equest body
$headers = "";// request message headers array
$signature = "";// the HMAC hash key in the HTTP header 'Dastra-Signature'
$result = false;// verification result
if (isset($_POST)) {
try {
$payload = file_get_contents('php://input');
$headers = get_ds_headers();
if (array_key_exists("Dastra-Signature", $headers)) {
$signature = $headers["Dastra-Signature"];
$result = hash_is_valid($secret, $payload, $signature);
log_result($signature, $payload, $result);
}
} catch (Exception $e) {
logger("\nException: " . $e->getMessage() . "\n");
}
header("HTTP/1.1 200 OK");
}
function get_ds_headers()
{
$headers = array();
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$headers[str_replace(' ', '', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))))] = $value;
}
}
return $headers;
}
function compute_hash($secret, $payload)
{
$hexHash = hash_hmac('sha256', $payload, utf8_encode($secret));
$base64Hash = base64_encode(hex2bin($hexHash));
return $base64Hash;
}
function hash_is_valid($secret, $payload, $verify)
{
$computed_hash = compute_hash($secret, $payload);
return hash_equals($verify,$computed_hash);
}
Le webhook sera automatiquement bloqué et considéré en erreur quand le seuil de 5 erreurs est dépassé.
Récupérer les webhooks liés à votre compte (dans tous les espaces de travail)
Créez une nouvelle url de webhook en utilisant le endpoint POST. Renseignez les évènements auxquels vous souhaitez abonner votre webhook avec le paramètre subscribedEvents webhooks.
Un identifiant de webhook vous sera retourné
GET /v1/WebHookUrls HTTP/1.1
Host: api.dastra.eu
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
Success
[
{
"signatureKey": "123e4567-e89b-12d3-a456-426614174000",
"errorMessage": "text",
"nbErrors": 1,
"dateLastError": "2025-06-21T06:25:19.142Z",
"inError": true,
"workSpace": {
"id": 1,
"tenantId": 1,
"primaryColor": "text",
"secondaryColor": "text",
"label": "text",
"logoUrl": "text",
"state": "Active",
"permissions": [
{
"name": "text",
"tenantId": 1,
"workSpaceId": 1,
"shortName": "text"
}
],
"dataSubjectArchivedRetentionDays": 1,
"nbEntities": 1
},
"id": 1,
"url": "text",
"workSpaceId": 1,
"subscribedEvents": [
"ProcessingCreation"
]
}
]
GET /v1/WebHookUrls/{id} HTTP/1.1
Host: api.dastra.eu
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
Success
{
"signatureKey": "123e4567-e89b-12d3-a456-426614174000",
"errorMessage": "text",
"nbErrors": 1,
"dateLastError": "2025-06-21T06:25:19.142Z",
"inError": true,
"workSpace": {
"id": 1,
"tenantId": 1,
"primaryColor": "text",
"secondaryColor": "text",
"label": "text",
"logoUrl": "text",
"state": "Active",
"permissions": [
{
"name": "text",
"tenantId": 1,
"workSpaceId": 1,
"shortName": "text"
}
],
"dataSubjectArchivedRetentionDays": 1,
"nbEntities": 1
},
"id": 1,
"url": "text",
"workSpaceId": 1,
"subscribedEvents": [
"ProcessingCreation"
]
}
POST /v1/WebHookUrls HTTP/1.1
Host: api.dastra.eu
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 79
{
"id": 1,
"url": "text",
"workSpaceId": 1,
"subscribedEvents": [
"ProcessingCreation"
]
}
Success
{
"signatureKey": "123e4567-e89b-12d3-a456-426614174000",
"errorMessage": "text",
"nbErrors": 1,
"dateLastError": "2025-06-21T06:25:19.142Z",
"inError": true,
"workSpace": {
"id": 1,
"tenantId": 1,
"primaryColor": "text",
"secondaryColor": "text",
"label": "text",
"logoUrl": "text",
"state": "Active",
"permissions": [
{
"name": "text",
"tenantId": 1,
"workSpaceId": 1,
"shortName": "text"
}
],
"dataSubjectArchivedRetentionDays": 1,
"nbEntities": 1
},
"id": 1,
"url": "text",
"workSpaceId": 1,
"subscribedEvents": [
"ProcessingCreation"
]
}