Les notifications Webhook permettent à Sign In App d'envoyer une alerte à des applications externes lorsqu'un visiteur ou un membre du personnel enregistre son entrée ou sortie. Les webhooks sont configurés dans les notifications, de sorte que des règles différentes peuvent être définies par site ou par groupe de visiteurs. Les filtres avancés vous permettent de construire votre propre flux de travail, en envoyant différentes notifications webhook basées sur les données fournies par vos visiteurs.
Avertissement:
Les événements Webhook ne sont pas émis pour la fonctionnalité d'enregistrement de sortie automatique. Par exemple, si le système est configuré pour que tous les visiteurs enregistrent leur sortie du site à minuit, un événement webhook ne sera pas émis pour chaque individu. Si les webhooks sont utilisés dans un scénario de synchronisation des données, la meilleure option est d'utiliser le endpoint de l'historique.
> curl -d '{...}' -X POST https://your.url/
Configuration
La création d'une notification s'effectue par le biais du portail via Gérer > Notifications. Ajoutez une nouvelle notification et sélectionnez webhook comme canal. Les conditions requises pour un webhook sont le endpoint URL et une clé secrète pour la signature du webhook.
Vous trouverez plus d'informations sur la configuration des notifications dans Notifications de groupe.
Demande
Événements pris en charge:
Les événements actuellement supportés par les webhooks sont visitor.signin
, visitor.signout
.
Schéma
Key | Type | Description |
|
| Nom de l'événement |
|
| Date de l'événement (format ISO8601) |
|
| Date à laquelle l'événement a été poussé (format ISO8601) |
|
| Clé unique pour l'événement |
|
| Le site du visiteur sur lequel l'événement s'est produit |
|
| Le visiteur pour lequel l'événement s'est produit |
Objet du site
Key | Type | Description |
|
| Identifiant unique du site |
|
| Type de site, qui peut être |
|
| Nom du site |
|
| Le fuseau horaire du site |
Objet visiteur
Key | Type | Description |
|
| Identificateur unique du visiteur |
|
| Identifiant unique du visiteur qui revient, s'il a été défini |
|
| Le nom du visiteur |
|
| Url vers une image de la photo du visiteur (optionnel) |
|
| URL d'une image du badge du visiteur ( optionnel) |
|
| Données supplémentaires enregistrées sur le visiteur |
|
| Champs personnels associés au visiteur ( qui revient) |
|
| Il s'agit d'un visiteur dont on sait qu'il revient sur le site |
|
| Si le visiteur a été pré-enregistré |
|
| Si le visiteur a été considéré comme distant |
Champs supplémentaires et personnels
Les champs additionnels et personnels sont des valeurs clés Objects
.
{
"field1": "value1",
"field2": 789,
"field3": true
}
Exemple
Voici un exemple formaté des données. Un corps de requête typique ne contiendrait pas de nouvelles lignes ni d'espaces supplémentaires.
{
"event": "visitor.signin",
"event_at": "2020-01-01T12:00:01Z",
"pushed_at": "2020-01-01T12:00:01Z",
"idempotency_key": "4EPAoqR4N8jZktby",
"site": {
"id": 4567,
"type": "standard",
"name": "Acme Co",
"timezone": "Europe/London"
},
"visitor": {
"id": 1234,
"name": "John Smith",
"photo_url": null,
"badge_url": null,
"additional": {
"Company": "Acme Ltd",
"Email Address": "[email protected]"
},
"personal_fields": {
"role": "Director",
"Car Reg": "ABC 123"
},
"is_returning": false,
"is_pre_registered": false,
"is_remote": false
},
"visiting": {
"id": 8,
"name": "Adele Vance",
"role": "Retail Manager",
"email": "[email protected]",
"mobile": ""
}
}
Réponse
Sign In App attend un code de réponse 2xx HTTP pour confirmer que la demande a abouti.
Erreurs
Lorsque votre endpoint répond avec un code d'état HTTP qui n'est pas considéré comme un succès, Sign In App continuera à réessayer pendant un maximum de 3 fois avant d'abandonner.
Vérification de la signature
La vérification de la signature fournit un mécanisme permettant d'authentifier la demande envoyée par Sign In App. Pour ce faire, nous disposons d'un code secret partagé, renseigné lors de la mise en place du webhook. Bien que cela soit facultatif, il est recommandé de le faire.
Exemple
Lorsqu'une requête webhook est faite à l'url webhook, elle inclura également un en-tête HTTP avec le nom x-signinapp-webhook-signature
.
L'en-tête est composé de deux parties séparées par une virgule. Par exemple, x-signinapp-webhook-signature : t=1644316744,s1=462fa402e927893dee0bfec09379718a507c883919442de3dcb1504142ceaa5d
La valeur t
est un horodatage utilisé pour confirmer l'envoi du webhook.
La valeur s1
est un sha256 hmac
de l'horodatage de t
concaténé avec le corps http.
Exemple Python :
hmac.new("MySharedSecret", "timestamp.body", hashlib.sha256).hexdigest()
Remplacer le secret partagé, l'horodatage et le corps http. Notez qu'il y a un endpoint entre l'horodatage et le corps http.
Vous devez vérifier que le résultat de cet appel correspond à s1
dans l'en-tête de la requête du webhook.
Autres exemples de code :
Javascript:
const crypto = require('crypto');
crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + payload, 'utf8')
.digest('hex');
PHP:
$header = $request->getHeader('X-SignInApp-Webhook-Signature');
[$timestamp, $signature] = getSignatureParts($header);
hash_equals($signature, hash_hmac("sha256", "{$timestamp}.{$jsonEncodedPayload}", $secret));
Java:
String signedPayload = String.format("%d.%s", timestamp, payload);
String expectedSignature = Util.computeHmacSha256(secret, signedPayload);
Util.secureCompare(expectedSignature, signature)