Guías

Posición en vivo

Sigue las posiciones de tu flota con get_devices_latest en modo delta: qué enviar, qué guardar y cómo calcular el vehículo más cercano en tu sistema.

Estado: Parcial · Revisada el 5 de octubre de 2026

Qué se verificó y cómo: Usa operaciones verificadas por diff contra producción. El script se ejecutó contra un servidor simulado; la latencia real de actualización de posiciones no se midió y no se publica.

get_devices_latest está pensado para sondeo: en lugar de pedir toda la flota cada vez, le dices desde qué instante quieres cambios y devuelve solo los vehículos con posición nueva.

Cómo funciona #

  1. Primera llamada con time=1: devuelve todos los vehículos. (time vacío o 0 equivale a "hace 5 segundos", así que no uses 0).
  2. Guarda el valor time de la respuesta.
  3. En la siguiente llamada envía ese valor como time: recibes solo los vehículos con posición actualizada desde entonces.
  4. Repite. La respuesta también trae events con los eventos recientes (hasta 5 minutos atrás).

Las coordenadas de cada vehículo son lat y lng. Los campos sensors, services y tail llegan como cadenas JSON que debes decodificar.

Solicitud #

Posiciones actualizadas desde un instante

cURL

cURL
curl -sS -G "https://plataforma.trackerintl.com/api/get_devices_latest" \
  -H "user-api-hash: TU_API_HASH" \
  --data-urlencode "time=1"

JavaScript · Node.js 22

JavaScript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";

const params = new URLSearchParams({
  time: "1",
});
const respuesta = await fetch(`${BASE_URL}/api/get_devices_latest?${params}`, {
  headers: { "user-api-hash": API_HASH },
});
if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}: ${await respuesta.text()}`);
console.log(JSON.stringify(await respuesta.json(), null, 2));

Python · Python 3 con requests

Python
import json
import requests

BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"

respuesta = requests.get(
    f"{BASE_URL}/api/get_devices_latest",
    headers={"user-api-hash": API_HASH},
    params={"time": "1"},
    timeout=30,
)
respuesta.raise_for_status()
print(json.dumps(respuesta.json(), indent=2, ensure_ascii=False))

PHP · PHP 8 con cURL

PHP
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";

$url = $baseUrl . "/api/get_devices_latest?" . http_build_query(["time" => "1"]);
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
]);
$cuerpo = curl_exec($ch);
$codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($cuerpo === false || $codigo !== 200) {
    fwrite(STDERR, "HTTP $codigo\n");
    exit(1);
}
echo json_encode(json_decode($cuerpo, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), "\n";

Script de sondeo #

El script hace dos rondas, con una espera corta entre ellas, y muestra cuántos vehículos recibió en cada una. En la segunda ronda llegan menos, porque solo se piden los cambios.

Sondeo en modo delta

cURL

cURL
#!/usr/bin/env bash
# Requiere curl y jq.
BASE_URL="https://plataforma.trackerintl.com"
API_HASH="TU_API_HASH"
INTERVALO_SEGUNDOS=1 # en producción, elige un intervalo acorde a tu caso

DESDE=1 # 1 = todos los vehículos en la primera ronda

for RONDA in 1 2; do
  DATOS=$(curl -sS -G "$BASE_URL/api/get_devices_latest" \
    -H "user-api-hash: $API_HASH" \
    --data-urlencode "time=$DESDE")
  echo "Ronda $RONDA: $(echo "$DATOS" | jq '.items | length') vehículos con posición nueva"
  echo "$DATOS" | jq -r '.items[] | "  \(.name): \(.lat), \(.lng)"'
  DESDE=$(echo "$DATOS" | jq -r '.time') # la próxima ronda pide solo lo que cambió desde aquí
  sleep "$INTERVALO_SEGUNDOS"
done

JavaScript · Node.js 22

JavaScript
const BASE_URL = "https://plataforma.trackerintl.com";
const API_HASH = "TU_API_HASH";
const INTERVALO_MS = 1000; // en producción, elige un intervalo acorde a tu caso

const dormir = (ms) => new Promise((resolver) => setTimeout(resolver, ms));

let desde = 1; // 1 = todos los vehículos en la primera ronda

for (let ronda = 1; ronda <= 2; ronda += 1) {
  const params = new URLSearchParams({ time: String(desde) });
  const respuesta = await fetch(`${BASE_URL}/api/get_devices_latest?${params}`, {
    headers: { "user-api-hash": API_HASH },
  });
  if (!respuesta.ok) throw new Error(`HTTP ${respuesta.status}`);
  const datos = await respuesta.json();

  console.log(`Ronda ${ronda}: ${datos.items.length} vehículos con posición nueva`);
  for (const vehiculo of datos.items) {
    console.log(`  ${vehiculo.name}: ${vehiculo.lat}, ${vehiculo.lng}`);
  }

  desde = datos.time; // la próxima ronda pide solo lo que cambió desde aquí
  await dormir(INTERVALO_MS);
}

Python · Python 3 con requests

Python
import time

import requests

BASE_URL = "https://plataforma.trackerintl.com"
API_HASH = "TU_API_HASH"
INTERVALO_SEGUNDOS = 1  # en producción, elige un intervalo acorde a tu caso

desde = 1  # 1 = todos los vehículos en la primera ronda

for ronda in (1, 2):
    respuesta = requests.get(
        f"{BASE_URL}/api/get_devices_latest",
        headers={"user-api-hash": API_HASH},
        params={"time": str(desde)},
        timeout=30,
    )
    respuesta.raise_for_status()
    datos = respuesta.json()

    print(f"Ronda {ronda}: {len(datos['items'])} vehículos con posición nueva")
    for vehiculo in datos["items"]:
        print(f"  {vehiculo['name']}: {vehiculo['lat']}, {vehiculo['lng']}")

    desde = datos["time"]  # la próxima ronda pide solo lo que cambió desde aquí
    time.sleep(INTERVALO_SEGUNDOS)

PHP · PHP 8 con cURL

PHP
<?php
$baseUrl = "https://plataforma.trackerintl.com";
$apiHash = "TU_API_HASH";
$intervaloSegundos = 1; // en producción, elige un intervalo acorde a tu caso

$desde = 1; // 1 = todos los vehículos en la primera ronda

foreach ([1, 2] as $ronda) {
    $ch = curl_init($baseUrl . "/api/get_devices_latest?" . http_build_query(["time" => (string) $desde]));
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTPHEADER => ["user-api-hash: " . $apiHash],
    ]);
    $cuerpo = curl_exec($ch);
    $codigo = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    if ($cuerpo === false || $codigo !== 200) {
        fwrite(STDERR, "HTTP $codigo\n");
        exit(1);
    }
    $datos = json_decode($cuerpo, true);

    echo "Ronda $ronda: " . count($datos["items"]) . " vehículos con posición nueva\n";
    foreach ($datos["items"] as $vehiculo) {
        echo "  {$vehiculo["name"]}: {$vehiculo["lat"]}, {$vehiculo["lng"]}\n";
    }

    $desde = $datos["time"]; // la próxima ronda pide solo lo que cambió desde aquí
    sleep($intervaloSegundos);
}

El vehículo más cercano a un punto #

La API no calcula distancias entre un punto y tu flota. Para asignar la unidad más cercana a una tarea, toma lat y lng de cada vehículo desde esta consulta y calcula la distancia en tu sistema (por ejemplo, con la fórmula de Haversine). Verifica antes online y time para no asignar un vehículo sin conexión.

Qué no sabemos #

La latencia entre que un equipo reporta y la plataforma lo expone en la API no se midió, así que no la publicamos. Valídala con tu propia flota antes de depender de ella para decisiones en tiempo real.