Articles sur : Technique
Cet article est aussi disponible en :

Webhooks

Naviguez rapidement vers :



Utiliser les webhooks


Pour commencer à utiliser les webhooks avec Robaws, enregistrez votre endpoint webhook en effectuant un POST sur /api/v2/webhook-endpoints. Pour la définition complète de la requête, consultez la documentation de référence de l'api. Veuillez conserver le secret que nous vous renvoyons lors de la création de l'endpoint, car vous en aurez besoin pour vérifier nos signatures.


Après quelques secondes, lorsque votre abonnement devient actif, vous devriez recevoir de notre part des appels HTTP POST vers l'URL que vous avez spécifiée.


Voici un exemple d'un tel HTTP POST :


POST https://your-host/your-webhook-endpoint
Content-Type: application/json
Robaws-Signature: t=1674742714,v1=signature

{
"id":"37de8552-0007-4269-a76c-06a9415c8b65",
"event":"client.updated",
"data": {
....
}
}


Vérifier la signature


Il est important que vous vérifiiez la signature que nous envoyons dans l'en-tête 'Robaws-Signature', car sinon vous ne pouvez pas être certain que l'appel HTTP provient bien de Robaws. Ceci est d'autant plus important que nous n'envoyons pas seulement l'id dans l'événement, mais l'ensemble des données.


Afin de vérifier notre signature, vous avez besoin du secret que nous avons renvoyé lors de la création de l'endpoint.


Étape 1 : extraire le timestamp et la signature de l'en-tête


Divisez l'en-tête, en utilisant le caractère , comme séparateur, pour obtenir une liste d'éléments. Divisez ensuite chaque élément, en utilisant le caractère = comme séparateur, pour obtenir une paire préfixe et valeur.
La valeur du préfixe t correspond au timestamp, et v1 correspond à la signature. Vous pouvez ignorer tous les autres éléments.
Si vous les divisez à nouveau sur "=", cela vous donne les valeurs dont vous avez besoin.


Étape 2 : préparer la chaîne signed_payload


La chaîne signed_payload est créée en concaténant :


Le timestamp (sous forme de chaîne)
Le caractère .
Le payload JSON réel (c'est-à-dire le corps de la requête)


Étape 3 : Déterminer la signature attendue


Calculez un HMAC avec la fonction de hachage SHA256. Utilisez le secret de signature de l'endpoint comme clé, et utilisez la chaîne signed_payload comme message. Convertissez le résultat en représentation hexadécimale.


Étape 4 : Comparer les signatures


Comparez la signature de l'en-tête à la signature attendue. Pour une correspondance d'égalité, calculez la différence entre le timestamp actuel et le timestamp reçu, puis décidez si la différence est dans votre tolérance pour vous protéger contre les attaques par rejeu. Pour vous protéger contre les attaques temporelles, utilisez une comparaison de chaînes à temps constant pour comparer la signature attendue à chacune des signatures reçues.


Quelques considérations


  • Seuls les utilisateurs admin peuvent enregistrer des endpoints. Actuellement, il n'y a pas d'interface pour enregistrer les endpoints webhook. Cela ne peut se faire que via l'API.
  • Nous considérons le webhook comme réussi lorsque l'endpoint renvoie une réponse 2XX. Nous réessaierons plusieurs fois tant que votre endpoint ne parvient pas à répondre avec succès. Notre délai d'expiration de connexion est de 2 secondes et le délai d'expiration de lecture est de 2 secondes. Cela signifie que si nous ne recevons pas de réponse dans les 2 secondes, nous continuerons à réessayer la requête jusqu'à ce que nous en recevions une. Si nous n'obtenons jamais de réponse réussie, nous pouvons suspendre votre webhook sans avertissement.
  • Les webhooks peuvent être testés facilement en utilisant https://webhook.site



Types d'événements pris en charge


Actuellement, les types d'événements suivants sont pris en charge. Si vous avez besoin d'un autre événement, veuillez nous le faire savoir via support@robaws.be.


Clients

client.created
client.updated


Sales invoices

sales-invoice.created
sales-invoice.updated


Purchase invoices

purchase-invoice.created
purchase-invoice.updated


Offers

offer.created
offer.updated
offer.recalculated


Settlements

settlement.created
settlement.updated
settlement.recalculated


Projects

project.created
project.updated


Articles

article.created
article.updated
article.stock-changed


Employees

employee.created
employee.updated


Planning items

planning-item.created
planning-item.updated


Work orders

work-order.created
work-order.updated


Materials

material.created
material.updated


Installations

installation.created
installation.updated


Documents

document.created
document.updated


Comments

comment.created
comment.updated


Sales orders

sales-order.created
sales-order.updated


Form answers

form-answer.created
form-answer.updated

Mis à jour le : 05/07/2026

Cet article a-t-il répondu à vos questions ?

Partagez vos commentaires

Annuler

Merci !