Protocolo
WebSockets es un protocolo de comunicación bidireccional y en tiempo real que permite la transferencia eficiente de datos entre un cliente y un servidor. A diferencia de HTTP, WebSockets establece una conexión persistente, facilitando la transmisión instantánea de información, ideal para aplicaciones web interactivas y actualizaciones en tiempo real.
ChatGPT - "Me puedes describir WebSockets?"
Para todos los efectos, el servidor WebSocket utiliza el protocolo TCP/SSL y se encuentra alojado en wss://servers.zentrack.cl
.
Autenticación
Para iniciar sesión debes enviar el siguiente mensaje:
{
"token": "..."
}
Sí envias una estructura JSON inválida entonces recibirás:
{
"message": "Unprocessable Entity",
"rules": [
"message body is required and must be a valid json structure",
"attribute token is required and must be an string"
],
"parse": "syntax error",
"status": 422
}
Sí envías un token invalido entonces recibirás:
{
"message": "Failed",
"parse": "Success",
"status": 404
}
Sí envías un token válido entonces recibirás:
{
"message": "Success",
"status": 200
}
Suscripción y Desuscripción
Para establecer una suscripción a un rastreador en específico debes enviar el siguiente mensaje:
{
"event": "subscribe",
"tracker_id": N,
}
Siendo N el identificador único del rastreador.
Sí tu plan es Personas o Flotas y el identificador enviado no pertenece a tu empresa o tu plan es Plataformas y el vehículo no está asociado al usuario entonces recibirás:
{
"message": "forbidden",
"to": N,
"status": 403
}
Sí tu plan es Personas o Flotas y el identificador pertenece a tu empresa o tu plan es Plataformas y el vehículo está vinculado al usuario entonces recibirás:
{
"message": "subscribed",
"to": N,
"status": 200
}
Sí deseas anular la suscripción entonces deberás enviar el siguiente mensaje:
{
"event": "unsubscribe",
"tracker_id": N
}
Sí no existe una subscripción previa entonces recibirás:
{
"message": "forbidden",
"to": N,
"status": 403
}
Sí existe subscripción previa entonces recibirás:
{
"message": "unsubscribed",
"to": N,
"status": 200
}
Comandos
Para transmitir comandos a un rastreador debes enviar el siguiente mensaje:
{
"event": "command",
"tracker_id": N,
"type": T
}
Siendo N el identificador único del rastreador y T el tipo, pudiendo ser "on" o "off".
Sí tu plan es Personas o Flotas y el identificador enviado no pertenece a tu empresa o tu plan es Plataformas y el vehículo no está asociado al usuario entonces recibirás:
{
"message": "forbidden",
"type": "command_failed",
"to": N,
"status": 403
}
Sí el vehículo pertenece a tu empresa o está asignado al usuario pero el rastreador no se encuentra conectado al servidor entonces recibirás:
{
"message": "not_connected",
"type": "command_failed",
"to": N,
"status": 404
}
Sí el vehículo pertenece a tu empresa, además se encuentra conectado pero el tipo no es válido entonces recibirás:
{
"message": "Unprocessable Entity",
"rules": [
"attribute type is required, must be an string and should be on|off"
],
"parse": "Success",
"status": 422
}
Sí el vehículo pertenece a la empresa o a el usuario, además se encuentra conectado conectado y el tipo es válido entonces recibirás:
{
"type": "command_success",
"message": "Command received",
"to": N,
"status": 200
}
Eventos
Sí tienes una suscripción activa a un dispositivo y en el caso de que el rastreador se mueve entonces recibirás Ubicaciones con el siguiente formato:
{
"location": {
"geofences": [],
"server_id": 0,
"company_id": 0,
"source_id": N,
"source_type": "App\\Models\\Tracker",
"connection_id": 0,
"id": 0,
"event": "location",
"timestamp": 0,
"speed_exceed": false,
"speed_exceeded": 0,
"speed": 0,
"latitude": -1.0E0,
"longitude": -1.0E0,
"altitude": 0.0E0,
"direction": 0.0E0,
"place": "San Antonio, Algarrobo",
"engine": false,
"door": false,
"first_tank": 0E0,
"second_tank": 0E0,
"temperature": 0E0,
"extra": {
"priority": 0,
"satellites": 0,
"movement": 0,
"gsm_signal": 0,
"sleep_mode": 0,
"gnss_status": 0,
"gnss_pdop": 0,
"gnss_hdop": 0,
"external_voltage": 0,
"battery_voltage": 0,
"battery_current": 0,
"active_gsm_operator": 0,
"total_odometer": 0
}
},
"type": "location"
}
Sí tu empresa posee el plan Flotas entonces podrás recibir eventos relativas a las geocercas:
{
"type": T,
"tracker_id": N,
"geofence_id": M,
"server_id": 0,
"geofence_name": "...",
"connection_id": 0,
}
Siendo:
- T el tipo pudiendo tener valores "geofence_in" o "geofence_out".
- N el identificador único del vehículo.
- M el identificador único de la geocerca.
Para todos los planes, sí tu rastreador se conecta recibirás:
{
"type":"connected",
"server_id": 0,
"tracker_id": N,
"connection_id": 0,
}
Siendo N el identificador único del vehículo.
Sí se desconecta entonces recibirás:
{
"type":"disconnected",
"server_id": 0,
"tracker_id": N,
"connection_id": 0,
}
Siendo N el identificador único del vehículo.