Saltar a contenido

Importación de cámaras mediante API

POST /watcher/client-api/v3/streams/import crea y actualiza desde CSV o JSON. El usuario debe gestionar cámaras en todas las organizaciones indicadas. Envíe una clave personal o token de sesión como Bearer.

Preparar los datos

Para altas indique título y organización. inputs contiene la fuente. La importación busca por name: actualiza coincidencias y genera nombres nuevos a partir de title. El nombre enviado para una cámara nueva no se convierte en su identificador.

Para actualizaciones repetibles, obtenga primero nombres mediante GET /watcher/client-api/v3/streams. Repetir filas sin nombre como sincronización crea nuevas cámaras.

CSV

Guarde cameras.csv en UTF-8, con encabezado y separador coma:

name,title,organization_id,static,disabled,inputs_0_url,inputs_1_url,dvr_expiration,coordinates_latitude,coordinates_longitude
,Entrada,7,true,false,rtsp://camera-one.example.com/main,rtsp://camera-one.example.com/sub,86400,55.75,37.61
,Aparcamiento,7,true,false,rtsp://camera-two.example.com/main,,86400,55.76,37.62

Sustituya 7 por una organización existente. Para actualizar, complete name con el nombre API.

curl --fail-with-body --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: text/csv' \
  --data-binary @cameras.csv \
  'https://watcher.example.com/watcher/client-api/v3/streams/import'

Los campos anidados se separan con guiones bajos. Campos principales:

  • title — nombre mostrado.
  • name — identificador existente para actualizar.
  • organization_id — organización; indíquela explícitamente.
  • folder_id — carpeta de la organización.
  • preset_id — preajuste disponible.
  • comment — nota.
  • static — true para recepción continua y false bajo demanda.
  • disabled — desactivación administrativa.
  • inputs_0_url — fuente principal; inputs_1_url, secundaria.
  • dvr_expiration — retención en segundos.
  • coordinates_latitude y coordinates_longitude — coordenadas.

Los parámetros avanzados deben corresponder a StreamConfig de Client API. Por ejemplo, vision usa prefijo vision_ y el array de detectores vision_detectors_0_.... No copie campos antiguos sin revisar el esquema.

JSON

El cuerpo es un objeto con array streams. Se rechaza un array de primer nivel:

{
  "streams": [
    {
      "title": "Entrada",
      "organization_id": 7,
      "inputs": [{"url": "rtsp://camera-one.example.com/main"}],
      "static": true,
      "dvr": {"expiration": 86400}
    }
  ]
}

Guárdelo como cameras.json y envíe:

curl --fail-with-body --request POST \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data-binary @cameras.json \
  'https://watcher.example.com/watcher/client-api/v3/streams/import'

Comprobar el resultado

Ejemplo correcto:

{"created":2,"updated":0}

La respuesta solo tiene contadores, sin nombres. Lea la lista de la organización y compruebe títulos y parámetros. Si necesita el identificador inmediatamente, use PUT /streams/{name} individual y guarde name; consulte facturación.

Una lista vacía o cuerpo incorrecto produce error de validación. La falta de gestión de cámaras devuelve 403. Guardar correctamente no confirma recepción de vídeo: compruebe conexión aparte.