odoo-manager
This skill manages Odoo via XML-RPC and supports CRUD and model introspection across configurable instances and databases. It requires ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD (or ODOO_API_KEY) and makes network calls to {{resolved_url}}/xmlrpc/2/common and {{resolved_url}}/xmlrpc/2/object.
Odoo Manager - OpenClaw Skill
Un skill OpenClaw pour interagir avec Odoo via son API externe XML-RPC :
connexion, sélection d’instance/base, et opérations génériques sur n’importe quel modèle (avec des exemples prêts à l’emploi pour res.partner).
🚀 Installation & Configuration
1. Variables d’Environnement Requises
Configure au minimum :
ODOO_URL=https://your-odoo-instance.odoo.com
ODOO_DB=your_database_name
ODOO_USERNAME=your_login@example.com
ODOO_PASSWORD=your_password_or_api_key
Optionnel :
# À utiliser de préférence à la place de ODOO_PASSWORD
ODOO_API_KEY=your_api_key_here
L’API externe Odoo est décrite ici :
https://www.odoo.com/documentation/18.0/fr/developer/reference/external_api.html
2. Mot de Passe vs Clé API
Deux façons de s’authentifier :
- Mot de passe classique Odoo (
ODOO_PASSWORD) - Clé API (
ODOO_API_KEY) utilisée exactement comme un mot de passe
Pour créer une clé API :
- Connecte-toi à Odoo avec ton compte.
- Va dans Préférences / Mon profil.
- Onglet Sécurité du compte.
- Clique sur Nouvelle clé API, donne une description claire, puis copie la clé.
- Place cette clé dans
ODOO_API_KEY(ouuser_api_key/temporary_api_keycôté contexte).
La clé API donne le même niveau d’accès que ton utilisateur. Protége-la comme un mot de passe.
🧠 Résolution du Contexte (URL, DB, Utilisateur)
Le skill applique une logique de résolution hiérarchique pour savoir quelle instance et quelle base utiliser.
1. URL (instance Odoo)
Ordre de priorité :
temporary_url(pour une seule opération)user_url(pour toute la session)ODOO_URL(valeur par défaut, environnement)
2. Base de Données (db)
Ordre de priorité :
temporary_dbuser_dbODOO_DB
3. Identifiant & Secret
- Username :
temporary_username→user_username→ODOO_USERNAME - Secret (mot de passe ou clé API) :
temporary_api_key/temporary_password→
user_api_key/user_password→
ODOO_API_KEY(si présent) sinonODOO_PASSWORD
En pratique, le skill travaille toujours avec :
resolved_urlresolved_dbresolved_usernameresolved_secret(mot de passe ou clé API)
📖 Démarrage Rapide
Les exemples ci‑dessous montrent l’intention utilisateur (en français) et le type d’appels XML‑RPC qui seront effectués.
Exemple 1 : Vérifier la Connexion
User: "Vérifie la connexion à Odoo"
Flux :
-
Résolution du contexte (
resolved_url,resolved_db,resolved_username,resolved_secret). -
Appel de
version()sur{{resolved_url}}/xmlrpc/2/common. -
Essai d’authentification :
uid = common.authenticate(resolved_db, resolved_username, resolved_secret, {}) -
Retour à l’utilisateur : version du serveur et UID obtenu (ou message d’erreur).
Exemple 2 : Lister les Sociétés (res.partner)
User: "Liste toutes les sociétés avec leur pays"
Flux :
-
Authentification via
common.authenticate. -
Appel générique ORM :
companies = models.execute_kw( resolved_db, uid, resolved_secret, "res.partner", "search_read", [[["is_company", "=", True]]], {"fields": ["name", "country_id", "comment"], "limit": 80} ) -
Le skill formate et affiche les résultats (nom, pays, commentaire).
Exemple 3 : Créer un Partenaire
User: "Crée un partenaire société nommé 'OpenClaw SARL'"
Flux :
partner_id = models.execute_kw(
resolved_db, uid, resolved_secret,
"res.partner", "create",
[{
"name": "OpenClaw SARL",
"is_company": True
}]
)
Le skill peut ensuite relire le partenaire créé avec read pour l’afficher.
Exemple 4 : Afficher les Champs d’un Modèle
User: "Montre les champs du modèle res.partner"
Flux :
fields = models.execute_kw(
resolved_db, uid, resolved_secret,
"res.partner", "fields_get",
[],
{"attributes": ["string", "help", "type"]}
)
Le skill résume les champs (nom technique, label, type, aide).
🔄 Multi‑Instances & Multi‑Bases
Comme pour le skill MantisBT Manager, Odoo Manager permet de gérer plusieurs instances Odoo et plusieurs bases en parallèle, via le contexte.
Contexte Temporaire (une seule opération)
User: "Pour cette requête, utilise l’instance de staging"
Interprétation possible :
Set temporary_url = "https://staging.mycompany.odoo.com"
Set temporary_db = "staging_db"
→ Exécuter l’opération demandée
→ Clear temporary_url, temporary_db
Utile pour :
- Comparer une donnée entre production et staging
- Tester une modification sur une base de test
Contexte de Session
User: "Travaille sur l’instance du client ABC avec la base clientabc_prod"
Interprétation :
Set user_url = "https://client-abc.odoo.com"
Set user_db = "clientabc_prod"
Set user_username = "integration_bot"
Set user_api_key = "clé_api_client_abc"
Toutes les opérations suivantes utilisent ce contexte, jusqu’à réinitialisation.
Retour aux Valeurs par Défaut
User: "Reviens à l’instance Odoo par défaut"
→ Clear user_url, user_db, user_username, user_password, user_api_key
→ Utilisation de ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD / ODOO_API_KEY
🎯 Cas d’Usage Typiques
1. Gestion des Contacts (res.partner)
- Lister les sociétés / contacts.
- Créer un partenaire (client, fournisseur, contact interne).
- Mettre à jour les coordonnées, emails, téléphones.
- Supprimer des partenaires de test.
2. Inspection & Découverte du Modèle
- Lister les modèles disponibles (
ir.model). - Lister les champs d’un modèle (
fields_get,ir.model.fields). - Préparer des intégrations en comprenant la structure des données.
3. Travail sur Plusieurs Bases
- Comparer un contact ou une commande entre deux bases.
- Effectuer des vérifications ponctuelles sur une base de test.
- Gérer plusieurs clients ayant chacun leur propre base Odoo.
4. Automatisations Génériques
- Exécuter
search/search_readsur n’importe quel modèle métier (crm.lead,project.task,sale.order, etc.). - Mettre à jour en masse des enregistrements (par lots raisonnables).
⚠️ Gestion des Erreurs & Dépannage
Problèmes Courants
- Échec de connexion : mauvaise URL (
ODOO_URL) ou serveur injoignable. - Échec d’authentification : mauvais
db, login, mot de passe ou clé API. - Droits insuffisants : l’utilisateur n’a pas accès au modèle ou à l’action.
- Erreurs de validation : champs obligatoires manquants, contraintes Odoo.
Recommandations
- Vérifier que tu utilises la bonne base (
ODOO_DBou overrides contextuels). - Pour Odoo Online, t’assurer que l’utilisateur possède bien un mot de passe local ou une clé API (voir la doc Odoo).
- En cas d’erreur sur un modèle/champ, afficher les détails de l’exception pour savoir quel champ ou quelle contrainte pose problème.
🔒 Sécurité & Bonnes Pratiques
- Ne jamais commiter
ODOO_PASSWORDniODOO_API_KEYdans un dépôt. - Utiliser exclusivement des variables d’environnement ou un coffre-fort de secrets.
- Donner au compte utilisé les droits minimum nécessaires (principe du moindre privilège).
- Changer régulièrement les mots de passe / clés API en production.
L’accès à l’API externe Odoo est réservé aux offres Custom.
Il n’est pas disponible sur les offres One App Free ou Standard.
📚 Référence Complète du Skill
La spécification détaillée du skill (résolution de contexte, opérations génériques
ORM, exemples res.partner, introspection, etc.) se trouve dans :
Odoo Manager/SKILL.md
Consulte ce fichier pour voir tous les détails des appels execute_kw et
des modèles pris en charge de manière générique.