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 de março de 202612 min de leitura2.6k Palavras|

Automatizando operações Odoo ERP com OpenClaw AI

Odoo é uma plataforma ERP abrangente com módulos que cobrem todas as funções de negócios, desde contabilidade até manufatura e RH. Mas mesmo com as regras de automação integradas do Odoo, a maioria das organizações utiliza apenas uma fração do que é possível. As regras de automação fornecidas pelo Odoo são baseadas em gatilhos e regras – elas não têm a capacidade de raciocínio para lidar com exceções, adaptar-se ao contexto e tomar decisões em várias etapas. OpenClaw preenche essa lacuna.

Os agentes OpenClaw AI ficam ao lado do Odoo como uma camada de operações autônomas. Eles consomem eventos Odoo por meio de webhooks, executam raciocínio em várias etapas sobre os dados, interagem com a API JSON-RPC do Odoo para criar, atualizar e consultar registros e coordenar módulos de maneiras que a automação nativa do Odoo não consegue. O resultado é um ERP que opera mais próximo do que uma equipe de operações qualificada faria: antecipar problemas, resolver exceções e otimizar processos continuamente.

Principais conclusões

  • O OpenClaw integra-se ao Odoo por meio da API JSON-RPC e de gatilhos de webhook, não exigindo modificações na fonte do Odoo.
  • O Agente de Automação de Compras monitora pontos de reabastecimento, gera RFQs, seleciona fornecedores e cria POs com base em regras configuráveis ​​e raciocínio de IA.
  • O Agente de reconciliação de fornecedores combina faturas de fornecedores com pedidos de compra e recebimentos, publica faturas conciliadas e roteia exceções.
  • O Agente de Otimização de Estoque analisa padrões de demanda e recomenda ajustes de estoque de segurança, reordenamento de quantidades e ações de gerenciamento de vencimento.
  • O Sales Pipeline Agent monitora oportunidades, envia tarefas de acompanhamento, atualiza categorias de previsão e identifica negócios em risco.
  • Todas as ações do agente são reversíveis por design – o agente registra cada registro Odoo que cria ou modifica com a capacidade de desfazer.
  • A coordenação de vários módulos (por exemplo, vincular uma escassez de pedido de vendas a um pedido de compra e uma ordem de serviço de produção) é tratada nativamente pela camada de agente.
  • O serviço de integração OpenClaw Odoo da ECOSIRE fornece agentes pré-construídos calibrados para sua configuração Odoo.

Arquitetura de integração: como o OpenClaw se conecta ao Odoo

OpenClaw integra-se com Odoo através de dois mecanismos:

Eventos de webhook: as ações automatizadas do Odoo podem disparar webhooks HTTP em eventos de criação/atualização/exclusão de registros. O ouvinte de eventos do OpenClaw assina esses webhooks e roteia eventos para o agente apropriado. Este é o caminho em tempo real orientado a eventos.

Pesquisa JSON-RPC: para métricas, painéis e automação programada, o OpenClaw pesquisa diretamente a API Odoo JSON-RPC. Este é o caminho programado e com muita leitura.

// 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 },
  });
}

A chave de API Odoo (gerada em Configurações > Técnico > Chaves de API permitidas) é armazenada no Vault e nunca aparece no código ou nos arquivos de configuração.


Agente de Automação de Compras: Compras Inteligentes

A aquisição manual é lenta e sujeita a erros. Um ponto de reabastecimento envia um e-mail, um comprador o verifica três dias depois, envia uma solicitação de cotação a três fornecedores, espera uma semana pelas respostas, cria manualmente o pedido de compra e, nesse ínterim, a fábrica fica sem estoque. O Purchase Automation Agent compacta isso em minutos.

O fluxo de trabalho do agente:

  1. Monitore pontos de novo pedido: assina eventos de inventário do Odoo. Quando a quantidade disponível de um produto fica abaixo do ponto de reabastecimento (contabilizando as quantidades já encomendadas em trânsito), o agente aciona a sequência de aquisição.

  2. Calcular a quantidade ideal do pedido: vai além do cálculo mínimo-máximo. Considera a tendência atual da demanda, os próximos pedidos de vendas confirmados, fatores sazonais e prazos de entrega do fornecedor para determinar a quantidade certa, e não apenas a mínima.

  3. Seleção de Fornecedor: Consulta a lista de preços do fornecedor e os dados de prazo de entrega no Odoo. Para produtos com vários fornecedores aprovados, selecione com base no preço atual, disponibilidade, histórico de desempenho de entrega (extraído de recebimentos anteriores) e quantidades mínimas de pedido.

  4. Criar RFQ ou PO direto: Para fornecedores estabelecidos com acordos de preços atuais, cria um pedido de compra diretamente. Para novos fornecedores ou produtos sem acordos de preços, cria uma RFQ e a envia por e-mail, monitorando as respostas.

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 };
  },
});

Agente de reconciliação de faturas de fornecedor

A correspondência tripartida (fatura contra pedido de compra contra recebimento de mercadorias) é um dos processos de contas a pagar mais trabalhosos. O Agente de Reconciliação automatiza isso para mais de 85% das faturas com correspondência correta, deixando as exceções para revisão humana.

A lógica correspondente:

  1. Extraia os dados da fatura (fornecedor, número da fatura, valor, itens de linha) do documento ou de um feed EDI.
  2. Encontre o pedido de compra correspondente no Odoo usando o número de referência da fatura ou heurística fornecedor + data + valor.
  3. Encontre as entradas de mercadorias associadas ao pedido.
  4. Compare os itens de linha da fatura com as linhas do pedido de compra e as quantidades de recebimento.
  5. Se os valores corresponderem à tolerância (configurável, normalmente 2%), lance a fatura do fornecedor automaticamente.
  6. Se houver uma variação, crie um projeto de lei em estado de rascunho com a incompatibilidade anotada para revisão da equipe de 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 };
  },
});

Agente de otimização de estoque

Os pontos estáticos de reabastecimento e os valores do estoque de segurança tornam-se errados no momento em que os padrões de demanda mudam. O Agente de Otimização de Estoque analisa continuamente os dados de demanda e recomenda ajustes.

O agente executa semanalmente e analisa cada produto do estoque:

Previsão de demanda: calcula a demanda média semanal e o desvio padrão das últimas 52 semanas de dados de vendas/consumo. Aplica ajuste sazonal para produtos com padrões de demanda sazonal.

Otimização do estoque de segurança: usa a meta de nível de serviço (configurável por categoria de produto) e a variabilidade da demanda para calcular o estoque de segurança estatisticamente ideal. Produtos com grande variabilidade de demanda necessitam de mais estoque de segurança; produtos com demanda estável e previsível precisam de menos.

Recomendação de ponto de pedido: O estoque de segurança mais a demanda durante o lead time é igual ao ponto de pedido recomendado. O agente compara o valor recomendado com o valor atual do Odoo e sinaliza desvios significativos para revisão.

Gerenciamento de Vencimentos: Para produtos perecíveis, identifica itens que estão prestes a expirar e cria ações: transferência para locais de movimentação mais rápida, sinalização para descontos ou criação de pedidos de descarte.


Agente de automação de pipeline de vendas

O Sales Pipeline Agent é a camada de automação de CRM no topo do Odoo CRM. Ele monitora os estágios das oportunidades, identifica negócios que foram silenciados, envia tarefas de acompanhamento aos gerentes de contas, ajusta as pontuações de probabilidade com base em sinais de engajamento e sinaliza oportunidades em risco na previsão.

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 };
  },
});

Agente de ordem de serviço de fabricação

Para fabricantes que usam o Odoo Manufacturing, o Agente de Ordem de Serviço monitora ordens de produção, detecta gargalos e toma ações corretivas.

Principais capacidades:

  • Monitoramento de capacidade: verifica a carga do centro de trabalho em relação às horas disponíveis e sinaliza a superalocação antes que cause atrasos.
  • Detecção de falta de material: verifica a disponibilidade de componentes para próximas ordens de produção. Se um componente estiver em falta, aciona automaticamente um pedido de compra ou transferência entre armazéns.
  • Sequenciamento de ordens de serviço: para filas de centros de trabalho, sugere o sequenciamento ideal para minimizar o tempo de configuração e maximizar o rendimento.
  • Escalonamento de qualidade: se uma verificação de controle de qualidade falhar, o agente suspende a ordem de serviço, notifica a equipe de qualidade e evita que o lote passe para a próxima etapa.

Automação contábil: processamento de final de período

Odoo Accounting requer processamento de final de período: reconciliação de extratos bancários, provisões, reavaliação de moeda estrangeira, lançamentos de depreciação e fechamento do período. O Agente Contábil automatiza as etapas da rotina.

Reconciliação bancária: o agente processa importações de extratos bancários, combina transações com lançamentos contábeis manuais do Odoo usando correspondência de valor, data e referência e cria entradas residuais para transações sem correspondência. As taxas de correspondência para feeds limpos normalmente excedem 95%.

Lançamentos de acumulação: com base nas regras de acumulação configuradas (despesas pré-pagas, receitas acumuladas, receitas não auferidas), o agente gera lançamentos contábeis manuais de acumulação mensal e lançamentos de reversão para o período seguinte.

Reavaliação de moeda estrangeira: o agente recupera as taxas de câmbio atuais de um feed de taxas externo, calcula ganhos/perdas não realizados em todos os saldos em moeda estrangeira abertos e lança as entradas de reavaliação de acordo com as regras IFRS/GAAP.


Perguntas frequentes

O OpenClaw exige alterações no código-fonte do Odoo ou em módulos personalizados do Odoo?

O OpenClaw integra-se inteiramente por meio da API JSON-RPC padrão do Odoo e de mecanismos de webhook. Nenhuma modificação de origem Odoo, módulos personalizados ou dependências OCA são necessárias. Isso significa que a integração funciona com qualquer versão do Odoo que suporte a API JSON-RPC (Odoo 14+) e sobrevive às atualizações do Odoo sem modificação.

Como o agente lida com o controle de acesso e regras de registro do Odoo?

O agente se autentica como um usuário dedicado do serviço Odoo com uma função configurada especificamente para as necessidades do agente. As listas de controle de acesso (ACLs) e as regras de registro do Odoo se aplicam ao usuário agente da mesma forma que se aplicariam a um usuário humano. Se o agente tentar uma operação para a qual não tem permissão, o Odoo retornará um erro de acesso, que o manipulador de erros do agente registra e escala. Isso significa que o seu modelo de segurança Odoo continua sendo a fonte oficial de controle de acesso.

O que acontece se o servidor Odoo ficar temporariamente indisponível durante a execução do agente?

A definição da ferramenta Odoo possui lógica de nova tentativa com espera exponencial. Para erros transitórios (HTTP 503, tempo limite de conexão), o agente tenta novamente até três vezes com atrasos de 5, 15 e 30 segundos. Para falhas persistentes, a tarefa é roteada para a fila de devoluções e um alerta é enviado à equipe de operações. Nenhum dado de tarefa em andamento é perdido porque a memória de trabalho do agente persiste no estado da tarefa durante novas tentativas.

O agente pode criar registros no Odoo em nome de usuários específicos?

Sim. A API Odoo JSON-RPC oferece suporte à representação de usuário baseada em contexto por meio do parâmetro uid se a conta de serviço tiver as permissões necessárias. Isso permite que os pedidos de compra criados pelo agente apareçam como criados pelo comprador responsável por aquela categoria de produto, preservando a trilha de auditoria e o roteamento de notificações no Odoo. Representar ou usar a identidade da conta de serviço é uma decisão política que a ECOSIRE ajuda os clientes a tomar com base em seus requisitos de auditoria.

Como a integração lida com configurações multiempresas do Odoo?

Para instâncias Odoo multiempresas, o manifesto do agente inclui uma configuração de mapeamento da empresa. Ao processar eventos ou fazer chamadas de API, o agente define o contexto apropriado da empresa na sessão Odoo. As transações entre empresas (compras e transferências entre empresas) são tratadas pelo agente fazendo chamadas de API separadas no contexto de cada empresa e vinculando os registros resultantes.


Próximas etapas

Odoo é uma plataforma poderosa, mas atinge todo o seu potencial quando uma camada de automação inteligente lida com a complexidade operacional que as regras de automação nativas não conseguem. Os agentes OpenClaw fecham a lacuna entre o que o Odoo pode rastrear e o que sua equipe de operações precisa fazer.

O serviço de integração OpenClaw Odoo da ECOSIRE fornece agentes pré-construídos calibrados para seus módulos Odoo, automação de fluxo de trabalho personalizada e otimização contínua. Nossa equipe tem profundo conhecimento tanto no desenvolvimento de agentes OpenClaw quanto na configuração funcional do Odoo – conectamos os dois domínios.

Entre em contato com a ECOSIRE para discutir seus requisitos de automação Odoo e receber um plano de implementação personalizado.

Compartilhar:
E

Escrito por

ECOSIRE Research and Development Team

Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.

Converse no WhatsApp