Les webhooks sont des appels HTTP qui sont déclenchés par GHS vers une URL lors d’un évènement particulier. Lorsqu’un de ces évènements se produit, un POST HTTP est effectué sur l’adresse qui a été configurée, contenant un json. Le système attend une réponse HTTP 200 pour considérer que l’appel a bien été reçu, sinon le système réessaiera plus tard.
Webhooks
Contenu du Webhook
Tous les POST se font avec un objet de base.
{
"event_id": "48d4491f-6791-4608-8928-194a5da8375a",
"event_type": "signature.cree",
"event_date": "2022-11-02T13:39:03.139Z",
"data": { contenu complet de l'objet associé }
}
| Attribut | Description |
|---|---|
| event_id | UUID unique de l’évènement |
| event_type | Le nom de l’évènement |
| event_date | La date à laquelle l’évènement a été effectué. /!\ Nous ne garantissons par l’ordre d’arrivée des évènements. |
| data | les données de l’évènement |
Header du Webhook
| Attribut | Description |
|---|---|
| Content-Type | application/json |
| x-ghs-signature-256 | Signature de la requête qui permet de s’assurer que la requête vient bien de chez GHS |
Signature du Webhook
La signature vous permet de vous assurer que la contenu vient bien de chez GHS.
Pour cela, il faut comparer la signature que GHS vous donne dans les headers, avec la valeur que vous allez pouvoir calculer.
Pour la calculer , il faut faire un hachage HMAC SHA-256 de la concaténation du contenu du webhook avec la clé privée.
En javascript / express
const payload = req.body
const secret = la_cle_privee
const computed_signature = CryptoJS.HmacSHA256(payload, secret).toString();
if (signature == req.get(x-ghs-signature-256) {
console.log(ok)
}
En php
$signature = $_REQUEST[x-yousign-signature-256];
$payload = stream_get_contents(STDIN);
$secret = la_cle_privee;
$computed_signature = hash_hmac(sha256, utf8_encode($payload), utf8_encode($secret));
if ($computed_signature == $signature) {
echo "ok"
}
Events Webhook Signature
Il existe 6 types d’événements.
signature.cree
{
"event_id": "00cc7304-f521-4997-bf57-5a1fb030ec62",
"event_type": "signature.cree",
"event_date": "2023-01-09T15:32:08.335Z",
"data": {
"signature": {
"id": "63bc3378c11aadc40a7dddef",
"label": "Contrat n°1208",
"date_cree": "2023-01-09T15:32:08.316Z",
"date_maj": "2023-01-09T15:32:56.592Z",
"date_terminee": "2023-01-09T15:32:55.000Z",
"signataires": [
{
"id": "vincent_coquart_i0zoqyb6rg",
"prenom": "Coquart",
"nom": "Vincent",
"email": "vmail@mail.fr",
"telephone": "+33612345678",
"statut": "en_attente",
"date": "2023-01-09T15:32:55.000Z",
"url": "https://cloud-preprod.ghs.fr/signature/63bc3378c11aadc40a7dddef/lescure_david_ray6nd4xbt",
}
],
"statut": "en_attente"
"meta": {
"hello": "world",
"my": 1,
"name": true,
"whatsappp": {
"ab",
}
}
"documents": [
{
"nom_fichier": "contrat-1208.pdf",
"nombre_pages": 2
}
],
"active": true,
"webhook": true
}
}
}
signature.ok
{
"event_id": "d05ded2f-b164-4167-8ec1-6d422d395171",
"event_type": "signataire.ok",
"event_date": "2023-01-09T15:32:55.000Z",
"data": {
"signature": {
"id": "63bc3378c11aadc40a7dddef",
"label": "Contrat n°1208",
"date_cree": "2023-01-09T15:32:08.316Z",
"date_maj": "2023-01-09T15:32:56.592Z",
"date_terminee": "2023-01-09T15:32:55.000Z",
"signataires": [
{
"id": "vincent_coquart_i0zoqyb6rg",
"prenom": "Coquart",
"nom": "Vincent",
"email": "vmail@mail.fr",
"telephone": "+33612345678",
"statut": "fait",
"date": "2023-01-09T15:32:55.000Z",
"url": "https://cloud-preprod.ghs.fr/signature/63bc3378c11aadc40a7dddef/lescure_david_ray6nd4xbt",
}
],
"statut": "fait"
"meta": {
"hello": "world",
"my": 1,
"name": true,
"whatsappp": {
"ab",
}
}
"documents": [
{
"nom_fichier": "contrat-1208.pdf",
"nombre_pages": 2
}
],
"active": true,
"webhook": true
}
}
}
signataire.expiree
signataire.vu
{
"event_id": "b6541e04-6625-42d5-82cd-a4d918a0e8cb",
"event_type": "signataire.vu",
"event_date": "2023-01-09T15:32:23.000Z",
"data": {
"signature": {
"id": "63be9d1b9f0cb6c870700c0d",
"meta": {
"hello": "world",
"my": 1,
"name": true,
"whatsappp": {
"ab",
}
}
},
"signataire": {
"id": "vincent_coquart_i0zoqyb6rg",
"prenom": "Coquart",
"nom": "Vincent",
"email": "vmail@mail.fr",
"telephone": "+33612345678",
"statut": "vu",
"date": "2023-01-09T15:32:23.000Z"
}
}
}
signataire.ok
{
"event_id": "f8b6118c-93d4-4839-8ed5-192b12318def",
"event_type": "signataire.ok",
"event_date": "2023-01-09T15:32:55.000Z",
"data": {
"signature": {
"id": "63be9d1b9f0cb6c870700c0d",
"meta": {
"hello": "world",
"my": 1,
"name": true,
"whatsappp": {
"ab",
}
}
},
"signataire": {
"id": "vincent_coquart_i0zoqyb6rg",
"prenom": "Coquart",
"nom": "Vincent",
"email": "vmail@mail.fr",
"telephone": "+33612345678",
"statut": "fait",
"date": "2023-01-09T15:32:55.000Z"
}
}
}