Ir al contenido

Crear un Data Bundle

Antes de subir los datos de captura, necesitas un data bundle vacío vinculado a un dispositivo de captura específico. La creación es un flujo de dos pasos: obtener el árbol de entradas del dispositivo del data bundle y, a continuación, crear el bundle con el dbuPath totalmente resuelto del dispositivo hoja que hayas seleccionado. El árbol de entradas se devuelve en una sola llamada; recórrelo localmente (por name y children) hasta llegar a una hoja. Los nodos hoja contienen la cadena dbuPath que pasas en el momento de la creación; los nodos rama tienen dbuPath: null.


MétodoRutaÁmbitoPropósito
GET/v1/organization/{organizationId}/data-bundle-input-treeread:bundleObtener el árbol de entradas del dispositivo
POST/v1/nodes/{parentId}/bundlewrite:bundleCrear un data bundle
GET {api_url}/v1/organization/{organizationId}/data-bundle-input-tree
Authorization: Bearer {access_token}

La respuesta es un árbol anidado. Cada nodo incluye:

CampoSignificado
nameIdentificador estable usado para construir rutas
labelNombre para mostrar legible por humanos
isLeaftrue cuando el nodo es un dispositivo de captura seleccionable
dbuPathRuta del dispositivo totalmente resuelta en los nodos hoja; null en las ramas
childrenNodos hijos (array vacío en las hojas)

Ejemplo (truncado):

{
"nodes": [
{
"name": "POINTCLOUD",
"label": "Point Cloud",
"isLeaf": false,
"dbuPath": null,
"children": [
{
"name": "ZF",
"label": "ZF",
"isLeaf": false,
"dbuPath": null,
"children": [
{
"name": "ZFSLAM",
"label": "ZF SLAM",
"isLeaf": true,
"dbuPath": "POINTCLOUD/ZF/ZFSLAM",
"children": []
}
]
}
]
}
]
}

Recorre el árbol hasta que isLeaf sea true y luego copia dbuPath (aquí POINTCLOUD/ZF/ZFSLAM).

Crea el bundle bajo un nodo padre sobre el que tengas permiso (normalmente un sitio o una carpeta). Pasa el nombre del bundle y el dbuPath de la hoja del paso 1.

POST {api_url}/v1/nodes/{parentId}/bundle
Authorization: Bearer {access_token}
Content-Type: application/json
{ "name": "ZF capture 2026-06-01", "dbuPath": "POINTCLOUD/ZF/ZFSLAM" }
{
"id": "a6f75b3c-f261-4b27-9a2a-9a6cc1234c53",
"name": "ZF capture 2026-01-01",
"dbuPath": "POINTCLOUD/ZF/ZFSLAM"
}

Usa el id devuelto como bundleId para los pasos de subida, procesamiento y descarga.

EstadoCausa
400 Bad RequestEl dbuPath es desconocido, no es una hoja o no está disponible
403 ForbiddenSin permiso sobre el nodo padre, o sin acceso al contenido
import requests
API_URL = "https://<your-regional-api-url>"
TOKEN = "<access_token>"
ORG_ID = "<organization_id>"
PARENT_ID = "<site-or-folder-id>"
headers = {"Authorization": f"Bearer {TOKEN}"}
tree = requests.get(
f"{API_URL}/v1/organization/{ORG_ID}/data-bundle-input-tree",
headers=headers,
).json()
# Walk the tree to find the ZF SLAM leaf (your navigation logic may differ).
def find_dbu_path(nodes, *path):
node = nodes
for segment in path:
node = next(n for n in node if n["name"] == segment)
node = node["children"]
leaf = node[0]
assert leaf["isLeaf"]
return leaf["dbuPath"]
dbu_path = find_dbu_path(tree["nodes"], "POINTCLOUD", "ZF", "ZFSLAM")
bundle = requests.post(
f"{API_URL}/v1/nodes/{PARENT_ID}/bundle",
headers=headers,
json={"name": "ZF capture 2026-01-01", "dbuPath": dbu_path},
).json()
bundle_id = bundle["id"]
print(f"Created bundle {bundle_id} for device {bundle['dbuPath']}")

Con un bundleId en la mano, continúa con Subir datos a un Data Bundle.