Contadores Inteligentes México

Contadores Inteligentes México

Plataforma alterna — Documentación técnica de la API del sistema en mi.247gps.info (base: https://api.247gps.info/vehicle-admin)
Secciones: 1 · Acceso, sesión y autenticación2 · Monitoreo en tiempo real3 · Vehículos y dispositivos4 · Órdenes / control del equipo5 · Video en vivo, playback y PTZ6 · Multimedia / fotos del equipo7 · Historial / recorridos7 · Alarmas en tiempo real y gestión8 · Configuración y tipos de alarma9 · Reportes de circulación y pago10 · Estadísticas de riesgo, conducción y scoring11 · Geocercas, reglas y regiones12 · Configuración de plataforma13 · Administración: usuarios, roles, admins, compañías, SIM, conductores14 · Operativos: mantenimiento, seguros, anuales, reparaciones, accidentes, rutas, firmware15 · JT/T 809 y regulatorio16 · Logs del sistema y exportación17 · Administrativo de plataforma — límite de dispositivos autorizados
Uso general: todas las respuestas vienen en gzip → usar curl -sk --compressed. Autenticación por header Authorization: Bearer <token> (login en POST /admin/login). Los listados usan paginación pageNum&pageSize en body o query. Todo reporte tiene su variante de exportación /export o /export/async (Excel).
✓ probado = endpoint ejecutado contra la API real en esta instalación. Los demás están extraídos del front end compilado (ruta+uso) y siguen la convención del backend; el método indicado es el que usa el portal (PATCH/PUT no se usan, todo es GET/POST).

· Guía rápida (probado)

MétodoEndpointDescripción / ejemplo
POST/admin/loginLogin. Body {"username":"...","password":"..."} → data.tokenHead + data.token = header Authorization.
POST/vehicle/listConsultar vehículo → vehicleId. Body {"licenseNum":"<placa>"} o {"deviceNum":"<imei>"}.
POST/device/controlParo de motor/aceite. Body {"vehicleIds":[id],"orderType":"title_2_order_8","command":114} → 114=cortar motor (OUT2), 115=restablecer, 112/113=aceite (OUT1), 4=reiniciar equipo (orderType title_2_order_3).
POST/device/order/history{"pageNum":1,"pageSize":10,"vehicleId":id} → orderStatus: 0 envío falló, 1 respuesta OK, 2 esperando respuesta, 3 respuesta con fallo.
BASE=https://api.247gps.info/vehicle-admin TOKEN=$(curl -sk --compressed -X POST "$BASE/admin/login" -H "Content-Type: application/json" \ -d '{"username":"admin","password":"COLOCA_TU_CLAVE"}' | jq -r '.data.tokenHead + .data.token') # paro de motor OUT2 (114) / restaurar (115) — prueba SOLO en equipo aislado curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":114,"orderType":"title_2_order_8","vehicleIds":[17]}'

1 · Acceso, sesión y autenticación

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/admin/login✓ probado — autenticación. Body {"username","password"} → data.tokenHead + data.token (concatenar = header Authorization)
POST/admin/mobileLoginlogin móvil
POST/admin/logoutcierre de sesión
GET/admin/getCode/{id}código de invitación/recuperación de un admin
GET/sys/login/getQrCodeQR de login
GET/user/info✓ probado — datos del usuario autenticado
POST/user/update/passwordcambio de contraseña del usuario
POST/sys/menu/sortorden de menús
GET/menu/treeUserListárbol de menús del usuario

2 · Monitoreo en tiempo real (mapa)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
ARRAYPOST/postion/realtime/vehicleGps✓ probado patrón — posiciones GPS en vivo de una lista de vehicleIds (body = array de ids). El mapa del front llama cada 10 s
GET/postion/realtime/vehicleGps/{vehicleId}posiciones de una unidad
GET/postion/realtime/vehicleStatisticscontadores en vivo (online/total, vehículos autorizados vs. asignados)
GET/postion/realtime/vehicleAllTreeListárbol de vehículos (filtrado por el usuario/JWT)
GET/postion/realtime/attentionListlista de vehículos en atención/seguimiento
POST/postion/realtime/vehicleAttention/agregar vehículo a atención
POST/postion/realtime/deleteVehicleAttention/quitar vehículo de atención
POST/postion/realtime/area/vehicleGpsposiciones por zona de negocio (body con {areaCode|parentCode, ...})
GET/postion/realtime/locationenvía orden de 'reporte de posición' (roll call) a un equipo; query ?deviceNo=
GET/postion/realtime/deviceChannels/{deviceId}canales de video de un equipo
GET/postion/realtime/closeVehicleGps/{vehicleId}detiene el seguimiento de una unidad
GET/vehicle/asyncUpdateMemrefresca el mapa/almacén en memoria de vehículos (Redis)

3 · Vehículos y dispositivos

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/vehicle/list✓ probado — lista/consulta de vehículos. Filtro real por {"licenseNum":""} o {"deviceNum":""}; sin filtro lista todos. Devuelve vehicleId/licenseNum/deviceNum
POST/vehicle/list?pageNum=&pageSize=listado paginado completo
GET/vehicle/list/alllista completa de vehículos (solo ids)
GET/vehicle/list/all/{id}
GET/vehicle/select/{id}vehículo por id
POST/vehicle/createcrear vehículo
POST/vehicle/update/{id}actualizar vehículo
POST/vehicle/deleteeliminar vehículos
POST/vehicle/fastCreatealta rápida
POST/vehicle/exportexportar listado (Excel/async)
POST/vehicle/export/asyncexportación asíncrona
POST/vehicle/password/{id}contraseña del vehículo
GET/vehicle/motorcade/treeList/deviceárbol 车队/vehículos por dispositivo
POST/vehicle/motorcade/createcrear 车队 (flotilla/motorcade)
POST/vehicle/motorcade/updateactualizar flotilla
GET/vehicle/motorcade/delete/{id}eliminar flotilla
POST/device/listlistado de dispositivos (paginado)
GET/device/list/sim/alldispositivos/sim disponibles
GET/device/list/vehicle/alllistado para ASIGNAR a vehículos
GET/device/get/{id}detalle de dispositivo
POST/device/createcrear dispositivo (IMEI)
POST/device/update/{id}actualizar dispositivo
POST/device/export/asyncexportar dispositivos
POST/device/shellrelación dispositivo ↔ vehículo (shell)
GET/device/attributes/{id}atributos de un dispositivo
GET/device/attributes/vehicle/{vehicleId}atributos por vehículo
GET/device/deviceInfoVoAttribute/vehicle/{vehicleId}atributos completos por vehículo
GET/device/channels/{deviceId}canales del MDVR
GET/device/disks/{deviceId}discos de almacenamiento del MDVR
POST/device/drive_recorder/datadatos del tacógrafo
POST/device/find/settingsconfigurar búsqueda de dispositivo
POST/device/find/settings/syncsincronizar configuración de búsqueda
POST/device/order/offlineregistro de órdenes offline
POST/device/order/offline/export/asyncexportar órdenes offline
POST/device/settingsconfiguración avanzada del dispositivo

4 · Órdenes / control del equipo (incluye paro de motor)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/device/control✓ probado — envío de ÓRDENES/instrucciones al equipo. Body {"vehicleIds":[],"orderType":"...","command":,"parameter":""}
POST/device/control/vehicleorden con más parámetros por vehículo (VehicleControlParameters)
POST/device/control/set/passwordcambiar contraseña del equipo
POST/device/control/disk/formatformatear disco del MDVR
POST/device/terminal/textNewenviar texto/notificación al display del equipo (body incluye vehicleIds)
POST/device/terminal/text?uuid=texto (con uuid)
POST/device/terminal/eventseventos a terminal
POST/device/terminal/questionencuesta al equipo
POST/device/terminal/newsnoticias/publicidad al display
POST/device/terminal/camera✓ probado — TOMAR FOTO (拍照, tipo 1). Body {"vehicleIds":[],"orderType":"title_4_order_1","command":1,"channelId":,"resolution":0,"save":0}. command: 1=foto única, 2=continua, 3=detener. channelId: 1-8 (canales MDVR), 100=ADAS, 101=DSM, 0/10+ = canales especiales. resolution: 0 (mín/defecto) o 255 (máx). save: 0=subir foto a la plataforma, 1=solo guardar en equipo. OJO: el campo del frontend es "channelIdresolution" pero el backend lo ignora; el parametro real es "channelId". La foto subida queda en el almacen multimedia.
POST/device/terminal/soundRecordgrabación de audio
POST/device/terminal/voiceMonitormonitoreo de voz
POST/device/order/history✓ probado — historial de órdenes por vehículo. Body {"pageNum","pageSize","vehicleId"} → filas con orderStatus (0 fallo envío, 1 respuesta OK, 2 esperando respuesta, 3 respuesta con fallo)
POST/device/order/history/export/asyncexportar historial de órdenes
POST/device/order/deleteborrar órdenes
GET/other/orderType/listcatálogo de tipos de orden (title_X_order_Y)
GET/rr/textinfo/result?uuid=resultado de texto enviado
ÓRDENES AL EQUIPO — paro de motor (熄火), paro de aceite (断油) y reinicio de equipo (重启). Procedimiento VERIFICADO, equipo a elegir por vehicleId. Probado en esta instalación contra la API real (unidad de prueba aislada 17 y unidad 9): respuestas {"code":200,"data":N} y orderStatus:1 (应答成功) en el historial. La trama real es JT808 0x8105.
Endpoint único: POST /device/control · body {"vehicleIds":[<id>],"orderType":"…","command":<n>} (con parameter:"" si aplica).
Tabla de comandos:
· Paro de aceite (corte de combustible, relé OUT1 del MDVR): 112 = cortar · 113 = RESTAURAR (quitar el paro) — orderType:"title_2_order_8".
· Paro de motor (corte de motor / apagado, relé OUT2): 114 = cortar · 115 = RESTAURAR (quitar el paro) — orderType:"title_2_order_8".
· Reinicio de equipo: 4 (reiniciar el MDVR/terminal) — orderType:"title_2_order_3".
RESTABLECER (quitar el paro): se envía el mismo endpoint con el comando contrario → motor: 115 · aceite: 113.
Cómo elegir el equipo: vehicleId de POST /vehicle/list con {"licenseNum":"<placa>"} o {"deviceNum":"<imei>"} (unidad 9 = 202508280004).
Verificación del envío: POST /device/order/history con {"vehicleId":<id>} → orderStatus: 0 envío falló · 1 respuesta OK · 2 esperando respuesta · 3 respuesta con fallo.
Ejemplo (curl, reemplazar vehicleId y command):
TOKEN=$(curl -sk --compressed -X POST "$BASE/admin/login" -H "Content-Type: application/json" -d '{"username":"admin","password":"COLOCA_TU_CLAVE"}' | jq -r '.data.tokenHead + .data.token') # PARO de MOTOR OUT2 cortar (114) — title_2_order_8 curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":114,"orderType":"title_2_order_8","vehicleIds":[9]}' # QUITAR PARO de MOTOR (restaurar, 115) — title_2_order_8 curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":115,"orderType":"title_2_order_8","vehicleIds":[9]}' # PARO de ACEITE OUT1 cortar (112) — title_2_order_8 curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":112,"orderType":"title_2_order_8","vehicleIds":[9]}' # QUITAR PARO de ACEITE (restaurar, 113) — title_2_order_8 curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":113,"orderType":"title_2_order_8","vehicleIds":[9]}' # REINICIO del equipo (4) — title_2_order_3 curl -sk --compressed -X POST "$BASE/device/control" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" -d '{"command":4,"orderType":"title_2_order_3","vehicleIds":[9]}'
⚠ ADVERTENCIA: el paro de aceite/motor corta el combustible o apaga el motor de un vehículo EN MARCHA. Probar SOLO en equipo aislado (banco), nunca en un bus en operación/servicio; verificar SIEMPRE con /device/order/history que el restablecimiento (115/113) haya sido respondido antes de dar el vehículo por operativo.

5 · Video en vivo, playback y PTZ

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
GET/vedio/monitor/newRealtimeUrlURL en vivo por cámara: ?phone=&physicalChannel=&streamType=&mediaType=
GET/vedio/monitor/realtimeUrlURL en vivo (versión anterior)
POST/vedio/monitor/controlcontrol del video en vivo (abrir/cerrar/zoom, capturar, etc.)
ARRAYPOST/vedio/monitor/batch/controlcontrol en lote de varias cámaras
GET/vedio/monitor/attentionListvehículos en atención de video
GET/vedio/monitor/vehicleAllTreeListárbol para monitoreo de video
GET/vedio/monitor/vehicleVedioTreeList?id=árbol de video de un vehículo
GET/vedio/close/usercierra sesiones de video del usuario
GET/vedio/channel/attratributos de canal
POST/playback/video/controlcontrol de reproducción (Modo 0 play, 3 velocidad: body {deviceId:simNum, playbackMode, playbackSpeed,...})
POST/playback/video/playV1reproducir grabación
POST/playback/video/listlista de grabaciones
POST/playback/file/listarchivos de grabación (paginado)
POST/playback/file/uploadsubir archivo
POST/playback/file/upload/control?fileId=control de subida
POST/playback/file/upload/progressprogreso de subida
ARRAYPOST/playback/file/upload/statusestado de subida
POST/media/filearchivos multimedia (paginado)
POST/media/package/downloaddescarga en lote
POST/panTilt/revolvecontrol PTZ (mover cámara)
POST/panTilt/controlcontrol PTZ avanzado
POST/recording/plan/addOrUpdateplan de grabación
POST/recording/plan/deleteeliminar plan
POST/recording/plan/pageListplanes (paginado)
POST/recording/plan/pageListVehiclevehículos de un plan
POST/recording/plan/batchAddVehicleasignar vehículos en lote
POST/recording/plan/batchDeleteVehicledesasignar vehículos en lote

6 · Multimedia / fotos del equipo (tomar, recuperar y almacenar)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/device/media/search✓ probado — 存储多媒体数据检索: pide al EQUIPO que liste lo que tiene guardado en su disco. Body {"vehicleIds":[],"type":0,"channelId":,"event":0,"startTime":"YYYY-MM-DD HH:mm:ss","endTime":"..."}. type: 0=imagen, 1=audio, 2=video. event: 0=plataforma, 1=temporizado, 2=robo, 3=colisión. Respuesta: data[] con items {id (mediaId), type, channelId, event, location.dateTime}. VERIFICADO: devolvió la foto tomada (id=1, CANAL 3, imagen, 2026-09-26 13:09:14 hora del equipo).
POST/device/media/upload✓ probado (aceptada y confirmada por el equipo con 0001) — 单条存储多媒体上传: pide subir UNA foto por su id. Body {"orderType":"title_4_order_7","vehicleIds":[],"id":,"delete":0}. Se transmite al equipo como JT808 0x8805 (mediaId+delete). delete: 0=conservar en el equipo, 1=borrar tras subir.
POST/device/media/batchUpload— 存储多媒体数据上传 en lote por criterios (type/channelId/event/startTime/endTime/delete). En esta instalación responde CODE_1895 con criterios que no tienen coincidencias (el lote sube lo que ya reportó la búsqueda). Usar /device/media/upload para un solo archivo conocido.
POST/media/file✓ probado — archivos multimedia YA SUBIDOS a la plataforma (paginado). Body {"pageNum","pageSize"}; filtros habituales: vehicleId, mediaType (0 imagen/1 audio/2 video), startTime/endTime, channelId. En esta instalación está VACÍO (total 0): ningún equipo ha conseguido subir multimedia (ver nota del flujo).
POST/media/package/downloaddescarga en lote de multimedia
POST/playback/file/listarchivos de respaldo (video) paginado
POST/playback/file/uploadsubir archivo de grabación al equipo
POST/playback/file/upload/control?fileId=control de subida
POST/playback/file/upload/progressprogreso de subida
ARRAYPOST/playback/file/upload/statusestado de subida
POST/file/ftpDirectoryListdirectorio FTP del servidor de archivos (contenedor jt808file)
POST/file/ftpFilePageListarchivos FTP paginado
POST/file/ftpDownloaddescargar archivo del FTP
FOTO DE CÁMARA EN VIVO — procedimiento QUE FUNCIONA, 100 % EN ESTE SERVIDOR, DINÁMICO (equipo y canal a elegir). Verificado 2026-09-26 con la unidad 202508280004 (vehicleId 9) en CH3 y CH4 (JPEG 1280x720). El canal en vivo ya viaja por ZLM de ESTE servidor (puerto 20211); ZLM entrega el JPEG. Sin dependencia externa (ni airviewcam ni fabricante).
1) SCRIPT LISTO (recomendado): en el servidor: /mnt/contadores-platform/camara_snapshot.sh <phone|imei> <canal> [timeout_seg]
  /mnt/contadores-platform/camara_snapshot.sh 202508280004 3   # unidad 202508280004, CH3
  /mnt/contadores-platform/camara_snapshot.sh 202508280004 4 20 # mismo equipo, CH4, timeout 20 s
Resultado: guarda /mnt/contadores-platform/web/camaras/foto_<phone>_ch<canal>_<fecha>.jpg e imprime la URL pública https://mis.contadoresinteligentesmexico.info/camaras/…jpg.
2) MANUAL (los mismos pasos que el script):
① GET /vedio/monitor/newRealtimeUrl?phone=<phone>&physicalChannel=<canal>&streamType=0&mediaType=0 → devuelve el flujo en vivo de ZLM, p.ej. https://video.247gps.info:20211/main/00000000202508280004_0003.live.flv.
② curl -sk "https://127.0.0.1:20211/index/api/getSnap?url=<flv>&timeout_sec=30&expire_sec=0&secret=Richmor2024" -o foto.jpg → ZLM abre el canal y devuelve el JPEG (1280x720). El archivo también queda en el disco del contenedor ZLM (./www/snap/…).
③ Copiar a web/camaras/ para publicarlo por nginx (o docker cp si se prefiere el jpg original de ZLM).
CÓMO ELEGIR EQUIPO Y CANAL: el <phone> es el número/IMEI del vehículo que aparece en la lista del portal (para la unidad 9 = 202508280004); el <canal> es CH1…CH6 del bus (portal → cámara). Parámetros configurables al inicio del script: API_USER / API_PASS (login de la plataforma, admin por defecto), ZLM (https://127.0.0.1:20211 o http://127.0.0.1:20201) y SECRET=Richmor2024; la salida y la URL base se cambian con OUTDIR y PUBBASE.
NOTA — orden de captura/subida AL EQUIPO (no entrega el archivo en esta instalación): /device/terminal/camera (JT808 0x8801 → ACK 0x0805), /device/media/search (0x8802 → 0x0802 devuelve la lista; en la prueba id=1, canal 3) y /device/media/upload (0x8805 → ACK 0x0001) SÍ funcionan, pero ningún equipo ha enviado 0x0805 多媒体数据上传 a este servidor (logs: 0 históricos; el almacén /media/file y el FTP quedan vacíos). Los archivos que eventualmente suban (0x0805/descargas) caen en el disco del contenedor jt808file = host /data/vsftpd/data/admin/jtfile/… (FTP user upload/123456A, puerto 20072, pasivo 20100-20130; file-exchange 20022); listado por POST /media/file (filePath) y lectura por /media/package/download/file/ftpDownload o publicando el filePath por nginx.

7 · Historial / recorridos (locus)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/locus/vehicleGps/list✓ patrón — recorrido (trayectoria). Body {startTime,endTime,vehicleId,fenceIdList}. Timeout del front 180 s
POST/locus/vehicleGps/list/export/asyncexportar recorrido
POST/locus/vehicleGps/alarm/listrecorrido + alarmas
POST/locus/vehicleGps/as/alarm/listpuntos de alarma en el recorrido
POST/locus/multiVehicleGps/listtrayectorias de varias unidades
POST/locus/vehicle/listvehículos con recorrido
POST/locus/update/locationcorrección/inserción de posición manual
POST/locus/alarm/listalarmas en el tramo
GET/postion/locus/vehicleAllTreeListárbol de unidades para recorrido

7 · Alarmas en tiempo real y gestión

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/alarm/realtime/listlista de alarmas en tiempo real (filtros + paginado implícito)
POST/alarm/realtime/listByPage?pageNum=&pageSize=alarmas en tiempo real, paginado explícito
POST/alarm/realtime/list/record/pagealarmas históricas del día (record)
POST/alarm/realtime/list/record/export/asyncexportar record
POST/alarm/realtime/list/common/detaildetalle común de alarma
POST/alarm/realtime/list/common/detail/export/asyncexportar detalle
POST/alarm/realtime/aggagregado (totales por tipo/estado)
POST/alarm/realtime/agg/export/asyncexportar agregado
POST/alarm/realtime/list/agg/notProcessagregado de NO procesadas
POST/alarm/realtime/solveAlarmprocesar/resolver una alarma
POST/alarm/realtime/solveAlarm/batchprocesar en lote
POST/alarm/realtime/solveAlarm/onAlarmManager809resolver alarma desde el gestor 809
POST/alarm/realtime/exportexportar lista
POST/alarm/realtime/export/asyncexportar asíncrono
POST/alarm/realtime/process/exportexportar procesamiento
POST/alarm/realtime/process/export/asyncidem asíncrono
GET/alarm/realtime/attachment/{id}adjuntos de la alarma
GET/alarm/realtime/download/attachment/{id}descargar adjuntos
GET/alarm/realtime/download/alarmHandle/{id}descargar adjuntos de procesamiento
GET/alarm/realtime/repeatFile/{id}archivo repetido
GET/alarm/realtime/vehicleAllTreeListárbol para filtro de alarmas
GET/alarm/realtime/list/alarmTypetipos de alarma disponibles
GET/alarm/preview/today/asAlarmpreview de hoy (conteos por tipo)
GET/alarm/preview/today/analyze/7tendencia de 7 días
GET/alarm/preview/today/analyze/análisis
GET/alarmPopUp/setting/getInfoByUserconfiguración de popup de alarmas del usuario
POST/alarmPopUp/setting/createOrUpdateguardar popup de alarmas

8 · Configuración y tipos de alarma

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
GET/alarm/setting/type/listcatálogo de tipos de alarma
GET/alarm/setting/type/list?alarmType=1catálogo filtrado por grupo
POST/alarm/setting/listconfiguraciones de alarma
POST/alarm/setting/createcrear configuración (regla de alarma por unidad)
POST/alarm/setting/update/{id}actualizar
POST/alarm/setting/deleteeliminar
POST/alarm/setting/saveguardar
GET/alarm/setting/motorcade/tree/árbol para asignación
GET/alarm/setting/motorcade/{id}flotillas con la regla
GET/alarm/setting/popup/type/listtipos popup
GET/alarm/setting/rule/type/listtipos de regla
GET/alarm/setting/file/type/listtipos de adjunto
GET/alarm/summary/type/listAlarmTypeHasNumresumen de tipos con conteo
GET/alarm/summary/type/list/{id}detalle de tipo
POST/alarm/summary/vehicle/inforesumen por vehículo

9 · Reportes de circulación y pago (kilometraje, online, combustible, agua, temperatura, conductores, pasajeros, OBD, etc.)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/mileage/vehicle/reportkilometraje por vehículo ({startTime,endTime,...})
POST/mileage/company/reportkilometraje por compañía
POST/mileage/driver/reportkilometraje por conductor
POST/position/pass/rate/reporttasa de paso de posición
POST/position/locus/complete/rate/reporttasa de completitud de locación
POST/position/vehicle/drift/rate/reporttasa de deriva de unidad
POST/position/vehicle/drift/detail/reportdetalle de deriva
POST/position/history/reportreporte de posición histórica
POST/online/rate/reporttasa de en línea
POST/online/rate/summary/reportresumen de online
POST/online/offline/summary/reportresumen online/offline
POST/online/offline/detail/reportdetalle online/offline
POST/online/acc/ignition/reportreporte ACC/ignición
POST/online/acc/ignition/statistics/reportestadísticas ACC/ignición
POST/oilVolume/statistics/reportestadísticas de nivel de combustible
POST/oilVolume/mileage/reportcombustible vs. kilometraje
POST/oilVolume/loss/analyze/reportanálisis de pérdida de combustible
POST/oilVolume/loss/common/reportreporte común de pérdida
POST/oilVolume/details/reportdetalle de combustible (paginado)
POST/waterVolume/summary/reportresumen de volumen de agua
POST/waterVolume/common/reportvolumen de agua común
POST/waterVolume/details/reportdetalle de agua (paginado)
POST/report/temperature/listlista de reportes de temperatura
POST/report/temperature/detailInfodetalle de temperatura
POST/report/temperature/alarmStatisticsestadísticas de alarma de temperatura
POST/driver/login/logout/summary/reportresumen de login/logout de conductor
POST/driver/login/logout/detail/reportdetalle de login/logout
POST/driver/vehicle/login/logout/summary/reportresumen por vehículo-conductor
POST/driver/vehicle/login/logout/detail/reportdetalle por vehículo-conductor
POST/driver/id/reportreporte de identificación de conductor (IC/ASM)
POST/passenger/flow/statisticsestadísticas de flujo de pasajeros
POST/passenger/flow/detail/pagedetalle de flujo (paginado)
POST/passenger/flow/times/summaryresumen de viajes
POST/passenger/flow/times/pageviajes paginado
POST/passenger/flow/vehicle/times/summaryviajes por vehículo
POST/passenger/flow/line/summaryresumen por línea
POST/passenger/flow/line/statistics/pageestadísticas por línea (paginado)
POST/passenger/flow/site/statistics/pageestadísticas por parada
POST/vehicle/overcrowd/statistics/pageListestadísticas de sobrecupo
POST/vehicle/overcrowd/statistics/calculateOvercrowdPercentagecalcular % de sobrecupo
POST/forward/reverse/status/summary/reportresumen de avance/reversa
POST/forward/reverse/status/details/reportdetalle avance/reversa
POST/forward/reverse/track/details/reportdetalle de trayectoria avance/reversa
POST/punsh-record/driver/reportreporte de punzadas/registros del conductor
POST/vehicleData/list/reportdatos CAN/vehicleData (paginado)
POST/obd/list/record/pageregistros OBD (paginado)
POST/order/vehicle/detaildetalle de órdenes por vehículo
POST/order/carpooling/detaildetalle de carpooling
POST/forklift/inspectionPageinspección de montacargas
POST/*/report/exportPATRÓN: todo reporte tiene variante de exportación: /export, /export/async (Excel)

10 · Estadísticas de riesgo, conducción y scoring

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/alarm/statistics/list/vehicleestadísticas de alarma por vehículo
POST/alarm/statistics/export/vehicle/asyncexportar por vehículo
POST/alarm/statistics/list/companyestadísticas por compañía
POST/alarm/statistics/export/company/asyncexportar por compañía
POST/alarm/statistics/risk/overallStatisticsestadística general de riesgo
POST/alarm/statistics/risk/levelTrendtendencia por nivel de riesgo
POST/alarm/statistics/risk/eventTypeeventos por tipo
POST/alarm/statistics/risk/mapDistributiondistribución de riesgo en mapa
POST/alarm/common/listlista de alarmas común (multi-filtro startTime/endTime/vehicleId)
POST/alarm/common/report/export/asyncexportar común
POST/alarm/common/selectDeviceAlarmMonthOrDayStatisticsListestadísticas mensual/diaria
POST/alarm/report/list/pagereportes de alarma (paginado)
POST/alarm/report/export/asyncexportar reportes
POST/alarm/evidence/overviewpanorama de evidencia de alarma
POST/driving/behavior/driver/scorepuntuación de conducción por conductor
POST/driving/behavior/driver/trendtendencia de conducción por conductor
POST/driving/behavior/vehicle/scorepuntuación por vehículo
POST/driving/behavior/vehicle/trendtendencia por vehículo
POST/driving/behavior/company/scorepuntuación por compañía
POST/driving/behavior/company/trendtendencia por compañía
POST/scoring/normal/listlistado de reglas de puntuación
POST/scoring/normal/createcrear regla
POST/scoring/normal/updateactualizar
GET/scoring/normal/delete/{id}eliminar
POST/scoring/normal/exportexportar

11 · Geocercas, reglas y regiones (electronic fence)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/fence/listAlltodas las cercas
POST/fence/listcercas (paginado)
POST/fence/list/record?pageNum=registro de cercas
POST/fence/region/createcrear cerca geográfica
POST/fence/region/update/{id}actualizar cerca
POST/fence/route/createcrear cerca de ruta
POST/fence/route/update/{id}actualizar ruta
POST/fence/route/divide/{id}dividir ruta
POST/fence/vehicleGps/listposiciones de vehículos respecto a cercas
GET/fence/vehicleAllTreeListárbol para asignación
GET/fence/list/vehicle?fenceId=vehículos de una cerca
POST/fence/batch/selectasignación en lote
POST/fence/batch/order/recordórdenes de asignación en lote
POST/fence/batch/delete/orderborrado en lote
POST/fence/export/asyncexportar cercas
POST/fence/export/record/asyncexportar registros
POST/fence/region/orderórdenes de región
GET/fence/region/param?fenceId=parámetros de la cerca región
POST/rule/list?pageNum=reglas (paginado)
POST/rule/list/all/vehiclereglas de todos los vehículos
POST/rule/createcrear regla
POST/rule/update/{id}actualizar
POST/rule/deleteeliminar
POST/rule/distributedistribuir regla
POST/rule/distribute/ruledistribuir por regla
POST/rule/distribute/vehicledistribuir por vehículo
GET/rule/list/company/...árboles para ABM de reglas
GET/rule/type/treeárbol de tipos de regla
POST/rule/batch/deleteborrado en lote
POST/region/listregiones de negocio
POST/region/createcrear región
POST/region/deleteeliminar
POST/region/exportexportar

12 · Configuración de plataforma (mapas, dict, área, servidores)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
GET/config/get/mapKeySetting✓ usado — clave de proveedor de mapas (Baidu/Bing)
POST/config/update/mapKeySettingactualizar claves de mapa
GET/config/get/basicSettingconfiguración básica de la plataforma
POST/config/create/basicSettingguardar básica
GET/config/get/emailSettingconfiguración de email
POST/config/create/emailSettingguardar email
GET/config/get/vehicleNumlímite de vehículos (authorizedDeviceNum)
GET/config/setting/vehicle/{vehicleId}config del vehículo
GET/config/select/adminFunConffunciones del admin
GET/config/get/realtimeVideoUrlURL base de video en vivo
POST/config/upload/file/ftpsubir archivo por FTP
POST/platformSettings/configconfiguración de plataforma
POST/platformSettings/queryconsultar configuración
POST/platformSettings/instructioninstrucción de plataforma
POST/platformSettings/queryInstructionconsultar instrucción
GET/dict/list/codesdiccionarios de códigos
GET/dict/tree/codediccionarios en árbol
GET/area/provinceprovincias (México: estados)
GET/area/city/{code}municipios de un estado
POST/sys/server/listservidores del sistema
POST/sys/server/createcrear servidor
POST/sys/server/updateactualizar
POST/sys/server/deleteeliminar
POST/sys/server/downloadMonitormonitor de descargas
POST/sys/server/server/listlista de servidores
POST/sys/server/server/createcrear servidor (detalle)
POST/sys/server/server/updateactualizar servidor
POST/sys/server/server/deleteeliminar servidor
GET/sys/server/diskSetting/{id}disco del servidor
POST/app/version/pageversiones de app
POST/app/version/createcrear versión
POST/app/version/deleteeliminar
GET/qrcode/download/infoinfo QR de descargas
POST/qrcode/download/saveOrUpdateguardar QR

13 · Administración: usuarios, roles, admins, compañías, SIM, conductores

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/user/listusuarios de la plataforma (paginado)
POST/user/list/online?pageNum=usuarios en línea
POST/user/createcrear usuario
POST/user/update/{id}actualizar
POST/user/deleteeliminar
POST/user/export/asyncexportar
GET/user/offline/{id}desconectar usuario
POST/user/statusestado del usuario
POST/user/vehicle/{userId}ASIGNAR vehículos al usuario (base para tu sistema)
GET/user/list/vehicle?userId=vehículos asignados
GET/user/list/vehicle/authorized?userId=vehículos autorizados
POST/user/video/listperfil de video del usuario
GET/role/treeListárbol de roles
POST/role/createcrear rol
POST/role/updateactualizar
POST/role/deleteeliminar
POST/role/updateUserRoleasignar rol a usuario
POST/role/allocMenuAndPermasignar permisos al rol
GET/role/treeList/{id}árbol de permisos del rol
GET/role/listUser/{roleId}usuarios del rol
GET/role/listMenuAndPermission/{id}menús/permisos del rol
POST/admin/listadministradores (paginado)
POST/admin/createcrear admin
POST/admin/update/{id}actualizar
POST/admin/deleteeliminar
POST/admin/export/asyncexportar
POST/admin/vehicle/{adminId}asignar vehículos al admin
GET/admin/list/vehicle?adminId=vehículos del admin
GET/admin/list/vehicle/authorized?adminId=vehículos autorizados al admin
POST/company/listcompañías (paginado)
GET/company/treeListárbol de compañías
POST/company/createcrear compañía
POST/company/deleteeliminar
POST/company/export/asyncexportar
GET/company/device/treeListárbol de dispositivos de compañía
POST/sim/listtarjetas SIM (paginado)
POST/sim/createcrear SIM
POST/sim/update/{id}actualizar
POST/sim/deleteeliminar
POST/sim/export/asyncexportar
GET/sim/list/device/allSIMs para dispositivos
GET/sim/list/sim/all/{id}detalle SIM
POST/driver/listconductores (paginado)
POST/driver/createcrear conductor
GET/driver/get/{id}detalle
POST/driver/update/{id}actualizar
POST/driver/deleteeliminar
POST/driver/export/asyncexportar
POST/punsh-driver/listpunzadas de conductor (paginado)
POST/punsh-driver/addagregar pagación/registro
POST/punsh-driver/updateactualizar
POST/punsh-driver/deleteeliminar
POST/driving/license/listlicencias de conducir
POST/driving/license/createcrear
POST/driving/license/update/{id}actualizar
POST/driving/license/deleteeliminar
POST/driving/license/export/asyncexportar
POST/label/listetiquetas de vehículos
POST/label/createcrear etiqueta
POST/label/update/{id}actualizar
POST/label/deleteeliminar
POST/label/export/asyncexportar
POST/label/upgrade/...gestión de firmware/upgrade (OTA)

14 · Operativos: mantenimiento, seguros, anuales, reparaciones, accidentes, rutas, firmware

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/maintain/listmantenimientos (paginado)
POST/maintain/createcrear mantenimiento
POST/maintain/update/{id}actualizar
POST/maintain/deleteeliminar
POST/maintain/export/asyncexportar
POST/insurance/listpólizas de seguros (paginado)
POST/insurance/list/advanceseguros con filtros avanzados
POST/insurance/createcrear póliza
POST/insurance/update/{id}actualizar
POST/insurance/deleteeliminar
POST/insurance/export/asyncexportar
POST/annual/listverificaciones/renovaciones anuales
POST/annual/list/advanceavanzado
POST/annual/createcrear
POST/annual/update/{id}actualizar
POST/annual/deleteeliminar
POST/annual/export/asyncexportar
POST/repair/listreparaciones
POST/repair/createcrear
POST/repair/update/{id}actualizar
POST/repair/deleteeliminar
POST/repair/export/asyncexportar
POST/accident/listaccidentes
POST/accident/createcrear
POST/accident/update/{id}actualizar
POST/accident/deleteeliminar
POST/accident/export/asyncexportar
POST/transport/listregistro de transporte
POST/transport/createcrear
POST/transport/update/{id}actualizar
POST/transport/deleteeliminar
POST/transport/export/asyncexportar
POST/upgrade/listfirmware/actualizaciones
POST/upgrade/list/recordregistro de upgrades
POST/upgrade/list/tasktareas de upgrade
POST/upgrade/list/newest/recordúltimas actualizaciones
POST/upgrade/pushempujar firmware
POST/upgrade/createcrear upgrade
GET/upgrade/find/all/{id}detalle
POST/upgrade/task/pushempujar tarea
POST/upgrade/task/fail/pushreintentar tarea fallida
GET/routeInfo/listrutas
POST/routeInfo/pagerutas paginado
POST/routeInfo/createcrear ruta
POST/routeInfo/updateactualizar
POST/routeInfo/deleteeliminar
GET/routeInfo/vehicleList/{id}vehículos de la ruta
GET/postion/otaUpgrade/vehicleAllTreeListárbol para OTA
GET/postion/issueInstructions/...árboles para emisión de instrucciones
POST/face/issuedemitir caras al equipo
POST/GET/intelligentLinkage/...enlace inteligente (intercom, reglas)

15 · JT/T 809 y regulatorio (México: no en uso)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
GET/809/up/list?id=vehículos subidos por provincia 809
POST/809/up/pageregistros 809 (paginado)
POST/809/up/bindVehicle?id=vincular vehículo
POST/809/up/addagregar
POST/809/up/updateactualizar
POST/809/up/deleteeliminar
POST/809/up/exportexportar
POST/809/up/controlcontrol
POST/809/up/position/resendreenviar posición
POST/809/up/registerDatadatos de registro
POST/809/check/pagecomprobaciones 809
POST/809/check/replyresponder comprobación
POST/809/check/exportexportar
POST/809/supervision/pagesupervisión 809 (paginado)
POST/809/supervision/replyresponder supervisión
POST/809/supervision/exportexportar
POST/jt809Protocol/clientStopdetener enlace 809
POST/jt809Protocol/clientStopNotifynotificar detención
POST/regulatory/getLocationListposición regulatoria

16 · Logs del sistema y exportación

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/log/list/operatelog de operaciones (paginado)
POST/log/operate/export/asyncexportar
POST/log/list/loginlog de logins
POST/log/login/export/asyncexportar
POST/log/list/equipmentlog de equipos
POST/log/equipment/export/asyncexportar
POST/excelExport/pagetareas de exportación Excel
GET/excelExport/modelNamesmodelos disponibles
GET/config/get/exportCriticalValuevalores críticos de exportación
POST/file/deleteborrar archivo
POST/file/ftpDirectoryListlistar directorio FTP
POST/file/ftpFilePageListarchivos FTP paginado
POST/file/ftpDownloaddescargar del FTP
POST/file/upload/attachedPhotosubir foto adjunta
POST/msg/template/fileplantillas de mensajes
GET/git/infoinfo de versión (git)

17 · Administrativo de plataforma — límite de dispositivos autorizados (a mano y con asistente)

MétodoEndpoint https://api.247gps.info/vehicle-adminNotas
POST/vehicle/listconsultar vehículos / contar los dados de alta — para conocer el margen respecto al límite de dispositivos autorizados
LÍMITE DE DISPOSITIVOS AUTORIZADOS — cómo aumentarlo (MANUAL y con ASISTENTE).
Qué es: variable authorizedDeviceNum (default 200) en la línea 142 de application.yml del servicio vehicle-admin. El contenedor monta esa carpeta del host en /conf, así que basta editar el archivo del host y reiniciar el contenedor. Si se llega al tope, la plataforma no permite dar de alta más dispositivos/vehículos.
Estado actual (2026-09-26): quedó en 205 (hubo un caso en que volvió a 200 tras reinstalarse la carpeta de la aplicación — SIEMPRE verificar el valor tras una actualización). Alta: 12 vehículos.
A MANO (usted, con SSH al servidor):
# 1) respaldo (¡siempre primero!) cp /mnt/vehicle-install-application_v30912/vehicle-admin/conf/application.yml /mnt/vehicle-install-application_v30912/backups_2026-08-24/application.yml.bak-$(date +%Y%m%d)_autDevNum # 2) ver el valor actual (línea 142) grep -n authorizedDeviceNum /mnt/vehicle-install-application_v30912/vehicle-admin/conf/application.yml # 3) cambiar a la cantidad deseada (ej. 500) sed -i 's/authorizedDeviceNum: [0-9]*/authorizedDeviceNum: 500/' /mnt/vehicle-install-application_v30912/vehicle-admin/conf/application.yml # (o editar la línea 142 con: nano /mnt/vehicle-install-application_v30912/vehicle-admin/conf/application.yml) # 4) reiniciar el servicio docker restart vehicle-admin # 5) esperar el arranque (~60-90 s). OJO: durante el warm-up el login puede devolver # 503/500 "系统繁忙,请稍后再试" — es NORMAL, no es un fallo. docker ps --filter name=vehicle-admin # hasta ver "(healthy)" # 6) verificación real (el login debe responder code=200) TOKEN=$(curl -sk --compressed -X POST "https://api.247gps.info/vehicle-admin/admin/login" -H "Content-Type: application/json" -d '{"username":"admin","password":"COLOCA_TU_CLAVE"}' | jq -r '.data.tokenHead + .data.token') curl -sk --compressed -X POST "https://api.247gps.info/vehicle-admin/vehicle/list" -H "Authorization: $TOKEN" -H "Content-Type: application/json" -d "{\"pageNum\":1,\"pageSize\":1}" # code=200, total=N
CÓMO LO HACE EL ASISTENTE (mismo método, ejecutado por el agente de IA el 2026-09-26): ① respalda el archivo en backups_2026-08-24/…bak-<fecha>_autDevNum; ② confirma el valor con grep y edita SOLO la línea 142 (con edición exacta, sin tocar el resto del YAML); ③ reinicia con docker restart vehicle-admin; ④ espera a que el contenedor quede healthy e interpreta los 503/500 iniciales como warm-up (no como fallo); ⑤ hace login por API hasta ver code=200 y verifica /vehicle/list responde; ⑥ documenta el cambio en REGISTRO_CAMBIOS.md con el valor aplicado y la advertencia de que puede revertirse si se reinstala la carpeta de la aplicación.
Notas: isMemoryMode: true (línea 143) NO limita dispositivos (solo el árbol de vehículos en memoria). El licenciamiento del fabricante puede imponer un tope adicional por encima de este número. El reinicio de vehicle-admin es breve y no afecta a los demás servicios (aceptación de equipos jt808message:20020, ZLM, FTP, etc.).
⚡ AUTOMATIZADO: todo lo anterior está en el script /root/actualizacionDeEquipos.sh (cómo usarlo y cómo recrearlo si se borra → bloque al final de esta sección).
SCRIPT AUTOMATIZADO — /root/actualizacionDeEquipos.sh (uso y recreación)
Cómo usarlo (en el servidor, vía SSH):
/root/actualizacionDeEquipos.sh # pregunta la cantidad a la que cambiar /root/actualizacionDeEquipos.sh 500 # o directamente con el número (ej. 500)
Hace los 6 pasos del procedimiento (respaldo → cambiar authorizedDeviceNum → docker restart vehicle-admin → esperar "healthy" → verificar login code=200 → mostrar /vehicle/list).
Sí el archivo se borra, recréalo en el servidor ejecutando esto (heredoc con el código íntegro; lo vuelve a crear y ejecutable):
cat > /root/actualizacionDeEquipos.sh <<'SCRIPTEOF' #!/usr/bin/env bash # ============================================================================= # actualizacionDeEquipos.sh — sube el límite de dispositivos autorizados # (authorizedDeviceNum) de vehicle-admin y reinicia/verifica todo el proceso. # # DINÁMICO: pregunta la cantidad a la que cambiar (o se pasa como argumento). # # USO: # ./actualizacionDeEquipos.sh # te pregunta la cantidad # ./actualizacionDeEquipos.sh 500 # directamente a 500 # # HACE TODO: # 1) respaldo del application.yml (backups_2026-08-24/…) # 2) muestra el valor actual # 3) aplica la nueva cantidad (línea authorizedDeviceNum) # 4) docker restart vehicle-admin # 5) espera a que el contenedor quede "healthy" # 6) verifica el login de la API (code=200) y /vehicle/list # # OJO: durante el warm-up (~60-90 s) el login puede devolver 503/500 # "系统繁忙,请稍后再试" — es NORMAL, no es un fallo. # ============================================================================= set -uo pipefail CONF=/mnt/vehicle-install-application_v30912/vehicle-admin/conf/application.yml BACKUPDIR=/mnt/vehicle-install-application_v30912/backups_2026-08-24 API="${API:-https://api.247gps.info/vehicle-admin}" ADMIN_USER="${ADMIN_USER:-admin}" ADMIN_PASS="${ADMIN_PASS:-Deftones1310}" # ---- cantidad: argumento o pregunta interactiva ---- if [ $# -ge 1 ]; then NUEVO="$1" else ACTUAL=$(grep -oP 'authorizedDeviceNum:\s*\K[0-9]+' "$CONF" 2>/dev/null || echo "desconocido") echo "¿A qué cantidad quieres cambiar el límite de equipos autorizados? (actual: $ACTUAL)" read -r -p "> " NUEVO fi if ! [[ "$NUEVO" =~ ^[0-9]+$ ]]; then echo "ERROR: '$NUEVO' no es un número válido (ej: 205, 500)." exit 2 fi echo "" echo "===== 1/6 RESPALDO =====" mkdir -p "$BACKUPDIR" BAK="$BACKUPDIR/application.yml.bak-$(date +%Y%m%d_%H%M%S)_autDevNum" cp -a "$CONF" "$BAK" echo "backup: $BAK" echo "" echo "===== 2/6 VALOR ACTUAL =====" grep -n authorizedDeviceNum "$CONF" echo "" echo "===== 3/6 APLICANDO authorizedDeviceNum=$NUEVO =====" sed -i.bak "s/authorizedDeviceNum: [0-9]*/authorizedDeviceNum: $NUEVO/" "$CONF" grep -n authorizedDeviceNum "$CONF" echo "" echo "===== 4/6 REINICIANDO vehicle-admin =====" docker restart vehicle-admin echo "" echo "===== 5/6 ESPERANDO ARRANQUE (healthy) =====" for i in $(seq 1 24); do STATUS=$(docker inspect -f '{{.State.Health.Status}}' vehicle-admin 2>/dev/null) echo " ... estado: $STATUS" [ "$STATUS" = "healthy" ] && break sleep 5 done docker ps --filter name=vehicle-admin --format '{{.Names}} {{.Status}}' echo "" echo "===== 6/6 VERIFICACIÓN API (login debe dar code=200) =====" LOGGED=0 for i in $(seq 1 30); do R=$(curl -sk --compressed -X POST "$API/admin/login" \ -H "Content-Type: application/json" \ -d "{\"username\":\"$ADMIN_USER\",\"password\":\"$ADMIN_PASS\"}" 2>/dev/null) CODE=$(printf '%s' "$R" | jq -r '.code // empty' 2>/dev/null) if [ "$CODE" = "200" ]; then echo " login code=200 OK (intento $i)" TOKEN=$(printf '%s' "$R" | jq -r '.data.tokenHead + .data.token') VL=$(curl -sk --compressed -X POST "$API/vehicle/list" \ -H "Authorization: $TOKEN" -H "Content-Type: application/json" \ -d '{"pageNum":1,"pageSize":1}' 2>/dev/null) printf '%s' "$VL" | jq -r '" /vehicle/list code=\(.code) total=\(.data.total // "n/a")"' LOGGED=1 break fi sleep 5 done echo "" if [ "$LOGGED" = "1" ]; then echo "LISTO. authorizedDeviceNum ahora es $NUEVO (anterior respaldado en $BAK)" echo "Recuerda: verificar el valor si en el futuro se reinstala la carpeta de la aplicación." else echo "AVISO: el login no dio code=200 tras $((i * 5)) s de espera." echo "Revise el contenedor: docker logs --tail 50 vehicle-admin" fiSCRIPTEOF chmod +x /root/actualizacionDeEquipos.sh