Creación de webhooks
Puede crear webhooks para que se le notifiquen las alertas de su cuenta Samsara. Esto es especialmente útil si quiere crear integraciones que transmitan un incidente de alerta especial, como cuando un vehículo llega a una ubicación determinada o si la temperatura del contenedor supera una cantidad determinada. Para obtener una lista completa de todas las alertas incluidas en Samsara, consulte este Página de resumen de alertas.
Los webhooks se pueden ver y crear a través del panel de Samsara. Acceda al icono de engranaje y haga clic en Webhooks. Haga clic en (+ Añadir webhook) para crear un webhook. Cada webhook debe contar con un nombre y una ruta a una URL https.
Una vez creado un webhook, se pueden configurar alertas individuales para que se envíen a una URL de webhook determinada. Para ello, acceda al icono de campana para crear una alerta nueva o configurar una alerta existente.
Nota: aún no está disponible para la alerta DVIR no seguro.
Responder a incidentes de webhook
Debe confirmar la recepción de una solicitud de webhook con un código de respuesta 2xx. Si no se reconoce un webhook, Samsara seguirá reintentando en un modo exponencial de retroceso.
Cargas útiles
Los webhooks de Samsara devuelven respuestas codificadas mediante JSON.
Ejemplo de cargas útiles
Consulte aquí para obtener información detallada sobre los atributos de la carga útil.
Alerta de perímetro (geofence)
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Vehicle is inside geofence",
"alertConditionId": "DeviceLocationInsideGeofence",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Truck ABC' is 5 miles away from Acme Bread",
"device": {
"id": 2000,
"name": "Truck ABC",
"serial": "ABC123",
"vin": "1M8GDM9AXKP042788"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Truck ABC' is inside Acme Bread geofence"
}
}
Alerta de batería de vehículo:
{
"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": "Battery voltage below",
"alertConditionId": "BatteryVoltageBelow",
"details": "'Truck ABC' vehicle battery level has fallen below 15.000 V for more than 0 minutes. It is currently 12.052 V.",
"device": {
"id": 212014918214835,
"name": "Truck ABC",
"serial": "ABC123",
"vin": "2JEA93JALLAL211A"
},
"orgId": 123,
"resolved": false,
"startMs": 1587151393206,
"summary": "'Truck ABC' vehicle battery level has fallen below 15.000 V for more than 0 minutes. It is currently 12.052 V."
}
}
Alerta de velocidad:
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Vehicle speed",
"alertConditionId": "DeviceSpeedAbove",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Truck ABC' was speeding 65MPH in a 50MPH speed limit zone",
"driver": {
"id": 5000,
"name": "Speed Demon"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Truck ABC' was speeding 65MPH in a 50MPH speed limit zone"
}
}
Alerta de llegada a parada de ruta:
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Dispatch Route ETA threshold",
"alertConditionId": "DispatchRouteETAThreshold",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Truck ABC' is 15 minutes away from ACME Bread",
"route": {
"id": 6000,
"name": "Bread Route"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Truck ABC' is 15 minutes away from ACME Bread"
}
}
Alerta de temperatura:
{
"eventId": "f4bfadf8-ac64-4436-9bfa-42c0f37d3a33",
"eventMs": 1486029722000,
"eventType": "Alert",
"event": {
"alertConditionDescription": "Ambient temperature is above",
"alertConditionId": "TemperatureAbove",
"alertEventUrl": "https://cloud.samsara.com/groups/4185/alerts/incidents/v2/1000/1/222/1483228800000",
"details": "'Temperature probe' has been above 40 degrees fahrenheit for 15 minutes",
"sensor": {
"id": 7000,
"name": "Temperature probe",
"serial": "ABC123"
},
"orgId": 4000,
"resolved": false,
"startMs": 1486029722000,
"summary": "'Temperature probe' has been above 40 degrees fahrenheit for 15 minutes"
}
}
Atributos
eventId |
ID de incidente único |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cadena |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eventMs |
Tiempo en milisegundos de época en que se generó el incidente. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
entero |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
eventType |
Siempre será "Alerta". |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cadena |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event |
Incidente que activó esta alerta. Consulte a continuación los atributos. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
objeto |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Tabla de condiciones de alerta
Nombre de alerta en Samsara |
ID de condición de alerta |
Descripción de condición de alerta |
Detalles |
Nivel de la batería |
BatteryLow |
"Batería baja" |
"Nivel de batería de '{widgetName}' bajo". "Se está agotando la batería de '{deviceName}'". |
Temperatura |
TemperatureBelow TemperatureAbove |
"Temperatura ambiente inferior a" "Temperatura ambiente superior a" |
"La temperatura ambiente de '{widgetName}' ha aumentado por encima de {tempValue} {tempUnit} durante más de {duration} minutos". "La temperatura ambiente de '{widgetName}' ha caído por debajo de {tempValue} {tempUnit} durante más de {duration} minutos". "La temperatura de la sonda '{widgetName}' ha aumentado por encima de {tempValue} {tempUnit} durante más de {duration} minutos". "La temperatura de la sonda '{widgetName}' ha caído por debajo de {tempValue} {tempUnit} durante más de {duration} minutos". |
Humedad |
HumidityBelow HumidityAbove |
"La humedad es superior a" "La humedad es inferior a" |
"La humedad de '{widgetName}' ha aumentado por encima del {threshold} % durante más de {duration} minutos. Actualmente es del {humidityValue} %", "La humedad de '{widgetName}' ha caído por debajo del {threshold} % durante más de {duration} minutos. Actualmente es del {humidityValue} %" |
Conexión |
DeviceDisconnect |
"La puerta está desconectada" |
"Sensor '{deviceName}' desconectado. No se enviarán alertas en tiempo real para este sensor mientras esté desconectado". |
Vehículo desenchufado |
DeviceUnplugged |
"Puerta desconectada" |
"'{deviceName}' se ha desconectado". "'{deviceName}' se ha desconectado durante más de {duration} minutos". |
Perímetro (geofence) |
DeviceLocationInsideGeofence DeviceLocationOutsideGeofence |
"Vehículo dentro del perímetro (geofence)" "Vehículo fuera del perímetro (geofence)" |
"'{deviceName}' {insideOrOutside} de {geofenceName}." "'{deviceName}' ha estado {insideOrOutside} de {geofenceName} durante más de {duration} minutos". |
Velocidad |
DeviceSpeedAbove DeviceSpeedAboveSpeedLimit |
"Velocidad del vehículo" "Velocidad del vehículo por encima del límite de velocidad" |
"La velocidad de '{deviceName}' ha aumentado por encima de {conditionSpeed}". "La velocidad de '{deviceName}' es superior a {conditionSpeed}. Actualmente es de {currentSpeed}. Ubicación: {location}" "La velocidad de '{deviceName}' ha aumentado por encima de {conditionSpeed} durante más de {mins} minutos". "La velocidad de '{deviceName}' ha superado el límite de velocidad en {speedOver}". La velocidad de "'{deviceName}' ha superado el límite de velocidad en {speedOver} durante más de {duration} minutos". |
Averías del vehículo |
VehicleHasFault |
"El vehículo tiene una avería" |
|
Motor del vehículo parado |
EngineIdle |
"Motor parado" |
"El motor '{deviceName}' está parado" "El motor '{deviceName}' ha estado parado durante más de {durationMins} minutos". "El motor '{deviceName}' ha estado parado durante más de {durationMins} minutos en {Location}". |
Batería del vehículo |
BatteryVoltageBelow |
"Tensión de la batería inferior a" |
"El nivel de la batería del vehículo '{deviceName}' ha descendido por debajo de {threshold} V durante más de {duration} minutos. Actualmente es de {batteryValue} V". |
Movimiento |
DeviceMovement |
"Movimiento del vehículo" |
"'{deviceName}' está en movimiento". "'{deviceName}' ha estado en movimiento durante más de {duration} minutos". |
Puerta abierta |
DoorActivated |
"Puerta abierta" |
"La puerta '{widgetName}' está abierta". "La puerta '{widgetName}' ha estado abierta durante más de {duration} minutos". |
Cámara del salpicadero desconectada |
DashcamDisconnected |
"Cámara del salpicadero desconectada" |
"La cámara del salpicadero de '{deviceName}' se ha desconectado". |
Llegada a la parada de la ruta |
DispatchRouteETAThreshold |
"Umbral de tiempo estimado de llegada de la ruta de despacho" |
"El vehículo {deviceName} en la ruta {routeName} está aproximadamente a {timeToDestination} minutos de {stopName} |
Alarma de refrigeración |
ReeferHasNewAlarm |
"Se ha producido una nueva alarma del refrigerador" |
|
Temperatura de refrigeración |
ReeferTemperatureAboveSetPoint ReeferTemperatureBelowSetPoint |
"La temperatura del aire de retorno del refrigerador está por encima del punto de ajuste". "La temperatura del aire de retorno del refrigerador está por debajo del punto de ajuste". |
|
Incidente grave |
HarshEvent |
"Se ha producido un incidente grave". |
"Se ha detectado un incidente grave en el vehículo {deviceName} a las {startTime}". "Se ha detectado un incidente grave en el vehículo {deviceName} a las {startTime}. Informe del incidente: {incidentLink}" |
Mantenimiento programado |
ScheduledMaintenanceDate ScheduledMaintenanceEngineHours ScheduledMaintenanceOdometer |
"Mantenimiento programado pendiente" "El mantenimiento se debe realizar según un programa de mantenimiento basado en el horario del motor" "El mantenimiento debe basarse en un programa de mantenimiento basado en el cuentakilómetros" |
"El mantenimiento preventivo del programa {maintenanceTitle} está pendiente para el vehículo {deviceName}" "El mantenimiento preventivo del programa {maintenanceTitle} está pendiente para {numVehicles} vehículos, incluidos los siguientes: {vehicleNames}" |
Presentación de documentos |
DriverDocumentSubmitted |
"Presentación de documentos" |
"Un documento {documentTemplateName} ha sido presentado por {driverName} a las {submissionTime}. Documento: {documentUrl} (ID: {documentId})", |
Verificar firmas de webhook
Samsara utiliza firmas de webhook para indicar que ha enviado una carga útil. Las cargas útiles de los webhook se firman mediante cifrado HMAC-SHA256, que se puede encontrar en el encabezado "X-Samsara-Signature".
Para verificar que la carga útil ha sido enviada por nosotros, puede calcular la firma a partir de la clave secreta de webhook y verificar que coincide con la firma en el encabezado:
A continuación, se muestra un pseudocódigo basado en Python para verificar que la firma calculada coincide con la del encabezado del cuerpo de la carga útil.
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"])
Comentarios
0 comentarios
El artículo está cerrado para comentarios.