Agentes

Importar y exportar un agente

El formato de archivo aidoo-agent/v1: qué contiene, qué deja fuera, un ejemplo completo y la referencia de cada campo para escribir o adaptar un agente a mano.

10 min de lecturaActualizado el 16 de septiembre de 2026

Un agente Aidoo se describe por completo en un archivo JSON. Puedes exportarlo desde su ficha, releerlo, modificarlo en un editor de texto, versionarlo con tu código o entregárselo a un compañero, y luego importarlo en otro espacio de trabajo. El archivo sigue el formato aidoo-agent/v1.

Tres usos habituales:

  • Duplicar entre espacios: un agente ajustado en un primer Odoo se reinstala en un minuto para otro cliente u otra empresa.
  • Conservar un historial: un archivo por agente en un repositorio Git, y cada cambio de misión o de regla se convierte en una revisión legible.
  • Escribir un agente fuera de la interfaz: un integrador, un script o un asistente de IA puede producir el archivo; Aidoo lo valida al importar y lo muestra en el asistente de creación antes de guardar nada.

Exportar

Abre la ficha del agente y pulsa el botón JSON (icono de descarga) en la cabecera. El navegador descarga agent-<id>.json. La exportación está reservada a propietarios y administradores del espacio.

Importar

En Agentes > Nuevo agente, elige Importar un archivo JSON (aidoo-agent/v1). Aidoo comprueba el archivo y abre el asistente de creación ya rellenado. En ese momento no se guarda nada: designas la identidad Odoo, revisas cada paso, y el agente se crea como borrador igual que cualquier otro. Un archivo inválido se rechaza indicando el campo en cuestión.

El archivo

{
  "schema": "aidoo-agent/v1",
  "exportedAt": "2026-09-16T10:00:00.000Z",
  "source": { "agentId": "64a1b2c3d4e5f6789012345a", "workspace": "ACME" },
  "agent": { "...": "la configuración, detallada más abajo" }
}
ClaveFunción
schemaObligatoria, siempre "aidoo-agent/v1". Es lo que identifica el formato.
exportedAtFecha ISO 8601 de la exportación. Informativa, ignorada al importar.
sourceAgente y espacio de origen. Informativo, ignorado al importar.
agentLa configuración completa, descrita en la referencia de más abajo.

Un archivo escrito a mano solo necesita schema y agent.

Lo que la exportación nunca contiene

El archivo es una configuración portable, no una caja fuerte. No contiene:

  • ninguna identidad Odoo: al importar, vuelves a elegir el miembro cuyos derechos usa el agente;
  • ninguna clave API, token ni credencial de conexión;
  • ninguna competencia ni fuente de conocimiento: pertenecen al espacio; vuelve a adjuntarlas tras la importación;
  • ningún estado de ejecución: historial de misión, observaciones del modo aprendizaje, contadores de errores, cursores de eventos.

Dos campos merecen un vistazo antes de compartir un archivo: notifications.email.recipients (direcciones de correo) y assignedOdooLogins (identificadores Odoo de los usuarios que ven el agente en el widget). Vacíalos si el archivo cambia de empresa. Los collaborators son identificadores de agentes del espacio de origen: al importar en otro espacio, los que no existen se ignoran sin más.

Ejemplo completo

El agente «Seguimiento de facturas vencidas» de la galería, tal como se exporta:

{
  "schema": "aidoo-agent/v1",
  "agent": {
    "name": "Seguimiento de facturas vencidas",
    "avatar": { "seed": "finance-relance-impayes" },
    "mode": "scheduled",
    "instructions": "Cada mañana, lista las facturas de cliente (account.move, move_type='out_invoice') validadas, no pagadas y con fecha de vencimiento superada. Para cada una, añade una nota en el chatter resumiendo el retraso (días, importe) y planifica una actividad de seguimiento para el comercial responsable. Termina con un resumen: número de facturas vencidas, importe total, los 5 clientes más afectados.",
    "style": { "preset": "descriptive" },
    "model": { "provider": "auto", "modelId": "auto" },
    "environment": "production",
    "timezone": "Europe/Madrid",
    "trigger": { "cron": "0 8 * * 1-5" },
    "permissions": {
      "workflowsOnly": false,
      "webAccess": false,
      "requireApproval": false,
      "email": false,
      "emailMode": "propose",
      "document": false,
      "rules": [
        { "scope": { "groupKey": "facturation" }, "operations": ["query", "read"] },
        { "scope": { "models": ["mail.activity"] }, "operations": ["query", "read", "create"] },
        {
          "scope": { "models": ["account.move"] },
          "operations": ["query", "read", "write"],
          "valueConditions": [{ "field": "move_type", "operator": "=", "value": "out_invoice" }]
        }
      ]
    },
    "limits": { "timeoutSecondsPerRun": 300, "maxAutoEmailsPerRun": 10 },
    "autoPause": { "enabled": true, "maxConsecutiveErrors": 3 },
    "activeHours": { "enabled": false, "days": [1, 2, 3, 4, 5], "start": "08:00", "end": "18:00" },
    "notifications": {
      "email": { "enabled": false, "recipients": [], "frequency": "onlyOnError" },
      "odooChatter": { "enabled": false },
      "odooDiscuss": { "enabled": false }
    },
    "assignedOdooLogins": [],
    "commands": [
      {
        "id": "seguimiento-cliente",
        "label": "Reclamar a un cliente",
        "prompt": "Reclama todas las facturas vencidas de este cliente y resume lo que has hecho.",
        "variables": [{ "name": "Cliente", "required": true }]
      }
    ]
  }
}

Referencia de campos

Los valores marcados «por defecto» pueden omitirse: Aidoo los completa al importar.

Identidad y misión

CampoTipoDescripción
nametexto, de 1 a 80 caracteresNombre mostrado.
avatar.seedtexto, de 1 a 64 caracteresSemilla del avatar generado. Por defecto: aleatoria.
modescheduled, event o conversationalPlanificado, disparado por un evento Odoo, o solo bajo demanda en el chat.
instructionstexto, de 1 a 20 000 caracteresLa misión. Ver Escribir una buena misión.
style.presetdescriptive, concise, human, formal, technicalEstilo de los informes. Por defecto: descriptive.
style.humanTonewarm, direct, enthusiastic, casualMatiz del estilo human.
style.languagefr, en, es, de, pt, ar, nl, fiIdioma de los informes. Por defecto: idioma de la cuenta.

Modelo y entorno

CampoTipoDescripción
model.providerauto, anthropic, openai, google, moonshot, deepseek, nvidiaProveedor. auto deja que Aidoo elija un modelo eco actualizado; es la opción recomendada y la más portable.
model.modelIdtextoIdentificador del modelo en el proveedor; auto con el proveedor auto. Un modelo ausente del catálogo o no cubierto por el plan se señala en la activación.
environmentproduction o stagingConexión Odoo utilizada. Por defecto: production.
timezonezona horaria IANAZona de las planificaciones y franjas horarias. Por defecto: Europe/Paris.

Disparador (trigger)

CampoTipoDescripción
cronexpresión cron, 5 camposPlanificación principal (modo scheduled). Ejemplo: 0 8 * * 1-5, de lunes a viernes a las 8.
extraCronslista, 4 como máximoFranjas adicionales (5 franjas en total).
event.modelmodelo OdooModelo vigilado (modo event), por ejemplo crm.lead.
event.oncreate, update o dateReaccionar a la creación, a la modificación o a la proximidad de una fecha.
event.conditionslista de tripletas [campo, operador, valor]Filtro en formato dominio Odoo, por ejemplo ["stage_id", "=", 3].
event.pointslista, de 1 a 3 entradasPara on: "date": { "dateField": "date_deadline", "offsetMinutes": -1440, "label": "D-1" }. Desfase entre -10080 y 10080 minutos (una semana).

Permisos (permissions)

CampoTipoDescripción
workflowsOnlybooleanoEl agente solo puede ejecutar los workflows listados. Por defecto: false.
allowedWorkflowIdslistaWorkflows autorizados cuando workflowsOnly es verdadero. Identificadores propios del espacio.
webAccessbooleanoBúsqueda y lectura de páginas web. Por defecto: false.
requireApprovalbooleanoCada escritura espera tu validación. Por defecto: false.
emailbooleanoPuede proponer correos Odoo. Por defecto: false.
emailModepropose o autoauto envía sin validación, dentro del límite limits.maxAutoEmailsPerRun. Por defecto: propose.
documentbooleanoLectura de adjuntos (PDF, imágenes) con un modelo de visión. Por defecto: false.
ruleslistaReglas de acceso, ver más abajo.
learning.activebooleanoModo aprendizaje. true abre una ventana de 48 horas al crear. Ver Reglas y permisos.
collaboratorslista, 5 como máximoIdentificadores de agentes a los que este puede preguntar o delegar.
mcpAppslista, 5 como máximoApps externas: { "appSlug": "slack", "source": "composio", "enabledTools": [...], "allowWrites": false }. Ver Integraciones.

Salvo en modo workflowsOnly, un agente necesita al menos una regla, una app externa, el acceso web o el modo aprendizaje.

Cada regla:

CampoTipoDescripción
scope.groupKeyclave de grupoUn grupo funcional entero (facturation, ventes, crm, stock...).
scope.modelslista de modelos OdooO una lista explícita. Uno de los dos es obligatorio.
operationsquery, read, create, write, workflow, execute, report, printOperaciones permitidas. La eliminación no existe: un agente nunca borra.
valueConditionslistaCondiciones sobre los valores: { "field": "amount_total", "operator": "<", "value": 5000 }. Operadores: =, !=, >, >=, <, <=, in, not in, ilike.

Límites y pausa automática

CampoTipoDescripción
limits.maxToolCallsPerRunentero, 1 como mínimoNúmero máximo de acciones por ejecución.
limits.maxTokensPerRunentero, de 1 000 a 4 000 000Presupuesto de tokens por ejecución.
limits.timeoutSecondsPerRunentero, de 30 a 2 000Duración máxima de una ejecución. Por defecto: 300.
limits.monthlyCreditBudgetentero positivoTope de créditos por mes natural.
limits.maxAutoEmailsPerRunentero, de 1 a 100Correos enviados automáticamente por ejecución. Por defecto: 10.
autoPause.enabledbooleanoPausa automática tras errores consecutivos. Por defecto: true.
autoPause.maxConsecutiveErrorsentero, de 1 a 20Umbral de pausa. Por defecto: 3.
autoPause.maxWritesPerRunentero, 1 como mínimoSuperado, la ejecución se detiene y el agente se pausa.

Franjas horarias, notificaciones, visibilidad, comandos

CampoTipoDescripción
activeHours.enabledbooleanoRestringir las ejecuciones a una franja. Por defecto: false.
activeHours.dayslista de 0 (domingo) a 6Por defecto: [1, 2, 3, 4, 5].
activeHours.start, activeHours.endHH:MMPor defecto: 08:00 y 18:00.
notifications.email.enabledbooleanoInforme por correo. Por defecto: false.
notifications.email.recipientslista de direccionesDestinatarios.
notifications.email.frequencyeveryRun, onlyOnError, dailyDigestPor defecto: onlyOnError.
notifications.odooChatter.enabledbooleanoNota en el chatter de los registros tratados.
notifications.odooDiscuss.enabledbooleanoMensaje en Discuss.
assignedOdooLoginslista, 200 como máximoUsuarios Odoo que ven el agente en el widget. Vacía: nadie en particular.
commandslista, 6 como máximoBotones de comando rápido del chat: id, label (40 caracteres), prompt (2 000 caracteres), variables (3 como máximo, { "name", "required" }).

Compatibilidad

  • Los campos desconocidos se ignoran al importar: un archivo producido por una versión más reciente de Aidoo se importa, sin los ajustes que esa versión añadió.
  • Los campos ausentes toman su valor por defecto.
  • Un archivo cuyo schema no sea aidoo-agent/v1 se rechaza. Solo se introducirá un nuevo número de versión para un cambio incompatible, con una pasarela desde los archivos v1.
  • La exportación pasa por la misma validación que la importación: un archivo exportado siempre se vuelve a importar.

Siguiente paso