Telemetría Volkom Mesh — Guía para usuarios
Esta guía explica, en lenguaje claro, cómo un agente le manda telemetría a Volkom Mesh. Hay dos canales independientes:
- Ejecución (lo que el agente hizo): arranque, pasos, fin, errores, tiempos.
- Negocio (los KPIs del cliente): plata, cantidades, porcentajes, tiempos que importan al negocio (ventas, facturas, clientes atendidos, etc.).
Los dos canales viven en la misma API y se guardan en una sola base de datos por tenant. Tanto el portal del cliente (volkommesh) como el panel de Volkom (adminvm) leen exactamente lo mismo de ahí.
Conceptos en 1 minuto#
| Concepto | Qué es |
|---|---|
| Tenant | El cliente (ej. shopflow). Tiene su propia base de datos aislada. |
| Agente | Un programa que hace una tarea (ej. sales-monitor). |
| Corrida (run) | Una ejecución del agente, identificada por un run_id único. |
| Evento | Cada cosa que pasa en una corrida: arrancó, hizo un paso, terminó. |
| KPI | Un número de negocio que el agente reporta (ventas, % de éxito…). |
| Token | La credencial (Bearer) con la que el agente se autentica. |
La regla de oro: una corrida es una secuencia de eventos que comparten el mismo
run_id. Empieza con un eventostarted, puede tener variosin_progress(los pasos), y cierra concompletedofailed.
Canal 1 — Telemetría de EJECUCIÓN#
Cuenta la historia de lo que hizo el agente. Cada evento puede llevar tantos detalles como quieras — desde algo mínimo hasta una narrativa rica paso a paso.
Las dimensiones de un evento#
Todas son opcionales salvo las básicas. Llená lo que tenga sentido para tu agente:
| Dimensión | Para qué sirve | Ejemplo |
|---|---|---|
message |
Descripción humana del paso | "Descargó el adjunto del correo" |
level |
Importancia/color | info, warning, error, success, debug |
category |
Agrupa los pasos por fase | "Correo", "Procesamiento", "Cierre" |
metrics |
Números medibles (graficables) | {"emails": 11, "filas": 1240} |
links |
Referencias externas | URL de un documento, una orden, un dashboard |
source |
Origen técnico | email_skills.py:474 |
seq |
Orden del paso dentro de la corrida | 1, 2, 3… |
Principio rector: el front es genérico. Muestra lo que mandes, sin código a medida. Si agregás un KPI o una categoría nueva, aparece sola — no hay que tocar la interfaz.
Cómo se ve una corrida típica#
▸ started (arranca la corrida)
· Buscó correos cat: Correo {emails: 11}
· Descargó adjunto cat: Correo
⚠ Reintento de parseo cat: Procesamiento level: warning
· Consolidó datos cat: Procesamiento {clientes: 15}
· Subió a Drive cat: Cierre link: https://drive…
■ completed (cierra OK)
Canal 2 — Telemetría de NEGOCIO (KPIs)#
Aparte de qué hizo, el agente puede reportar cuánto valió para el negocio. Esto alimenta el dashboard ejecutivo (tarjetas, tendencias, comparativas).
Un KPI se define con 4 cosas#
| Campo | Qué es | Ejemplo |
|---|---|---|
key |
Identificador interno | revenue |
label |
Nombre visible | "Facturación" |
unit |
Cómo se formatea | ver tabla abajo |
agg |
Cómo se totaliza en un período | ver tabla abajo |
Unidades disponibles (unit)#
| Unidad | Se muestra como | Ejemplo |
|---|---|---|
count |
número | 1.240 |
money:<ISO> |
moneda | money:USD → US$ 9.500 · money:ARS → $ 1.200.000 |
percent |
porcentaje | 3,4 % |
duration |
tiempo (el valor se da en segundos) | 2 h 15 min |
Agregaciones disponibles (agg) — cómo se suma en el período elegido#
| Agg | Qué hace | Usar para |
|---|---|---|
sum |
suma todo | ventas, facturas, unidades |
last |
toma el último valor | stock actual, MRR, % de ocupación |
avg |
promedio | tiempo de espera promedio |
max |
el máximo | pico de uso |
Por qué importa el
agg: si reportás "ventas = 100" en 30 corridas y la unidad essum, el período muestra 3.000. Si fueralast(ej. stock), mostraría solo el último: 100. Elegir mal elaggda números equivocados en el dashboard.
Las dos formas de mandar telemetría#
Forma A — Con el carcass (recomendado, agentes en Python)#
Si tu agente usa volkom-core, no tocás HTTP: heredás de BaseAgent y usás
métodos. El carcass arma los eventos, los manda y maneja el ciclo de la corrida.
from volkom_core import BaseAgent, AgentResult, KPI
class SalesMonitor(BaseAgent):
agent_name = "sales-monitor"
agent_version = "1.0.0"
description = "Monitorea ventas diarias."
# KPIs de negocio que este agente reporta:
business_kpis = [
KPI("orders", "Pedidos", "count", "sum"),
KPI("revenue", "Facturación", "money:USD", "sum"),
]
def run(self) -> AgentResult:
# --- Telemetría de EJECUCIÓN (pasos) ---
self.event("Conectó a la tienda", category="Ingesta")
self.event("Leyó pedidos", category="Ingesta", metrics={"pedidos": 42})
self.warn("3 pedidos sin dirección", category="Validación",
metrics={"incompletos": 3})
# --- Telemetría de NEGOCIO (KPIs) ---
self.kpi("orders", 42)
self.kpi("revenue", 9500)
return AgentResult(records_processed=42)
El started, el completed/failed, los tiempos y el run_id los pone el
carcass solo cuando corre el agente. Vos solo describís lo que pasa.
Métodos del carcass:
- self.event(message, level=, category=, metrics=, links=, source=) — un evento rico.
- self.step(msg) / self.info(msg) / self.warn(msg) / self.error(msg) — atajos por nivel.
- self.kpi(key, value) — reporta un KPI de negocio (debe estar declarado en business_kpis).
- self.emit_metric(key, value) — metadata libre en el evento de cierre (no es KPI graficable).
Forma B — HTTP directo (cualquier lenguaje)#
Si tu agente no es Python o querés controlar el HTTP, pegás a la API directamente. El detalle exacto de endpoints, headers y JSON está en la Referencia de la API (pensada para que la procese Claude Code o un dev).
En resumen, son 3 llamadas:
1. POST /api/v1/agents/register — declara el agente y sus KPIs (una vez).
2. POST /api/v1/telemetry — un evento de ejecución (uno por started/paso/cierre).
3. POST /api/v1/telemetry/business — los KPIs de una corrida.
Todas con el header Authorization: Bearer <token-del-agente>.
Errores comunes (y cómo evitarlos)#
- Todos los pasos comparten el
run_id. Si cada evento usa unrun_iddistinto, el portal los ve como corridas separadas y "se pierde" la narrativa. - Cerrá siempre la corrida con
completedofailed. Una corrida sin cierre queda figurando como "en curso" para siempre. - Declará los KPIs antes de usarlos (
business_kpis/register). Si mandás un KPI sin declarar, el valor entra pero el dashboard no sabe su unidad/agg. - Elegí bien el
agg.sumpara cosas que se acumulan,lastpara estados. - El nivel hace al color. Usá
warning/errorpara que los problemas se resalten en rojo/ámbar en la actividad.
¿Dónde veo la telemetría?#
- Portal del cliente (volkommesh): pantalla Actividad (corridas agrupadas, expandís y ves los pasos) + Dashboard de negocio (tarjetas con los KPIs).
- Panel de Volkom (adminvm): Runs por tenant (misma data, vista técnica)
- Audit Log (quién hizo qué en la plataforma).
Ambos leen la misma API y la misma base de datos. Lo que el agente manda una vez, se ve en los dos lados.