Automating Odoo ERP Operations with OpenClaw AI

Connect OpenClaw AI agents to Odoo ERP to automate purchase orders, inventory replenishment, vendor reconciliation, sales workflows, and financial operations.

E
ECOSIRE Research and Development Team
|19 mars 202612 min de lecture2.7k Mots|

Automatisation des opérations Odoo ERP avec OpenClaw AI

Odoo est une plateforme ERP complète avec des modules couvrant toutes les fonctions commerciales, de la comptabilité à la fabrication en passant par les RH. Mais même avec les règles d'automatisation intégrées d'Odoo, la plupart des organisations n'utilisent qu'une fraction de ce qui est possible. Les règles d'automatisation fournies par Odoo sont basées sur des déclencheurs et des règles : elles n'ont pas la capacité de raisonnement nécessaire pour gérer les exceptions, s'adapter au contexte et prendre des décisions en plusieurs étapes. OpenClaw comble cette lacune.

Les agents OpenClaw AI s'associent à Odoo en tant que couche d'opérations autonome. Ils consomment les événements Odoo via des webhooks, exécutent un raisonnement en plusieurs étapes sur les données, interagissent avec l'API JSON-RPC d'Odoo pour créer, mettre à jour et interroger des enregistrements, et coordonner les modules d'une manière que l'automatisation native d'Odoo ne peut pas faire. Le résultat est un ERP qui fonctionne plus proche de ce que ferait une équipe d’exploitation compétente : anticiper les problèmes, résoudre les exceptions et optimiser les processus en continu.

Points clés à retenir

  • OpenClaw s'intègre à Odoo via l'API JSON-RPC et les déclencheurs webhook, ne nécessitant aucune modification de la source Odoo.
  • L'agent d'automatisation des achats surveille les points de commande, génère des appels d'offres, sélectionne les fournisseurs et crée des bons de commande basés sur des règles configurables et un raisonnement d'IA.
  • L'agent de rapprochement des fournisseurs associe les factures des fournisseurs aux bons de commande et aux reçus, publie les factures rapprochées et achemine les exceptions.
  • L'agent d'optimisation des stocks analyse les modèles de demande et recommande des ajustements de stock de sécurité, des quantités de réapprovisionnement et des actions de gestion des expirations.
  • L'agent Sales Pipeline surveille les opportunités, envoie des tâches de suivi, met à jour les catégories de prévisions et identifie les transactions à risque.
  • Toutes les actions de l'agent sont réversibles de par leur conception : l'agent enregistre chaque enregistrement Odoo qu'il crée ou modifie avec la possibilité d'annuler.
  • La coordination multi-modules (par exemple, lier une rupture de commande client à un bon de commande et un bon de travail de production) est gérée nativement par la couche agent.
  • Le service d'intégration OpenClaw Odoo d'ECOSIRE fournit des agents prédéfinis calibrés pour votre configuration Odoo.

Architecture d'intégration : comment OpenClaw se connecte à Odoo

OpenClaw s'intègre à Odoo via deux mécanismes :

Événements Webhook : les actions automatisées d'Odoo peuvent déclencher des webhooks HTTP lors d'événements de création/mise à jour/suppression d'enregistrement. L'écouteur d'événements d'OpenClaw s'abonne à ces webhooks et achemine les événements vers l'agent approprié. Il s’agit du chemin en temps réel, piloté par les événements.

Interrogation JSON-RPC : pour les métriques, les tableaux de bord et l'automatisation planifiée, OpenClaw interroge directement l'API Odoo JSON-RPC. Il s’agit du chemin planifié et gourmand en lecture.

// Odoo tool definition for OpenClaw
export const OdooTool = defineTool({
  name: "odoo",
  type: "json-rpc",
  endpoints: {
    authenticate: "/web/session/authenticate",
    call: "/web/dataset/call_kw",
    search: "/web/dataset/call_kw/search_read",
  },
  auth: {
    type: "session",
    database: process.env.ODOO_DB,
    username: process.env.ODOO_USERNAME,
    apiKey: "${ODOO_API_KEY}", // Secrets manager reference
  },
});

// Generic Odoo search_read wrapper
async function odooSearchRead(tool, model: string, domain: any[], fields: string[], limit = 100) {
  return tool.call({
    model,
    method: "search_read",
    args: [domain],
    kwargs: { fields, limit },
  });
}

La clé API Odoo (générée dans Paramètres > Technique > Clés API autorisées) est stockée dans Vault et n'apparaît jamais dans le code ou les fichiers de configuration.


Agent d'automatisation des achats : approvisionnement intelligent

L’approvisionnement manuel est lent et sujet aux erreurs. Un point de commande envoie un e-mail, un acheteur le vérifie trois jours plus tard, envoie une demande de devis à trois fournisseurs, attend une semaine de réponse, crée manuellement le bon de commande et l'usine est en rupture de stock entre-temps. L’agent d’automatisation des achats compresse cela en minutes.

Le flux de travail des agents :

  1. Surveiller les points de réapprovisionnement : Abonnez-vous aux événements d'inventaire Odoo. Lorsque la quantité disponible d'un produit tombe en dessous du point de réapprovisionnement (représentant les quantités déjà commandées en transit), l'agent déclenche la séquence d'approvisionnement.

  2. Calculer la quantité optimale de commande : va au-delà du calcul min-max. Tient compte de la tendance actuelle de la demande, des commandes client confirmées à venir, des facteurs saisonniers et des délais de livraison des fournisseurs pour déterminer la bonne quantité, et pas seulement le minimum.

  3. Sélection du fournisseur : interroge la liste de prix du fournisseur et les données sur les délais de livraison dans Odoo. Pour les produits avec plusieurs fournisseurs approuvés, sélection en fonction du prix actuel, de la disponibilité, de l'historique des performances de livraison (extrait des reçus antérieurs) et des quantités minimales de commande.

  4. Créer une demande de prix ou un bon de commande direct : pour les fournisseurs établis avec des accords de prix en vigueur, crée directement un bon de commande. Pour les nouveaux fournisseurs ou produits sans accord de prix, crée une demande d'offre et l'envoie par e-mail, puis surveille les réponses.

export const AutomateProcurement = defineSkill({
  name: "automate-procurement",
  tools: ["odoo", "email"],
  async run({ input, tools }) {
    const product = await odooSearchRead(
      tools.odoo, "product.product",
      [["id", "=", input.productId]],
      ["id", "name", "qty_available", "reorder_min_qty", "seller_ids", "route_ids"]
    );

    if (!product.length) throw new SkillError("PRODUCT_NOT_FOUND");

    const p = product[0];
    const transitQty = await getInTransitQty(tools.odoo, input.productId);
    const confirmedDemand = await getConfirmedDemand(tools.odoo, input.productId, { days: 60 });

    const orderQty = calculateOptimalOrderQty({
      currentStock: p.qty_available + transitQty,
      confirmedDemand,
      safetyStock: p.reorder_min_qty,
      vendorLeadTime: await getVendorLeadTime(tools.odoo, input.productId),
    });

    const bestVendor = await selectVendor(tools.odoo, input.productId, orderQty);

    if (!bestVendor) {
      return { action: "RFQ_NEEDED", reason: "No vendor with current price agreement" };
    }

    // Create Purchase Order
    const po = await tools.odoo.call({
      model: "purchase.order",
      method: "create",
      args: [{
        partner_id: bestVendor.partnerId,
        order_line: [[0, 0, {
          product_id: input.productId,
          product_qty: orderQty,
          price_unit: bestVendor.price,
          date_planned: addDays(new Date(), bestVendor.leadTimeDays),
        }]],
      }],
    });

    return { poId: po, orderQty, vendorId: bestVendor.partnerId };
  },
});

Agent de rapprochement des factures fournisseur

Le rapprochement à trois (facture contre bon de commande contre réception de marchandises) est l'un des processus de comptabilité fournisseurs les plus exigeants en main-d'œuvre. L'agent de rapprochement l'automatise pour plus de 85 % des factures qui correspondent parfaitement, laissant les exceptions à l'examen humain.

La logique de correspondance :

  1. Extrayez les données de facture (fournisseur, numéro de facture, montant, lignes) du document ou d'un flux EDI.
  2. Recherchez le bon de commande correspondant dans Odoo en utilisant le numéro de référence de la facture ou l'heuristique fournisseur + date + montant.
  3. Recherchez les entrées de marchandises associées au bon de commande.
  4. Comparez les lignes de facture aux lignes de commande et aux quantités reçues.
  5. Si les montants correspondent dans les limites de la tolérance (configurable, généralement 2 %), validez automatiquement la facture fournisseur.
  6. S'il y a un écart, créez une facture à l'état de projet avec l'inadéquation annotée pour examen par l'équipe AP.
export const ReconcileVendorInvoice = defineSkill({
  name: "reconcile-vendor-invoice",
  tools: ["odoo"],
  async run({ input, tools }) {
    // Find matching PO
    const pos = await odooSearchRead(
      tools.odoo, "purchase.order",
      [["name", "=", input.poReference], ["state", "in", ["purchase", "done"]]],
      ["id", "order_line", "amount_total", "partner_id"]
    );

    if (!pos.length) {
      return { matched: false, reason: "PO_NOT_FOUND", action: "ROUTE_TO_AP_TEAM" };
    }

    const po = pos[0];
    const amountVariance = Math.abs(po.amount_total - input.invoiceTotal);
    const variancePct = amountVariance / po.amount_total;

    if (variancePct > 0.02) {
      // Create draft bill with mismatch annotation
      await tools.odoo.call({
        model: "account.move",
        method: "create",
        args: [{
          move_type: "in_invoice",
          partner_id: po.partner_id[0],
          invoice_origin: po.name,
          ref: input.invoiceNumber,
          state: "draft",
          narration: `RECONCILIATION MISMATCH: Invoice total ${input.invoiceTotal} vs PO total ${po.amount_total} (variance: ${(variancePct * 100).toFixed(1)}%)`,
        }],
      });
      return { matched: false, variancePct, action: "DRAFT_BILL_CREATED_FOR_REVIEW" };
    }

    // Post the bill
    const bill = await tools.odoo.call({
      model: "account.move",
      method: "create",
      args: [{
        move_type: "in_invoice",
        partner_id: po.partner_id[0],
        invoice_origin: po.name,
        ref: input.invoiceNumber,
        invoice_line_ids: buildInvoiceLines(input.lineItems, po.order_line),
      }],
    });

    await tools.odoo.call({ model: "account.move", method: "action_post", args: [[bill]] });

    return { matched: true, billId: bill, variancePct };
  },
});

Agent d'optimisation des stocks

Les points de commande statiques et les valeurs des stocks de sécurité deviennent erronés dès que les modèles de demande changent. L'agent d'optimisation des stocks analyse en permanence les données de demande et recommande des ajustements.

L'agent circule chaque semaine et analyse chaque produit de l'inventaire :

Prévision de la demande : calcule la demande hebdomadaire moyenne et l'écart type par rapport aux 52 dernières semaines de données de ventes/consommation. Applique un ajustement saisonnier aux produits présentant des modèles de demande saisonniers.

Optimisation du stock de sécurité : utilise l'objectif de niveau de service (configurable par catégorie de produits) et la variabilité de la demande pour calculer le stock de sécurité statistiquement optimal. Les produits présentant une forte variabilité de la demande nécessitent davantage de stock de sécurité ; les produits dont la demande est stable et prévisible ont besoin de moins.

Recommandation du point de commande : Le stock de sécurité plus la demande pendant le délai de livraison est égal au point de commande recommandé. L'agent compare la valeur recommandée à la valeur Odoo actuelle et signale les écarts significatifs pour examen.

Gestion des expirations : pour les produits périssables, identifie les articles approchant de leur date de péremption et crée des actions : transfert vers des emplacements à évolution plus rapide, signalement pour démarque ou création d'ordres d'élimination.


Agent d'automatisation du pipeline des ventes

L'agent Sales Pipeline est la couche d'automatisation CRM au-dessus d'Odoo CRM. Il surveille les étapes des opportunités, identifie les transactions qui sont restées silencieuses, envoie des tâches de suivi aux responsables de comptes, ajuste les scores de probabilité en fonction des signaux d'engagement et signale les opportunités à risque dans les prévisions.

export const MonitorSalesPipeline = defineSkill({
  name: "monitor-sales-pipeline",
  tools: ["odoo"],
  async run({ input, tools }) {
    const staleOpportunities = await odooSearchRead(
      tools.odoo, "crm.lead",
      [
        ["type", "=", "opportunity"],
        ["stage_id.name", "not in", ["Won", "Lost"]],
        ["date_last_stage_update", "<", addDays(new Date(), -14).toISOString()],
        ["probability", ">", 10],
      ],
      ["id", "name", "partner_id", "user_id", "expected_revenue", "probability", "date_last_stage_update"]
    );

    const actions = [];
    for (const opp of staleOpportunities) {
      // Create follow-up activity
      await tools.odoo.call({
        model: "mail.activity",
        method: "create",
        args: [{
          res_model: "crm.lead",
          res_id: opp.id,
          activity_type_id: 4, // Phone call type
          summary: `AI Alert: No activity for ${daysSince(opp.date_last_stage_update)} days`,
          user_id: opp.user_id[0],
          date_deadline: addDays(new Date(), 2).toISOString().split("T")[0],
          note: `This opportunity has had no stage movement or logged activity for ${daysSince(opp.date_last_stage_update)} days. Expected revenue: $${opp.expected_revenue.toLocaleString()}. Please review and update.`,
        }],
      });

      actions.push({ opportunityId: opp.id, action: "FOLLOWUP_ACTIVITY_CREATED" });
    }

    return { processed: staleOpportunities.length, actions };
  },
});

Agent des bons de travail de fabrication

Pour les fabricants utilisant Odoo Manufacturing, l'agent de bons de commande surveille les ordres de production, détecte les goulots d'étranglement et prend des mesures correctives.

Capacités clés :

  • Surveillance de la capacité : vérifie la charge du centre de travail par rapport aux heures disponibles et signale la surutilisation avant qu'elle n'entraîne des retards.
  • Détection de pénurie de matériel : vérifie la disponibilité des composants pour les commandes de production à venir. Si un composant est court, déclenche automatiquement un bon de commande ou un transfert inter-entrepôts.
  • Séquencement des ordres de travail : pour les files d'attente des centres de travail, suggère un séquencement optimal pour minimiser le temps de configuration et maximiser le débit.
  • Amélioration de la qualité : si un contrôle de qualité échoue, l'agent met le bon de travail en attente, avertit l'équipe qualité et empêche le lot de passer à l'étape suivante.

Automatisation comptable : traitement de fin de période

Odoo Accounting nécessite un traitement de fin de période : rapprochement des relevés bancaires, régularisations, réévaluation des devises, écritures d'amortissement et clôture de la période. L'agent comptable automatise les étapes de routine.

Rapprochement bancaire : l'agent traite les importations de relevés bancaires, fait correspondre les transactions aux écritures du journal Odoo en utilisant la correspondance du montant, de la date et de la référence, et crée des écritures résiduelles pour les transactions non appariées. Les taux de correspondance pour les aliments propres dépassent généralement 95 %.

Entrées d'accumulation : sur la base des règles d'accumulation configurées (dépenses payées d'avance, revenus à payer, revenus non gagnés), l'agent génère des écritures de journal d'accumulation mensuelles et des écritures d'extourne pour la période suivante.

Réévaluation en devise étrangère : l'agent récupère les taux de change actuels à partir d'un flux de taux externe, calcule les gains/pertes non réalisés sur tous les soldes ouverts en devise étrangère et publie les écritures de réévaluation conformément aux règles IFRS/GAAP.


Questions fréquemment posées

OpenClaw nécessite-t-il des modifications du code source d'Odoo ou des modules Odoo personnalisés ?

Non. OpenClaw s'intègre entièrement via l'API JSON-RPC standard d'Odoo et les mécanismes de webhook. Aucune modification de la source Odoo, aucun module personnalisé ou dépendance OCA n'est requis. Cela signifie que l'intégration fonctionne avec n'importe quelle version d'Odoo prenant en charge l'API JSON-RPC (Odoo 14+) et survit aux mises à niveau d'Odoo sans modification.

Comment l'agent gère-t-il le contrôle d'accès et les règles d'enregistrement d'Odoo ?

L'agent s'authentifie en tant qu'utilisateur du service Odoo dédié avec un rôle spécifiquement configuré pour les besoins de l'agent. Les listes de contrôle d'accès (ACL) et les règles d'enregistrement d'Odoo s'appliquent à l'utilisateur agent comme elles le feraient à un utilisateur humain. Si l'agent tente une opération pour laquelle il n'est pas autorisé, Odoo renvoie une erreur d'accès, que le gestionnaire d'erreurs de l'agent enregistre et escalade. Cela signifie que votre modèle de sécurité Odoo reste la source faisant autorité en matière de contrôle d'accès.

Que se passe-t-il si le serveur Odoo est temporairement indisponible pendant l'exécution de l'agent ?

La définition de l'outil Odoo a une logique de nouvelle tentative avec une interruption exponentielle. Pour les erreurs passagères (HTTP 503, délai d'expiration de la connexion), l'agent réessaye jusqu'à trois fois avec des délais de 5 secondes, 15 secondes et 30 secondes. En cas d'échec persistant, la tâche est acheminée vers la file d'attente de lettres mortes et une alerte est envoyée à l'équipe des opérations. Aucune donnée de tâche en cours n'est perdue car la mémoire de travail de l'agent conserve l'état de la tâche lors des nouvelles tentatives.

L'agent peut-il créer des enregistrements dans Odoo pour le compte d'utilisateurs spécifiques ?

Oui. L'API Odoo JSON-RPC prend en charge l'usurpation d'identité d'utilisateur basée sur le contexte via le paramètre uid si le compte de service dispose des autorisations nécessaires. Cela permet aux bons de commande créés par l'agent d'apparaître comme créés par l'acheteur responsable de cette catégorie de produits, préservant ainsi la piste d'audit et le routage des notifications dans Odoo. L'usurpation d'identité ou l'utilisation de l'identité du compte de service est une décision politique qu'ECOSIRE aide les clients à prendre en fonction de leurs exigences d'audit.

Comment l'intégration gère-t-elle les configurations multi-entreprises Odoo ?

Pour les instances Odoo multi-entreprises, le manifeste de l'agent inclut une configuration de mappage d'entreprise. Lors du traitement d'événements ou des appels API, l'agent définit le contexte d'entreprise approprié dans la session Odoo. Les transactions intersociétés intersociétés (achats intersociétés, transferts) sont gérées par l'agent en effectuant des appels API distincts dans le contexte de chaque entreprise et en reliant les enregistrements résultants.


Prochaines étapes

Odoo est une plateforme puissante, mais elle atteint son plein potentiel lorsqu'une couche d'automatisation intelligente gère la complexité opérationnelle que les règles d'automatisation natives ne peuvent pas gérer. Les agents OpenClaw comblent l'écart entre ce qu'Odoo peut suivre et ce que votre équipe opérationnelle doit faire.

Le service d'intégration OpenClaw Odoo d'ECOSIRE fournit des agents prédéfinis calibrés pour vos modules Odoo, une automatisation de flux de travail personnalisée et une optimisation continue. Notre équipe possède une expertise approfondie à la fois dans le développement d'agents OpenClaw et dans la configuration fonctionnelle d'Odoo : nous comblons les deux domaines.

Contactez ECOSIRE pour discuter de vos besoins en automatisation Odoo et recevoir un plan de mise en œuvre personnalisé.

E

Rédigé par

ECOSIRE Research and Development Team

Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.

Discutez sur WhatsApp