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 —
truepara recepción continua yfalsebajo 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.