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.
12 min de lectureMis à jour le 10 octobre 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-<nom-de-l-agent>.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, choisissez les utilisateurs Odoo qui verront l'agent dans le widget, relisez chaque étape, puis Créer l'agent le crée et l'active, comme n'importe quel autre agent. Un fichier invalide est refusé avec le champ en cause.
Si le fichier ne précise pas permissions.learning (et que l'agent n'est pas en mode workflowsOnly), il démarre en mode apprentissage et les règles du fichier servent de règles de départ.
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 |
|---|---|
schema | Obligatoire, toujours "aidoo-agent/v1". C'est ce qui identifie le format. |
exportedAt | Date ISO 8601 de l'export. Informative, ignorée à l'import. |
source | Agent et espace d'origine. Informatif, ignoré à l'import. |
agent | La 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, ni fichiers du Drive : ils appartiennent à l'espace ; réattachez-les après l'import ;
- ni groupe d'agents : le groupe est propre à l'espace ; rangez l'agent dans un groupe après l'import ;
- ni connexion aux apps externes : le fichier garde le nom de chaque app et les outils retenus, pas le compte connecté ; connectez l'app dans Intégrations de l'espace de destination ;
- 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. Les allowedWorkflowIds désignent eux aussi des workflows de l'espace d'origine : resélectionnez-les à l'étape Permissions. Les chemins de drive.folders sont repris tels quels : vérifiez que ces dossiers existent dans le Drive de destination.
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,
"askUser": 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" }]
}
],
"learning": { "active": true }
},
"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 },
"questions": { "widget": true, "email": 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
| Champ | Type | Description |
|---|---|---|
name | texte, 1 à 80 caractères | Nom affiché. |
avatar.seed | texte, 1 à 64 caractères | Graine de l'avatar généré. Défaut : aléatoire. |
avatar.character | entier, 1 à 20 | Personnage illustré de l'agent. Absent : attribué automatiquement. |
mode | scheduled, event ou conversational | Planifié, déclenché par un événement Odoo, ou uniquement à la demande dans le chat. |
instructions | texte, 1 à 20 000 caractères | La mission. Voir Écrire une bonne mission. |
style.preset | descriptive, concise, human, formal, technical | Style des restitutions. Défaut : descriptive. |
style.humanTone | warm, direct, enthusiastic, casual | Nuance du style human. |
style.language | fr, en, es, de, pt, ar, nl, fi | Langue des restitutions. Défaut : langue du compte. |
Modèle et environnement
| Champ | Type | Description |
|---|---|---|
model.provider | auto, anthropic, openai, google, moonshot, deepseek, nvidia | Fournisseur. auto laisse Aidoo choisir un modèle éco à jour ; c'est le choix recommandé et le plus portable. |
model.modelId | texte | Identifiant 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. |
environment | production ou staging | Connexion Odoo utilisée. Défaut : production. |
timezone | fuseau IANA | Fuseau des plannings et des plages horaires. Défaut : Europe/Paris. |
Déclencheur (trigger)
| Champ | Type | Description |
|---|---|---|
cron | expression cron, 5 champs | Planning principal (mode scheduled). Exemple : 0 8 * * 1-5, du lundi au vendredi à 8 h. |
extraCrons | liste, 4 au plus | Créneaux supplémentaires (5 créneaux au total). |
event.model | modèle Odoo | Modèle surveillé (mode event), par exemple crm.lead. |
event.on | create, update ou date | Réagir à la création, à la modification, ou à l'approche d'une date. |
event.conditions | liste de triplets [champ, opérateur, valeur] | Filtre au format domaine Odoo, par exemple ["stage_id", "=", 3]. |
event.points | liste, 1 à 3 entrées | Pour on: "date" : { "dateField": "date_deadline", "offsetMinutes": -1440, "label": "J-1" }. Décalage entre -10080 et 10080 minutes (une semaine). |
Permissions (permissions)
| Champ | Type | Description |
|---|---|---|
workflowsOnly | booléen | L'agent ne peut qu'exécuter les workflows listés. Défaut : false. |
allowedWorkflowIds | liste | Workflows autorisés quand workflowsOnly est vrai. Identifiants propres à l'espace. |
webAccess | booléen | Recherche et lecture de pages web. Défaut : false. |
requireApproval | booléen | Chaque écriture attend votre validation. Défaut : false. |
email | booléen | Peut proposer des e-mails Odoo, à valider avant envoi. Défaut : false. |
emailMode | propose ou auto | auto envoie sans validation, dans la limite de limits.maxAutoEmailsPerRun. Défaut : propose. |
document | booléen | Lecture des pièces jointes (PDF, images) par un modèle de vision. Défaut : false. |
askUser | booléen | En exécution autonome, l'agent peut poser une question à un humain et reprendre avec sa réponse. Défaut : false. |
drive.enabled | booléen | Accès au Drive Aidoo : son dossier privé en écriture, le dossier shared en lecture. Défaut : false. |
drive.folders | liste, 10 au plus | Dossiers autorisés en plus : { "path": "compta/exports", "access": "read" } (read ou write). Chemins propres à l'espace. |
rules | liste | Règles d'accès, voir ci-dessous. |
learning.active | booléen | Mode apprentissage. true ouvre une fenêtre de 48 heures à la création. Voir Règles et permissions. |
collaborators | liste, 5 au plus | Identifiants d'agents que celui-ci peut interroger ou solliciter. |
mcpApps | liste, 5 au plus | Apps externes : { "appSlug": "slack", "source": "composio", "enabledTools": [...] }. source vaut composio (catalogue d'apps, défaut), custom (un de vos serveurs MCP) ou native (connecteur fourni par Aidoo). enabledTools (100 au plus) restreint l'agent à ces outils ; absent : tous les outils de l'app. Voir Intégrations. |
Sauf en mode workflowsOnly, un agent doit avoir au moins une règle, une app externe, l'accès web, l'accès au Drive ou le mode apprentissage.
Chaque règle :
| Champ | Type | Description |
|---|---|---|
scope.groupKey | clé de groupe | Un groupe fonctionnel entier (facturation, ventes, crm, stock...). |
scope.models | liste de modèles Odoo | Ou une liste explicite. L'un des deux est obligatoire. |
operations | query, read, create, write, workflow, execute, report, print | Opérations permises. La suppression n'existe pas : un agent ne supprime jamais. |
valueConditions | liste | Conditions sur les valeurs : { "field": "amount_total", "operator": "<", "value": 5000 }. Opérateurs : =, !=, >, >=, <, <=, in, not in, ilike. |
Limites et pause automatique
| Champ | Type | Description |
|---|---|---|
limits.maxToolCallsPerRun | entier, 1 au moins | Nombre maximal d'actions par exécution. Absent : illimité (défaut). |
limits.maxTokensPerRun | entier, 1 000 à 4 000 000 | Budget de tokens par exécution. Absent : l'équivalent de 100 crédits pour le modèle choisi, qui est aussi le minimum. |
limits.timeoutSecondsPerRun | entier, 30 à 4 500 | Durée maximale d'une exécution, en secondes. Défaut : 300. |
limits.monthlyCreditBudget | entier positif | Plafond de crédits par mois calendaire. |
limits.maxAutoEmailsPerRun | entier, 1 à 100 | E-mails envoyés automatiquement par exécution. Défaut : 10. |
autoPause.enabled | booléen | Pause automatique après des erreurs consécutives. Défaut : true. |
autoPause.maxConsecutiveErrors | entier, 1 à 20 | Seuil de mise en pause. Défaut : 3. |
autoPause.maxWritesPerRun | entier, 1 au moins | Au-delà, l'exécution s'arrête et l'agent se met en pause. Absent : illimité (défaut). |
Plages horaires, notifications, visibilité, commandes
| Champ | Type | Description |
|---|---|---|
activeHours.enabled | booléen | Restreindre les exécutions à une plage. Défaut : false. |
activeHours.days | liste de 0 (dimanche) à 6 | Défaut : [1, 2, 3, 4, 5]. |
activeHours.start, activeHours.end | HH:MM | Défaut : 08:00 et 18:00. |
notifications.email.enabled | booléen | Rapport par e-mail. Défaut : false. |
notifications.email.recipients | liste d'adresses | Destinataires. |
notifications.email.frequency | everyRun, onlyOnError, dailyDigest | Défaut : onlyOnError. |
notifications.odooChatter.enabled | booléen | Note dans le chatter des enregistrements traités. |
notifications.odooDiscuss.enabled | booléen | Message dans Discuss. |
notifications.questions.widget | booléen | Questions de l'agent affichées dans le widget Odoo des utilisateurs assignés. Défaut : true. |
notifications.questions.email | booléen | Questions envoyées par e-mail aux destinataires, avec un lien de réponse. Défaut : false. Le tableau de bord les affiche toujours. |
assignedOdooLogins | liste, 200 au plus | Utilisateurs Odoo qui voient l'agent dans le widget. Vide : l'agent n'apparaît dans le widget de personne. |
commands | liste, 6 au plus | Boutons 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
scheman'est pasaidoo-agent/v1est refusé. Un nouveau numéro de version ne sera introduit que pour un changement incompatible, avec une passerelle depuis les fichiersv1. - L'export passe par la même validation que l'import : un fichier exporté se réimporte toujours.
Étape suivante
- Créer un agent : les autres chemins de création
- Règles et permissions : construire des règles sûres