Création de webhooks
Afin de recevoir des alertes lorsque des événements se produisent concernant votre compte Samsara, vous avez la possibilité de créer des webhooks. C’est particulièrement utile si vous cherchez à développer des intégrations qui relaient une alerte spéciale en cas d’événement, par exemple, lorsqu’un véhicule arrive à un emplacement donné, ou si la température de votre conteneur dépasse un certain seuil. Pour une liste complète de toutes les alertes liées à la solution Samsara, reportez-vous à cette Page de synthèse des alertes.
Les webhooks peuvent être visualisés et créés via le tableau de bord Samsara. Cliquez sur l’icône « roue » puis sélectionnez Webhooks. Cliquez sur (+ Ajouter un webhook) pour créer un webhook. À chaque webhook doit être associé un nom et un chemin vers une adresse URL https.
Une fois qu’un webhook a été créé, des alertes individuelles peuvent être configurées pour être envoyées vers une URL webhook spécifique. Pour ce faire, vous pouvez accéder à l’icône « cloche » et configurer une alerte existante ou en créer une nouvelle.
Remarque : cette fonctionnalité n’est pas encore disponible pour l’alerte de rapport d’inspection concernant un véhicule non sûr.
Réponse à des événements webhook
Vous devez accuser réception d’une requête de webhook avec un code de réponse de type 2xx. Si la réception d’un webhook n’est pas confirmée, Samsara renverra la requête en appliquant un algorithme de repli exponentiel.
Champ de données
Les webhooks Samsara renvoient des réponses dans le format de données JSON.
Exemple de champ de données
Cliquez ici pour accéder au détail des attributs de champ de données.
Alerte de géorepérage :
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Le véhicule est dans le périmètre géographique",
"alertConditionId": "DeviceLocationInsideGeofence",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Le camion ABC' est à 8 kilomètres d’Acme Bread",
"device": {
"id": 2000,
"name": "Camion ABC",
"serial": "ABC123",
"vin": "1M8GDM9AXKP042788"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Le camion ABC' est dans le périmètre géographique d’Acme Bread"
}
}
Alerte batterie du véhicule :
{
"eventId": "746bd028-44df-4df4-9dc8-c4c887d9bff0",
"eventMs": 1587151453491,
"eventType": "Alert",
"event": {
"alertEventUrl": "https://cloud.samsara.com/o/00001/alerts/incidents/v2/30750/1/212014918214835/1587151393206/link?dl=eyJkZWVwTGlua1R5cGUiOiJBbGVydENvbmRpdGlvblR5cGVfQmF0dGVyeVZvbHRhZ2VCZWxvdyIsImdyb3VwSWQiOjE2NzM3fQ==",
"alertConditionDescription": "Tension batterie inférieure à",
"alertConditionId": "BatteryVoltageBelow",
"details": "Le niveau de batterie du véhicule pour 'le camion ABC' a chuté en dessous de 15 000 V depuis plus de 0 minutes. Il est actuellement de 12 052 V.",
"device": {
"id": 212014918214835,
"name": "Camion ABC",
"serial": "ABC123",
"vin": "2JEA93JALLAL211A"
},
"orgId": 123,
"resolved": false,
"startMs": 1587151393206,
"summary": "Le niveau de batterie du véhicule pour 'le camion ABC' a chuté en dessous de 15 000 V depuis plus de 0 minutes. Il est actuellement de 12 052 V."
}
}
Alerte excès de vitesse :
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Vitesse du véhicule",
"alertConditionId": "DeviceSpeedAbove",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Le camion ABC' était en excès de vitesse à 105 km/h dans une zone de limitation à 80 km/h",
"driver": {
"id": 5000,
"name": "Fou du volant"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Le camion ABC' était en excès de vitesse à 105 km/h dans une zone de limitation à 80 km/h"
}
}
Alerte d’arrivée à un point d’arrêt d’itinéraire :
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Seuil de l’heure d’arrivée estimée pour l’itinéraire",
"alertConditionId": "DispatchRouteETAThreshold",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Le camion ABC' est à 15 minutes d’ACME Bread",
"route": {
"id": 6000,
"name": "Itinéraire Bread"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Le camion ABC' est à 15 minutes d’ACME Bread"
}
}
Alerte de température :
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "La température ambiante est supérieure à",
"alertConditionId": "TemperatureAbove",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'La sonde de température' a dépassé 4,4 degrés Celsius depuis 15 minutes",
"sensor": {
"id": 7000,
"name": "Sonde de température",
"serial": "ABC123"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'La sonde de température' a dépassé 4,4 degrés Celsius depuis 15 minutes"
}
}
Attributs
eventId |
Identifiant événement unique. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chaîne |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eventMs |
Période en millisecondes epoch à laquelle a été généré l’événement. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
entier |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eventType |
Sera toujours « alerte ». |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chaîne |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event |
L’événement qui a déclenché cette alerte. Voir ci-dessous pour les attributs. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
objet |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Tableau des situations d’alerte
Nom de l’alerte dans Samsara |
Identifiant de la situation d’alerte |
Description de la situation d’alerte |
Détails |
Niveau de batterie |
BatterieFaible |
« Niveau de batterie faible » |
« {nomComposant} niveau de batterie faible. » « {nomAppareil} affiche un niveau de batterie faible. » |
Température |
TempératureInférieure TempératureSupérieure |
« La température ambiante est inférieure à » « La température ambiante est supérieure à » |
« {nomComposant} la température ambiante a dépassé {valeurTemp} {unitéTemp} depuis plus de {durée} minutes. » « {nomComposant} la température ambiante a chuté en dessous de {valeurTemp} {unitéTemp} depuis plus de {durée} minutes. » « {nomComposant} la température de la sonde a dépassé {valeurTemp} {unitéTemp} depuis plus de {durée} minutes. » « {nomComposant} la température de la sonde a chuté en dessous de {valeurTemp} {unitéTemp} depuis plus de {durée} minutes. » |
Humidité |
HumiditéInférieure HumiditéSupérieure |
« Le taux d’humidité est supérieur à » « Le taux d’humidité est inférieur à » |
« {nomComposant} le taux d’humidité a dépassé {seuil} % depuis plus de {durée} minutes. Il est actuellement de {tauxHumidité} % », « {nomComposant} le taux d’humidité a chuté en dessous de {seuil} % depuis plus de {durée} minutes. Il est actuellement de {tauxHumidité} % » |
Connexion |
AppareilDéconnecté |
« Le boîtier télématique est déconnecté » |
« Capteur {nomAppareil} déconnecté. Les alertes en direct ne seront pas transmises pour ce capteur lorsqu’il est déconnecté. » |
Boîtier véhicule débranché |
AppareilDébranché |
« Le boîtier télématique est débranché » |
« {nomAppareil} a été débranché. » « {nomAppareil} est débranché depuis plus de {durée} minutes. » |
Périmètre géographique |
LocalisationAppareilDansPérimètre LocalisationAppareilHorsPérimètre |
« Le véhicule est dans le périmètre géographique » « Le véhicule est hors du périmètre géographique » |
« {nomAppareil} est {dansOuHors} {nomPérimètre}. » « {nomAppareil} est {dansOuHors} {nomPérimètre} depuis plus de {durée} minutes. » |
Vitesse |
VitesseAppareilSupérieure VitesseAppareilSupérieureLimitation |
« Vitesse du véhicule » « Vitesse du véhicule supérieure à la limitation » |
« {nomAppareil} la vitesse a dépassé {vitesseLimite}. » « {nomAppareil} la vitesse est supérieure à {vitesseLimite}. Actuellement {vitesseActuelle}. Localisation : {localisation} » « {nomAppareil} la vitesse a dépassé {vitesseLimite} depuis plus de {min} minutes. » « {nomAppareil} la vitesse a dépassé la limitation de vitesse de {dépassementVitesse}. » « {nomAppareil} la vitesse a dépassé la limitation de vitesse de {dépassementVitesse} depuis plus de {durée} minutes. » |
Défaillance véhicule |
VéhiculeDéfaillant |
« Véhicule défaillant » |
|
Moteur du véhicule au ralenti |
MoteurRalenti |
« Moteur ralenti » |
« {nomAppareil} le moteur tourne au ralenti. » « {nomAppareil} le moteur tourne au ralenti depuis plus de {durée en min} minutes. » « {nomAppareil} le moteur tourne au ralenti depuis plus de {durée en min} minutes à {localisation}. » |
Batterie du véhicule |
TensionBatterieInférieure |
« Tension batterie inférieure à » |
« {nomAppareil} le niveau de batterie du véhicule a chuté en dessous de {seuil} V depuis plus de {durée} minutes. Il est actuellement de {valeurBatterie} V. » |
Mouvement |
MouvementAppareil |
« Véhicule en mouvement » |
« {nomAppareil} est en mouvement. » « {nomAppareil} est en mouvement depuis plus de {durée} minutes. » |
Porte ouverte |
PorteActivée |
« Porte ouverte » |
« {nomVéhicule} la porte est ouverte. » « {nomVéhicule} la porte est ouverte depuis plus de {durée} minutes. » |
Caméra embarquée déconnectée |
CaméraEmbarquéeDéconnectée |
« Caméra embarquée déconnectée » |
« La caméra embarquée sur {nomAppareil} a été déconnectée. » |
Arrivée à un point d’arrêt d’itinéraire |
ItinéraireSeuilHeureArrivéeEstimée |
« Seuil de l’heure d’arrivée estimée pour l’itinéraire » |
« Le véhicule {nomVéhicule} sur l’itinéraire {nomItinéraire} est approximativement à {tempsRestant} minutes de {nomDestination}. » |
Alarme groupe frigorifique |
NouvelleAlarmeGroupeFrigorifique |
« Nouvelle alarme groupe frigorifique détectée » |
|
Température groupe frigorifique |
TempératureGroupeFrigorifiqueSupérieureNiveauDéfini TempératureGroupeFrigorifiqueInférieureNiveauDéfini |
« Température de l’air du groupe frigorifique supérieure au niveau défini. » « Température de l’air du groupe frigorifique inférieure au niveau défini. » |
|
Événement brusque |
ÉvénementBrusque |
« Un événement brusque s’est produit. » |
« Un événement brusque a été détecté sur le véhicule {nomVéhicule} à {heureDébut}. », « Un événement brusque a été détecté sur le véhicule {nomVéhicule} à {heureDébut}. Rapport d’incident : {lienIncident} » |
Maintenance planifiée |
DateMaintenancePlanifiée MaintenancePlanifiéeHeuresFonctionnementMoteur MaintenancePlanifiéeCompteurKilométrique |
« Maintenance planifiée nécessaire » « Maintenance planifiée nécessaire basée sur les heures de fonctionnement moteur » « Maintenance planifiée nécessaire basée sur le compteur kilométrique » |
« Maintenance préventive à planifier {intituléMaintenance} pour véhicule {nomVéhicule} » « Maintenance préventive à planifier {intituléMaintenance} pour {nbrVéhicules} véhicules, dont les suivants : {nomsVéhicules} » |
Transmission de document |
DocumentConducteurTransmis |
« Transmission de document » |
« Un document {nomModèleDocument} a été transmis par {nomConducteur} à {heureTransmission}. Document : {urlDocument} (Identifiant : {IdDocument}) », |
Vérification de signatures webhook
Samsara utilise des signatures webhook pour indiquer qu’un champ de données a été envoyé par Samsara. Les champs de données de webhook sont signés au moyen de l’algorithme de chiffrement HMAC-SHA256, information accessible dans l’en-tête « X-Samsara-Signature ».
Afin de vérifier que le champ de données provient bien de nos services, vous pouvez calculer la signature à partir de la clé secrète du webhook et contrôler s’il correspond à la signature de l’en-tête :
Ci-dessous est présenté un code symbolique basé sur le langage Python pour vérifier que votre calcul de signature correspond à celui de l’en-tête dans le corps du champ de données.
import hashlib
import hmac
import base64
import codecs
timestamp = header["X-Samsara-Timestamp"]
plaintext_signature = "v1:%s:%s" % (timestamp, body)
secret = base64.b64decode(<YOUR_SECRET_KEY>)
signature = "v1=" + codecs.encode(hmac.new(secret, plaintext_signature, digestmod=hashlib.sha256).digest(), 'hex_codec')
assert(signature==header["X-Samsara-Signature"])
Commentaires
0 commentaire
Cet article n'accepte pas de commentaires.