Webinaire🇫🇷
Agents IA dans Odoo : le guide complet, avec les notes de frais en cas pratiquele 24 septembre à 15:00
Agents

Importer et exporter un agent

Le format de fichier aidoo-agent/v1 : ce qu'il contient, ce qu'il laisse de côté, un exemple complet et la référence de chaque champ pour écrire ou adapter un agent à la main.

10 min de lectureMis à jour le 16 septembre 2026

Un agent Aidoo se décrit entièrement dans un fichier JSON. Vous pouvez l'exporter depuis sa fiche, le relire, le modifier dans un éditeur de texte, le versionner avec votre code ou le confier à un collègue, puis l'importer dans un autre espace de travail. Le fichier suit le format aidoo-agent/v1.

Trois usages courants :

  • Dupliquer entre espaces : un agent mis au point sur un premier Odoo se réinstalle en une minute chez un autre client ou sur une autre société.
  • Garder un historique : un fichier par agent dans un dépôt Git, et chaque changement de mission ou de règle devient une révision lisible.
  • Écrire un agent hors de l'interface : un intégrateur, un script ou un assistant d'IA peut produire le fichier ; Aidoo le valide à l'import et vous le montre dans l'assistant de création avant toute sauvegarde.

Exporter

Ouvrez la fiche de l'agent et cliquez sur le bouton JSON (icône de téléchargement) dans l'en-tête. Le navigateur télécharge agent-<identifiant>.json. L'export est réservé aux propriétaires et administrateurs de l'espace.

Importer

Dans Agents > Nouvel agent, choisissez Importer un fichier JSON (aidoo-agent/v1). Aidoo vérifie le fichier, puis ouvre l'assistant de création prérempli. Rien n'est enregistré à ce stade : vous désignez l'identité Odoo, relisez chaque étape, et l'agent est créé en brouillon comme n'importe quel autre. Un fichier invalide est refusé avec le champ en cause.

Le fichier

{
  "schema": "aidoo-agent/v1",
  "exportedAt": "2026-09-16T10:00:00.000Z",
  "source": { "agentId": "64a1b2c3d4e5f6789012345a", "workspace": "ACME" },
  "agent": { "...": "la configuration, détaillée ci-dessous" }
}
CléRôle
schemaObligatoire, toujours "aidoo-agent/v1". C'est ce qui identifie le format.
exportedAtDate ISO 8601 de l'export. Informative, ignorée à l'import.
sourceAgent et espace d'origine. Informatif, ignoré à l'import.
agentLa configuration complète, décrite dans la référence plus bas.

Un fichier écrit à la main n'a besoin que de schema et agent.

Ce que l'export ne contient jamais

Le fichier est une configuration portable, pas un coffre. Il ne contient :

  • ni identité Odoo : à l'import, vous choisissez à nouveau le membre dont l'agent utilise les droits ;
  • ni clé API, ni jeton, ni identifiant de connexion ;
  • ni compétences ni sources de connaissance : elles appartiennent à l'espace ; réattachez-les après l'import ;
  • ni état d'exécution : historique de mission, observations du mode apprentissage, compteurs d'erreurs, curseurs d'événements.

Deux champs méritent un regard avant de partager un fichier : notifications.email.recipients (adresses e-mail) et assignedOdooLogins (identifiants Odoo des utilisateurs qui voient l'agent dans le widget). Videz-les si le fichier change de société. Les collaborators sont des identifiants d'agents de l'espace d'origine : à l'import dans un autre espace, ceux qui n'existent pas sont simplement ignorés.

Exemple complet

L'agent « Relance factures impayées » de la galerie, tel qu'il s'exporte :

{
  "schema": "aidoo-agent/v1",
  "agent": {
    "name": "Relance factures impayées",
    "avatar": { "seed": "finance-relance-impayes" },
    "mode": "scheduled",
    "instructions": "Chaque matin, liste les factures clients (account.move, move_type='out_invoice') validées, non payées et dont l'échéance est dépassée. Pour chacune, ajoute une note dans le chatter récapitulant le retard (jours, montant) et planifie une activité de relance pour le vendeur responsable. Termine par un résumé : nombre de factures en retard, montant total, top 5 des clients concernés.",
    "style": { "preset": "descriptive" },
    "model": { "provider": "auto", "modelId": "auto" },
    "environment": "production",
    "timezone": "Europe/Paris",
    "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": "relance-client",
        "label": "Relancer un client",
        "prompt": "Relance toutes les factures en retard de ce client et résume ce que tu as fait.",
        "variables": [{ "name": "Client", "required": true }]
      }
    ]
  }
}

Référence des champs

Les valeurs marquées « défaut » peuvent être omises : Aidoo les complète à l'import.

Identité et mission

ChampTypeDescription
nametexte, 1 à 80 caractèresNom affiché.
avatar.seedtexte, 1 à 64 caractèresGraine de l'avatar généré. Défaut : aléatoire.
modescheduled, event ou conversationalPlanifié, déclenché par un événement Odoo, ou uniquement à la demande dans le chat.
instructionstexte, 1 à 20 000 caractèresLa mission. Voir Écrire une bonne mission.
style.presetdescriptive, concise, human, formal, technicalStyle des restitutions. Défaut : descriptive.
style.humanTonewarm, direct, enthusiastic, casualNuance du style human.
style.languagefr, en, es, de, pt, ar, nl, fiLangue des restitutions. Défaut : langue du compte.

Modèle et environnement

ChampTypeDescription
model.providerauto, anthropic, openai, google, moonshot, deepseek, nvidiaFournisseur. auto laisse Aidoo choisir un modèle éco à jour ; c'est le choix recommandé et le plus portable.
model.modelIdtexteIdentifiant du modèle chez le fournisseur ; auto avec le fournisseur auto. Un modèle absent du catalogue ou non couvert par le palier est signalé à l'activation.
environmentproduction ou stagingConnexion Odoo utilisée. Défaut : production.
timezonefuseau IANAFuseau des plannings et des plages horaires. Défaut : Europe/Paris.

Déclencheur (trigger)

ChampTypeDescription
cronexpression cron, 5 champsPlanning principal (mode scheduled). Exemple : 0 8 * * 1-5, du lundi au vendredi à 8 h.
extraCronsliste, 4 au plusCréneaux supplémentaires (5 créneaux au total).
event.modelmodèle OdooModèle surveillé (mode event), par exemple crm.lead.
event.oncreate, update ou dateRéagir à la création, à la modification, ou à l'approche d'une date.
event.conditionsliste de triplets [champ, opérateur, valeur]Filtre au format domaine Odoo, par exemple ["stage_id", "=", 3].
event.pointsliste, 1 à 3 entréesPour on: "date" : { "dateField": "date_deadline", "offsetMinutes": -1440, "label": "J-1" }. Décalage entre -10080 et 10080 minutes (une semaine).

Permissions (permissions)

ChampTypeDescription
workflowsOnlybooléenL'agent ne peut qu'exécuter les workflows listés. Défaut : false.
allowedWorkflowIdslisteWorkflows autorisés quand workflowsOnly est vrai. Identifiants propres à l'espace.
webAccessbooléenRecherche et lecture de pages web. Défaut : false.
requireApprovalbooléenChaque écriture attend votre validation. Défaut : false.
emailbooléenPeut proposer des e-mails Odoo. Défaut : false.
emailModepropose ou autoauto envoie sans validation, dans la limite de limits.maxAutoEmailsPerRun. Défaut : propose.
documentbooléenLecture des pièces jointes (PDF, images) par un modèle de vision. Défaut : false.
ruleslisteRègles d'accès, voir ci-dessous.
learning.activebooléenMode apprentissage. true ouvre une fenêtre de 48 heures à la création. Voir Règles et permissions.
collaboratorsliste, 5 au plusIdentifiants d'agents que celui-ci peut interroger ou solliciter.
mcpAppsliste, 5 au plusApps externes : { "appSlug": "slack", "source": "composio", "enabledTools": [...], "allowWrites": false }. Voir Intégrations.

Sauf en mode workflowsOnly, un agent doit avoir au moins une règle, une app externe, l'accès web ou le mode apprentissage.

Chaque règle :

ChampTypeDescription
scope.groupKeyclé de groupeUn groupe fonctionnel entier (facturation, ventes, crm, stock...).
scope.modelsliste de modèles OdooOu une liste explicite. L'un des deux est obligatoire.
operationsquery, read, create, write, workflow, execute, report, printOpérations permises. La suppression n'existe pas : un agent ne supprime jamais.
valueConditionslisteConditions sur les valeurs : { "field": "amount_total", "operator": "<", "value": 5000 }. Opérateurs : =, !=, >, >=, <, <=, in, not in, ilike.

Limites et pause automatique

ChampTypeDescription
limits.maxToolCallsPerRunentier, 1 au moinsNombre maximal d'actions par exécution.
limits.maxTokensPerRunentier, 1 000 à 4 000 000Budget de tokens par exécution.
limits.timeoutSecondsPerRunentier, 30 à 2 000Durée maximale d'une exécution. Défaut : 300.
limits.monthlyCreditBudgetentier positifPlafond de crédits par mois calendaire.
limits.maxAutoEmailsPerRunentier, 1 à 100E-mails envoyés automatiquement par exécution. Défaut : 10.
autoPause.enabledbooléenPause automatique après des erreurs consécutives. Défaut : true.
autoPause.maxConsecutiveErrorsentier, 1 à 20Seuil de mise en pause. Défaut : 3.
autoPause.maxWritesPerRunentier, 1 au moinsAu-delà, l'exécution s'arrête et l'agent se met en pause.

Plages horaires, notifications, visibilité, commandes

ChampTypeDescription
activeHours.enabledbooléenRestreindre les exécutions à une plage. Défaut : false.
activeHours.daysliste de 0 (dimanche) à 6Défaut : [1, 2, 3, 4, 5].
activeHours.start, activeHours.endHH:MMDéfaut : 08:00 et 18:00.
notifications.email.enabledbooléenRapport par e-mail. Défaut : false.
notifications.email.recipientsliste d'adressesDestinataires.
notifications.email.frequencyeveryRun, onlyOnError, dailyDigestDéfaut : onlyOnError.
notifications.odooChatter.enabledbooléenNote dans le chatter des enregistrements traités.
notifications.odooDiscuss.enabledbooléenMessage dans Discuss.
assignedOdooLoginsliste, 200 au plusUtilisateurs Odoo qui voient l'agent dans le widget. Vide : personne en particulier.
commandsliste, 6 au plusBoutons de commande rapide du chat : id, label (40 caractères), prompt (2 000 caractères), variables (3 au plus, { "name", "required" }).

Compatibilité

  • Les champs inconnus sont ignorés à l'import : un fichier produit par une version plus récente d'Aidoo s'importe, au prix des réglages qu'elle a ajoutés.
  • Les champs absents prennent leur valeur par défaut.
  • Un fichier dont schema n'est pas aidoo-agent/v1 est refusé. Un nouveau numéro de version ne sera introduit que pour un changement incompatible, avec une passerelle depuis les fichiers v1.
  • L'export passe par la même validation que l'import : un fichier exporté se réimporte toujours.

Étape suivante