Servicios
WebSockets
Protocolo

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.