Flujo completo para proveedores de telemetría
Tutorial de integración para proveedores de telemetría
Esta guía explica el flujo operativo recomendado para integrar un proveedor de telemetría con OTIF por medio de in.otif.mx.
- URL de documentación técnica: https://in.otif.mx/docs/v1
- Base URL productiva:
https://in.otif.mx/api/v1 - Autenticación requerida en todos los endpoints: header
X-API-Key
X-API-Key: <API_KEY_DEL_PROVEEDOR>
Content-Type: application/json
Flujo general
- Paso 1: consultar embarques activos con
GET /shipments. - Paso 2: elegir el
shipment_iddel embarque que se va a monitorear. - Paso 3: vincular el dispositivo físico con
POST /devices. - Paso 4: guardar el
telemetry_device_idque regresa OTIF. - Paso 5: reportar ubicaciones y eventos usando ese
telemetry_device_id. - Paso 6: consultar eventos guardados cuando se necesite validar la integración.
- Paso 7: desvincular el dispositivo con
DELETE /devices/{telemetry_device_id}antes de reutilizarlo en otro embarque.
Conceptos clave
-
provider_device_id: identificador del dispositivo físico en el sistema del proveedor. Normalmente es IMEI, número de serie o ID interno del proveedor. -
telemetry_device_id: identificador generado por OTIF al vincular el dispositivo. Este ID se usa en los endpoints de reporte. -
reporting_interval: frecuencia esperada de reporte, en minutos. Si OTIF no recibe datos dentro de este intervalo, puede disparar alertas de falta de señal. - Un dispositivo físico solo puede estar vinculado a un embarque activo a la vez.
- Para reutilizar un dispositivo en otro embarque, primero hay que desvincularlo del embarque anterior.
Paso 1: Obtener embarques activos
- Llamar
GET /shipmentspara obtener los embarques activos asignados al proveedor. - Tomar el
shipment_iddel embarque correcto. - Usar
vehicle_plateyfleet_numberpara validar que el embarque corresponde a la unidad esperada.
curl --request GET 'https://in.otif.mx/api/v1/shipments' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>'
Respuesta esperada:
{
"success": true,
"data": [
{
"shipment_id": "S-1234567890",
"vehicle_plate": "ABC123A",
"fleet_number": "FLEET01"
}
],
"status_code": 200
}
Paso 2: Vincular el dispositivo físico al embarque
- Llamar
POST /devicescon elshipment_idobtenido en el paso anterior. - Enviar el ID físico del dispositivo como
provider_device_id. - Definir
reporting_intervalen minutos. - Guardar el
telemetry_device_idde la respuesta. Es obligatorio para reportar telemetría.
curl --request POST 'https://in.otif.mx/api/v1/devices' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>' \
--header 'Content-Type: application/json' \
--data '{
"shipment_id": "S-1234567890",
"provider_device_id": "PROVIDER-DEVICE-001",
"reporting_interval": 15
}'
Respuesta esperada:
{
"success": true,
"data": {
"telemetry_device_id": "550e8400-e29b-41d4-a716-446655440000"
},
"status_code": 201
}
Paso 3: Verificar dispositivos vinculados
- Llamar
GET /devicespara consultar los dispositivos actualmente vinculados y activos. - Confirmar que el
provider_device_id,shipment_idytelemetry_device_idcorrespondan al embarque esperado.
curl --request GET 'https://in.otif.mx/api/v1/devices' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>'
Paso 4: Reportar ubicación del dispositivo
- Llamar
POST /devices/{telemetry_device_id}/localization. - Usar el
telemetry_device_idque regresó OTIF en el paso 2. - Enviar
position_dateen formato ISO 8601 UTC. - Enviar latitud y longitud reales del dispositivo.
- Incluir
is_motor_oncon el estado reportado por el proveedor.
curl --request POST 'https://in.otif.mx/api/v1/devices/550e8400-e29b-41d4-a716-446655440000/localization' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>' \
--header 'Content-Type: application/json' \
--data '{
"device_type": "gps",
"position_date": "2026-01-01T10:00:00.000Z",
"latitude": 19.432608,
"longitude": -99.133209,
"altitude": 2240,
"speed_kmh": 42.5,
"angle": 180,
"temperature_celsius": 4.2,
"odometer_km": 10524.7,
"is_motor_on": true,
"battery_percentage": 87,
"battery_voltage": 12.4,
"accuracy_meters": 8
}'
Respuesta esperada:
{
"success": true,
"data": {
"telemetry_device_id": "550e8400-e29b-41d4-a716-446655440000",
"event_id": "123"
},
"status_code": 201
}
Paso 5: Reportar botón de pánico
- Llamar
POST /devices/{telemetry_device_id}/panic-buttoncuando el dispositivo o conductor active una alerta de pánico. - Enviar la misma estructura base de ubicación para que OTIF registre dónde ocurrió el evento.
- Incluir
is_motor_on.
curl --request POST 'https://in.otif.mx/api/v1/devices/550e8400-e29b-41d4-a716-446655440000/panic-button' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>' \
--header 'Content-Type: application/json' \
--data '{
"device_type": "gps",
"position_date": "2026-01-01T10:05:00.000Z",
"latitude": 19.432608,
"longitude": -99.133209,
"altitude": 2240,
"speed_kmh": 0,
"angle": 180,
"temperature_celsius": 4.2,
"odometer_km": 10525.1,
"is_motor_on": true
}'
Paso 6: Reportar solicitudes de apagado o encendido de motor
Estos endpoints no son para reportar el estado automático del motor en cada posición. Son para reportar solicitudes del centro de control al conductor o a la unidad.
- Usar
POST /devices/{telemetry_device_id}/motor-offcuando el centro de control solicite apagar motor. - Usar
POST /devices/{telemetry_device_id}/motor-oncuando el centro de control solicite encender motor. - Enviar
is_motor_oncon el estado solicitado en el evento.
Ejemplo de solicitud de apagado:
curl --request POST 'https://in.otif.mx/api/v1/devices/550e8400-e29b-41d4-a716-446655440000/motor-off' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>' \
--header 'Content-Type: application/json' \
--data '{
"device_type": "gps",
"position_date": "2026-01-01T10:10:00.000Z",
"latitude": 19.432608,
"longitude": -99.133209,
"altitude": 2240,
"speed_kmh": 0,
"angle": 180,
"temperature_celsius": 4.2,
"odometer_km": 10525.2,
"is_motor_on": false
}'
Paso 7: Consultar eventos guardados
- Llamar
GET /devices/{telemetry_device_id}/eventspara revisar eventos persistidos en OTIF. - Usar este endpoint para validar que la integración esté reportando correctamente.
curl --request GET 'https://in.otif.mx/api/v1/devices/550e8400-e29b-41d4-a716-446655440000/events' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>'
Paso 8: Desvincular el dispositivo antes de reutilizarlo
- Si el mismo dispositivo físico se usará en otro embarque, primero llamar
DELETE /devices/{telemetry_device_id}. - Después de desvincularlo, volver a ejecutar
POST /devicescon el nuevoshipment_id. - Si el dispositivo no se usará en otro embarque, puede permanecer vinculado al embarque actual.
curl --request DELETE 'https://in.otif.mx/api/v1/devices/550e8400-e29b-41d4-a716-446655440000' \
--header 'X-API-Key: <API_KEY_DEL_PROVEEDOR>'
Checklist de implementación
- El proveedor ya tiene su
X-API-Keyactiva. - El proveedor puede consultar
GET /shipmentsy ver embarques activos. - El proveedor vincula cada dispositivo con
POST /devices. - El proveedor guarda el
telemetry_device_idde OTIF. - El proveedor reporta ubicaciones a
/localizationusandotelemetry_device_id. - El proveedor reporta botón de pánico solo cuando ocurra una alerta real.
- El proveedor reporta
motor-onymotor-offsolo como solicitudes del centro de control. - El proveedor desvincula el dispositivo antes de usarlo en otro embarque.
Errores comunes
- Usar
provider_device_iden la URL de eventos. La URL debe usartelemetry_device_id. - Intentar vincular el mismo dispositivo físico a dos embarques al mismo tiempo.
- No guardar el
telemetry_device_idque devuelve OTIF. - Enviar eventos sin
X-API-Key. - Enviar fechas locales sin zona horaria. Preferir UTC:
2026-01-01T10:00:00.000Z. - Usar
motor-onomotor-offpara reportar estado automático del motor en cada posición.
No Comments