Ir al contenido

Lámina de comandos

Toda la capacidad de NORA de un vistazo: el SDK del robot, el CLI, las variables que el agente inyecta, los enums y los endpoints públicos. Para la explicación a fondo de cada cosa, sigue el enlace de cada bloque.

SDK del robot — from nora_agent import sdk

Sección titulada «SDK del robot — from nora_agent import sdk»

La forma oficial de que un robot hable con NORA. Las funciones marcadas con 🔒 requieren un job gestionado (NORA_JOB_ID presente); fuera de él lanzan RuntimeError. El resto (colas, assets, logging, progreso) funciona también bajo nora dev run con NORA_EXEC_TOKEN.

FunciónFirmaQué hace
loglog(level: str, message: str, data: dict | None = None) -> NoneEnvía una línea de log estructurada al dashboard (en dev local imprime por stdout).
update_progressupdate_progress(percent: int, message: str | None = None) -> NoneMueve la barra de progreso del job (0–100).
FunciónFirmaQué hace
get_job_idget_job_id() -> str | NoneID del job actual; None en dev local.
get_job_signalget_job_signal() -> str 🔒Señal del job: "none", "stop" o "kill".
should_stopshould_stop() -> bool 🔒True si el operador pidió Stop/Kill. Chéquealo dentro de bucles largos.
FunciónFirmaQué hace
get_inputget_input(name: str | None = None, default=None)Valor de un argumento (o el dict completo si name es None).
get_inputsget_inputs() -> dictTodos los argumentos de entrada del job.
set_outputset_output(key_or_dict, value=None) -> NoneReporta/mergea resultados en output_data (visibles en el job).

Se declaran en nora.json (inputs/outputs); ver argumentos.

FunciónFirmaQué hace
get_assetget_asset(name: str, environment: str = "production") -> dictAsset descifrado por nombre → {name, type, environment, value, username?} (value tipado según el tipo).
FunciónFirmaQué hace
get_queue_itemget_queue_item(queue_name: str) -> dict | NoneReclama el siguiente item (o None si está vacía).
queue_pendingqueue_pending(queue_name: str) -> intCuántos items quedan claimables (status new).
queue_statsqueue_stats(queue_name: str) -> dict[str, int]Conteo por estado, sin consumir nada.
complete_queue_itemcomplete_queue_item(queue_name: str, item_id: str, result: dict) -> NoneMarca el item completado con su resultado.
fail_queue_itemfail_queue_item(queue_name: str, item_id: str, error_message: str, exception_type="system") -> NoneMarca el item fallido. system = reintenta hasta max_retries; business = terminal (no reintenta).
add_queue_itemadd_queue_item(queue_name: str, data: dict, priority: int = 3, reference=None, deadline=None, postpone=None) -> dictEncola un único item (con reference/deadline/postpone opcionales).
add_queue_itemsadd_queue_items(queue_name: str, items: list[dict], priority: int = 3) -> intEncola varios con la misma priority; devuelve cuántos.
send_queue_item_for_reviewsend_queue_item_for_review(queue_name: str, item_id: str) -> dictManda el item a revisión humana (pending_review).
wait_for_queue_reviewwait_for_queue_review(queue_name: str, item_id: str, poll_interval=5.0, timeout=3600.0) -> strBloquea hasta "approved" o "rejected".

Las funciones de cola y de assets no necesitan job gestionado: corren bajo nora dev run (solo requieren NORA_EXEC_TOKEN).

FunciónFirmaQué hace
ask_userask_user(prompt: str, options: list[str] | None = None, poll_interval=5.0, timeout=3600.0) -> AnyAtajo: pide un dato al operador y bloquea hasta la respuesta.
request_user_inputrequest_user_input(prompt: str, options: list[str] | None = None) -> dictLanza la solicitud (no bloquea).
wait_for_user_inputwait_for_user_input(poll_interval=5.0, timeout=3600.0) -> AnyBloquea hasta que el operador responda.

ask_user(...) = request_user_input(...) + wait_for_user_input(...).

FunciónFirmaQué hace
check_for_updatecheck_for_update(current_version: str) -> dict¿Hay versión más nueva del agente? Devuelve {update_available, latest_version, is_mandatory, changelog, download_url_macos, download_url_windows}.

Detalle de uso y buenas prácticas en SDK de robots y logging.

ComandoFlags clave (default)Qué hace
nora login--api-url (default https://nora-api.valisoftconsulting.com/api/v1, override con env NORA_API_URL), --password, --emailInicia sesión (por navegador; --password para headless).
nora logoutOlvida la sesión guardada.
nora dev run <entry.py>--environment dev, --assets, --ttl 1800, --input '{...}'Ejecuta el robot local con datos en vivo (token de dev corto). --input pasa argumentos (NORA_INPUT).
nora dev env--format dotenv, --write <path>, --ttl 28800, --environment devEscribe NORA_API_URL + NORA_EXEC_TOKEN para depurar en el IDE.
nora package [path]--entry main.py, --bump patch, --version, --name, --exclude, --gitignore, --allow-secrets, --listEmpaqueta el robot en .zip (excluye venv/cachés/secretos; auto-incrementa versión).
nora release push [path]--package, --version, --entry, --file, --no-createSube el .zip como release (crea el paquete si no existe).
nora release list [path]--packageLista las versiones subidas.
nora release delete <version>--packageElimina una versión (admin).
nora release download <version>--package, -oDescarga el .zip de una versión.

Flujo de despliegue completo en primeros pasos y procesos y paquetes.

Variables de entorno (las inyecta el agente)

Sección titulada «Variables de entorno (las inyecta el agente)»

El robot las lee con os.environ.get(...). Nunca se le pasan los secretos del agente (p. ej. NORA_MACHINE_KEY).

VariableContiene
NORA_JOB_IDID del job que lanzó el robot (ausente en dev local).
NORA_API_URLURL base de la API (https://nora-api.valisoftconsulting.com/api/v1).
NORA_EXEC_TOKENToken de ejecución de corta vida, acotado a este job y sus assets/colas.
NORA_ASSETSJSON con los assets precargados del proceso (get_asset los sirve sin red).
NORA_INPUTJSON con los argumentos de entrada del job (get_input/get_inputs los leen).
NORA_DISPLAY_WIDTH / NORA_DISPLAY_HEIGHTResolución configurada en la máquina (úsala antes que la del SO).
NORA_DISPLAY_DEPTH / NORA_DISPLAY_SCALEProfundidad de color (bits) y escala DPI (%).
NORA_SESSION_MODE"rdp" (sesión RDP loopback) o "console" (consola física).
NORA_UNATTENDED"1" si la máquina corre desatendida (auto-login), "0" si atendida.

Estados de un item de cola

EstadoSignificado
newListo para ser reclamado.
in_progressUn robot lo está procesando.
pending_reviewPausado, esperando aprobación humana.
completedProcesado con éxito (lleva result).
failedFalló o fue rechazado (reintenta si quedan reintentos).
dead_letterSuperó max_retries; ya no se reintenta solo.
stateDiagram-v2
    [*] --> new
    new --> in_progress
    in_progress --> completed
    in_progress --> pending_review
    in_progress --> failed
    pending_review --> new : aprobado
    pending_review --> failed : rechazado
    failed --> dead_letter : sin reintentos
    failed --> new : reintento

Prioridad de items: 1 = baja · 3 = normal (por defecto) · 5 = urgente.

Niveles de log: info · warning · error (recomendados; el SDK los normaliza a mayúsculas).

Tipos de asset: text · credential (usuario+valor) · secret · vault (bóveda externa) · integer · number · bool (el SDK devuelve el value ya tipado).

Tipos de trigger: webhook · queue (item nuevo → arranca job) · file_watcher · email_watcher.

Excepción de cola: system (transitoria, reintenta) · business (dato inválido, terminal).

Estados de job: pending · assigned · running · completed · failed · cancelled.

API pública (X-API-Key) — operaciones más usadas

Sección titulada «API pública (X-API-Key) — operaciones más usadas»

Base: https://nora-api.valisoftconsulting.com/api/v1. Respuestas envueltas en {"success": true, "data": ...}. Cada key declara scopes (recurso:acción).

AcciónEndpointScopecurl
Disparar un jobPOST /jobs/triggerjobs:writecurl -X POST .../jobs/trigger -H "X-API-Key: nora_ak_…" -d '{"process_id":"…"}'
Consultar un jobGET /jobs/{id}jobs:readcurl .../jobs/<id> -H "X-API-Key: nora_ak_…"
Detener un jobPOST /jobs/{id}/stopjobs:stopcurl -X POST .../jobs/<id>/stop -H "X-API-Key: nora_ak_…"
Listar procesos (descubrir process_id)GET /processes/listprocesses:readcurl .../processes/list -H "X-API-Key: nora_ak_…"
Listar máquinasGET /machines/listmachines:readcurl .../machines/list -H "X-API-Key: nora_ak_…"
Cargar items en lotePOST /queues/by-name/{name}/items/bulkqueues:writecurl -X POST .../queues/by-name/<cola>/items/bulk -H "X-API-Key: nora_ak_…" -d @items.json
Encolar un itemPOST /queues/by-name/{name}/itemsqueues:writecurl -X POST .../queues/by-name/<cola>/items -H "X-API-Key: nora_ak_…" -d '{"data":{…}}'
Listar items de una colaGET /queues/by-name/{name}/itemsqueues:readcurl .../queues/by-name/<cola>/items -H "X-API-Key: nora_ak_…"
Leer un assetGET /assets/by-name/{name}?environment=productionassets:readcurl ".../assets/by-name/<nombre>?environment=production" -H "X-API-Key: nora_ak_…"
Webhook por procesoPOST /webhooks/trigger/{process_id}— (cualquier key válida; feature webhooks)curl -X POST .../webhooks/trigger/<id> -H "X-API-Key: nora_ak_…" -d '{…}'

Programaciones (cron) y administración de triggers se gestionan con tu sesión del dashboard (no X-API-Key); solo el webhook entrante por token es público. Ver autenticación y scopes, disparar jobs, colas vía API y webhooks.