📦 Odoo Manager Bm — Odoo 管理器 Bm
v1.0.0通过官方的External XML-RPC API管理Odoo(联系人、任何业务对象和元数据)。支持在任何模型上使用execute进行通用的CRUD操作。
运行时依赖
安装命令
点击复制技能文档
Odoo 管理员技能 🔐 URL、数据库和凭证解析 URL 解析 Odoo 服务器 URL 优先级(从高到低): temporary_url —针对特定操作的一次性 URL user_url —用户定义的当前会话 URL ODOO_URL —环境默认 URL 这允许您: 在多个 Odoo 实例(生产、预发布、客户特定)之间切换 测试 demo 数据库 在不更改全局配置的情况下使用不同的客户环境 示例(概念): // 默认:使用环境中的 ODOO_URL {{resolved_url}}/xmlrpc/2/common // 为一次操作覆盖:temporary_url = "https://staging.mycompany.odoo.com" {{resolved_url}}/xmlrpc/2/common // 为会话覆盖:user_url = "https://client-xyz.odoo.com" {{resolved_url}}/xmlrpc/2/common 数据库解析 数据库名称(db)优先级: temporary_db user_db ODOO_DB 使用此功能: 在同一 Odoo 服务器上使用多个数据库 在测试和生产数据库之间切换 用户名和密钥解析 用户名优先级: temporary_username user_username ODOO_USERNAME 密钥(密码或 API 密钥)优先级: temporary_api_key 或 temporary_password user_api_key 或 user_password ODOO_API_KEY(如果设置)或 ODOO_PASSWORD 重要:Odoo API 密钥代替密码使用,具有通常的登录功能。将密码/API 密钥存储为真实密码;永远不要记录或暴露它们。 环境变量通过标准 OpenClaw 元数据处理:requires.env 声明所需变量(ODOO_URL、ODOO_DB、ODOO_USERNAME、ODOO_PASSWORD)。ODOO_API_KEY 是一个可选环境变量,当存在时代替密码使用;它不在元数据中列出,应该简单地在需要时在环境中设置。 解析值 在运行时,技能始终使用: {{resolved_url}} —最终 URL {{resolved_db}} —最终数据库名称 {{resolved_username}} —最终登录名 {{resolved_secret}} —实际用于身份验证的密码或 API 密钥 这些是使用上述优先规则计算得出的。 🔄 上下文管理 temporary_ 和 user_ 名称是技能逻辑在运行时使用的上下文变量,而不是 OpenClaw 元数据字段。OpenClaw 没有可选的上下文元数据键;上下文是根据以下描述在运行时动态解析的。 临时上下文(一次性使用) 用户示例: "Pour cette requête, utilise l’instance staging Odoo" "Utilise la base odoo_demo juste pour cette opération" "Connecte-toi avec cet utilisateur uniquement pour cette action" 行为: 设置 temporary_(url、db、username、api_key/password) 使用它们进行单次逻辑操作 使用后自动清除 这是理想的: 比较两个环境之间的数据 在不同的数据库上运行单个检查 会话上下文(当前会话) 用户示例: "Travaille sur l’instance Odoo du client XYZ" "Utilise la base clientx_prod pour cette session" "Connecte-toi avec mon compte administrateur pour les prochaines opérations" 行为: 设置 user_(url、db、username、api_key/password) 持续整个当前会话 仅被 temporary_ 或清除 user_ 覆盖 重置上下文 用户示例: "Reviens à la configuration Odoo par défaut" "Efface mon contexte utilisateur Odoo" 操作: 清除 user_url、user_db、user_username、user_password、user_api_key 技能回退到环境变量(ODOO_URL、ODOO_DB、ODOO_USERNAME、ODOO_PASSWORD / ODOO_API_KEY) 查看当前上下文 用户示例: "Sur quelle instance Odoo es-tu connecté ?" "Montre la configuration Odoo actuelle" 响应应显示(永远不显示完整的密钥): 当前 Odoo 上下文: - URL:https://client-xyz.odoo.com(user_url) - DB:clientxyz_prod(user_db) - 用户名:api_integration(user_username) - 密钥:使用 API 密钥(user_api_key) - 回退 URL:https://default.odoo.com(ODOO_URL) - 回退 DB:default_db(ODOO_DB) ⚙️ Odoo XML-RPC 基础 Odoo 将其服务器框架的一部分通过 XML-RPC(而不是 REST)公开。外部 API 在此处记录:https://www.odoo.com/documentation/18.0/fr/developer/reference/external_api.html 两个主要端点: {{resolved_url}}/xmlrpc/2/common —身份验证和元调用 {{resolved_url}}/xmlrpc/2/object —通过 execute_kw 的模型方法 1. 检查服务器版本 在 common 端点上调用 version() 以验证 URL 和连接性: common = xmlrpc.client.ServerProxy(f"{resolved_url}/xmlrpc/2/common") version_info = common.version() 示例结果: { "server_version": "18.0", "server_version_info": [18, 0, 0, "final", 0], "server_serie": "18.0", "protocol_version": 1 } 2. 身份验证 在 common 端点上使用 authenticate(db, username, password_or_api_key, {}): uid = common.authenticate(resolved_db, resolved_username, resolved_secret, {}) uid 是一个整数用户 ID,将在所有后续调用中使用。如果身份验证失败,uid 是 False / 0 —技能应: 告知用户凭证或数据库无效 建议检查 ODOO_URL、ODOO_DB、用户名和密钥