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 Mart 202610 dk okuma2.1k Kelime|

OpenClaw AI ile Odoo ERP Operasyonlarını Otomatikleştirme

Odoo, muhasebeden üretime ve İK'ya kadar her işletme fonksiyonunu kapsayan modüllere sahip kapsamlı bir ERP platformudur. Ancak Odoo'nun yerleşik otomasyon kurallarıyla bile çoğu kuruluş mümkün olanın yalnızca küçük bir kısmını kullanır. Odoo'nun birlikte gönderdiği otomasyon kuralları tetikleyici ve kural tabanlıdır; istisnaları ele alma, bağlama uyum sağlama ve çok adımlı kararlar alma konusunda akıl yürütme yeteneğinden yoksundurlar. OpenClaw bu boşluğu dolduruyor.

OpenClaw AI ajanları, otonom bir operasyon katmanı olarak Odoo'nun yanında yer alır. Odoo olaylarını web kancaları aracılığıyla kullanırlar, veriler üzerinde çok adımlı muhakeme yürütürler, kayıtları oluşturmak, güncellemek ve sorgulamak için Odoo'nun JSON-RPC API'si ile etkileşime girerler ve Odoo'nun yerel otomasyonunun yapamayacağı şekillerde modüller arasında koordinasyon sağlarlar. Sonuç, yetenekli bir operasyon ekibinin yapacağı işe daha yakın çalışan bir ERP'dir: sorunları tahmin etmek, istisnaları çözmek ve süreçleri sürekli olarak optimize etmek.

Önemli Çıkarımlar

  • OpenClaw, JSON-RPC API ve webhook tetikleyicileri aracılığıyla Odoo ile entegre olur ve Odoo kaynağında değişiklik yapılmasını gerektirmez.
  • Satınalma Otomasyon Temsilcisi, yeniden sipariş noktalarını izler, RFQ'lar oluşturur, satıcıları seçer ve yapılandırılabilir kurallara ve yapay zeka mantığına dayalı olarak PO'lar oluşturur.
  • Satıcı Mutabakat Temsilcisi, tedarikçi faturalarını PO'lar ve makbuzlarla eşleştirir, eşleşen faturaları gönderir ve istisnaları yönlendirir.
  • Envanter Optimizasyon Aracısı talep modellerini analiz eder ve emniyet stoğu ayarlamaları, yeniden sipariş miktarları ve son kullanma tarihi yönetimi eylemleri önerir.
  • Satış Hattı Temsilcisi fırsatları izler, takip görevleri gönderir, tahmin kategorilerini günceller ve risk altındaki anlaşmaları belirler.
  • Tüm aracı eylemleri tasarım gereği geri döndürülebilir; aracı, oluşturduğu veya değiştirdiği her Odoo kaydını geri alma yeteneğiyle günlüğe kaydeder.
  • Çoklu modül koordinasyonu (örneğin, bir satış siparişi eksikliğinin bir satınalma siparişine ve üretim iş emrine bağlanması) temsilci katmanı tarafından yerel olarak gerçekleştirilir.
  • ECOSIRE'ın OpenClaw Odoo entegrasyon hizmeti, Odoo yapılandırmanıza göre kalibre edilmiş önceden oluşturulmuş aracılar sağlar.

Entegrasyon Mimarisi: OpenClaw Odoo'ya Nasıl Bağlanır?

OpenClaw, Odoo ile iki mekanizma aracılığıyla bütünleşir:

Web Kancası Olayları: Odoo'nun otomatik eylemleri, kayıt oluşturma/güncelleme/silme olaylarında HTTP web kancalarını tetikleyebilir. OpenClaw'ın olay dinleyicisi bu web kancalarına abone olur ve olayları uygun aracıya yönlendirir. Bu gerçek zamanlı, olaya dayalı yoldur.

JSON-RPC Anketi: Ölçümler, kontrol panelleri ve planlanmış otomasyon için OpenClaw doğrudan Odoo JSON-RPC API'sini yoklar. Bu, zamanlanmış, okuma ağırlıklı yoldur.

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

Odoo API anahtarı (Ayarlar > Teknik > İzin Verilen API Anahtarları bölümünde oluşturulur) Vault'ta saklanır ve hiçbir zaman kod veya yapılandırma dosyalarında görünmez.


Satın Alma Otomasyonu Temsilcisi: Akıllı Tedarik

Manuel tedarik yavaştır ve hataya açıktır. Yeniden sipariş noktası bir e-posta gönderir, alıcı bunu üç gün sonra kontrol eder, üç satıcıya fiyat teklifi isteği gönderir, yanıtlar için bir hafta bekler, PO'yu manuel olarak oluşturur ve bu arada fabrikanın stokları tükenir. Satın Alma Otomasyon Aracısı bunu dakikalara sıkıştırır.

Temsilci iş akışı:

  1. Yeniden Sipariş Noktalarını İzleyin: Odoo envanter etkinliklerine abone olur. Bir ürünün eldeki miktarı yeniden sipariş noktasının altına düştüğünde (halihazırda sipariş edilen miktarlar dikkate alınarak), temsilci tedarik sırasını tetikler.

  2. Optimal Sipariş Miktarını Hesaplayın: Min-maks hesaplamasının ötesine geçer. Yalnızca minimum miktarı değil, doğru miktarı belirlemek için mevcut talep eğilimini, yaklaşmakta olan onaylanmış satış siparişlerini, mevsimsel faktörleri ve satıcı teslim sürelerini dikkate alır.

  3. Satıcı Seçimi: Odoo'da satıcı fiyat listesini ve teslim süresi verilerini sorgular. Birden fazla onaylı tedarikçisi olan ürünler için geçerli fiyata, stok durumuna, teslimat performansı geçmişine (geçmiş girişlerden alınan) ve minimum sipariş miktarlarına göre seçim yapın.

  4. RFQ veya Doğrudan Satın Alma Siparişi oluşturun: Geçerli fiyat anlaşmaları olan yerleşik satıcılar için doğrudan bir Satınalma Siparişi oluşturur. Yeni satıcılar veya fiyat anlaşması olmayan ürünler için bir RFQ oluşturur ve bunu e-postayla gönderir, ardından yanıtları izler.

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

Satıcı Fatura Mutabakat Aracısı

Üç yönlü eşleştirme (mal girişi karşılığında PO karşılığında fatura), en yoğun emek gerektiren borç hesapları süreçlerinden biridir. Mutabakat Aracısı, temiz bir şekilde eşleşen faturaların %85'inden fazlası için bunu otomatikleştirir ve istisnaları insan incelemesine bırakır.

Eşleştirme mantığı:

  1. Fatura verilerini (tedarikçi, fatura numarası, tutar, kalemler) belgeden veya bir EDI akışından çıkarın.
  2. Fatura referans numarasını veya satıcı + tarih + tutar buluşsal yöntemini kullanarak Odoo'da eşleşen PO'yu bulun.
  3. PO için ilgili mal girişlerini bulun.
  4. Fatura satır öğelerini PO satırları ve giriş miktarlarıyla karşılaştırın.
  5. Tutarlar tolerans dahilinde eşleşiyorsa (yapılandırılabilir, genellikle %2), satıcı faturasını otomatik olarak gönderin.
  6. Bir farklılık varsa, AP ekibinin incelemesi için uyumsuzluk açıklamasını içeren taslak halinde bir yasa tasarısı oluşturun.
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 };
  },
});

Envanter Optimizasyon Aracısı

Talep kalıpları değiştiğinde statik yeniden sipariş noktaları ve emniyet stoku değerleri yanlış hale gelir. Envanter Optimizasyon Aracısı, talep verilerini sürekli olarak analiz eder ve ayarlamalar önerir.

Temsilci haftalık olarak çalışır ve envanterdeki her ürünü analiz eder:

Talep Tahmini: Son 52 haftalık satış/tüketim verilerinden ortalama haftalık talebi ve standart sapmayı hesaplar. Mevsimsel talep kalıplarına sahip ürünler için mevsimsel düzeltme uygular.

Emniyet Stoku Optimizasyonu: İstatistiksel olarak optimum emniyet stoğunu hesaplamak için hizmet düzeyi hedefini (ürün kategorisine göre yapılandırılabilir) ve talep değişkenliğini kullanır. Talep değişkenliği yüksek ürünler daha fazla güvenlik stoğuna ihtiyaç duyar; İstikrarlı ve öngörülebilir talebi olan ürünlerin daha azına ihtiyacı vardır.

Yeniden Sipariş Noktası Önerisi: Güvenlik stoğu artı teslim süresindeki talep, önerilen yeniden sipariş noktasına eşittir. Temsilci, önerilen değeri mevcut Odoo değeriyle karşılaştırır ve önemli sapmaları incelenmek üzere işaretler.

Son Kullanma Yönetimi: Bozulabilir ürünler için, son kullanma tarihi yaklaşan ürünleri tanımlar ve eylemler oluşturur: daha hızlı hareket eden konumlara transfer edin, indirim için işaretleyin veya imha siparişleri oluşturun.


Satış Hattı Otomasyon Temsilcisi

Satış Hattı Temsilcisi, Odoo CRM'nin üzerindeki CRM otomasyon katmanıdır. Fırsat aşamalarını izler, sessiz kalan anlaşmaları belirler, hesap yöneticilerine takip görevleri gönderir, katılım sinyallerine göre olasılık puanlarını ayarlar ve tahminde risk altındaki fırsatları işaretler.

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

Üretim İş Emri Temsilcisi

Odoo Manufacturing'i kullanan üreticiler için İş Emri Aracısı, üretim siparişlerini izler, darboğazları tespit eder ve düzeltici eylemler gerçekleştirir.

Anahtar yetenekler:

  • Kapasite izleme: İş merkezi yükünü mevcut saatlere göre kontrol eder ve gecikmelere neden olmadan fazla tahsisi işaretler.
  • Malzeme sıkıntısı tespiti: Yaklaşan üretim siparişleri için bileşen kullanılabilirliğini kontrol eder. Bir bileşenin kısa olması durumunda otomatik olarak satın alma siparişini veya depolar arası transferi tetikler.
  • İş emri sıralaması: İş merkezi kuyrukları için, kurulum süresini en aza indirmek ve verimi en üst düzeye çıkarmak için en uygun sıralamayı önerir.
  • Kalite yükseltme: Kalite kontrol denetimi başarısız olursa temsilci iş emrini beklemeye alır, kalite ekibine bilgi verir ve partinin bir sonraki aşamaya geçmesini engeller.

Muhasebe Otomasyonu: Dönem Sonu İşlemleri

Odoo Muhasebe, dönem sonu işlemlerini gerektirir: banka ekstresi mutabakatı, tahakkuklar, yabancı para biriminin yeniden değerlemesi, amortisman girişleri ve dönemin kapatılması. Muhasebe Temsilcisi rutin adımları otomatikleştirir.

Banka Mutabakatı: Temsilci, banka ekstresi içe aktarımlarını işler, tutar, tarih ve referans eşleştirmeyi kullanarak işlemleri Odoo günlük girişleriyle eşleştirir ve eşleşmeyen işlemler için artık girişler oluşturur. Temiz feed'ler için eşleşme oranları genellikle %95'i aşar.

Tahakkuk Girişleri: Yapılandırılmış tahakkuk kurallarına (peşin ödenmiş giderler, tahakkuk eden gelir, kazanılmamış gelir) dayanarak temsilci, bir sonraki dönem için aylık tahakkuk yevmiye girişleri ve iptal girişleri oluşturur.

Yabancı Para Birimi Yeniden Değerlemesi: Temsilci, güncel döviz kurlarını harici bir kur akışından alır, tüm açık yabancı para bakiyelerindeki gerçekleşmemiş kazançları/zararları hesaplar ve yeniden değerleme girişlerini IFRS/GAAP kurallarına göre yayınlar.


Sıkça Sorulan Sorular

OpenClaw, Odoo'nun kaynak kodunda veya özel Odoo modüllerinde değişiklik gerektiriyor mu?

Hayır. OpenClaw tamamen Odoo'nun standart JSON-RPC API'si ve webhook mekanizmaları aracılığıyla entegre olur. Hiçbir Odoo kaynağı değişikliği, özel modül veya OCA bağımlılığı gerekmez. Bu, entegrasyonun JSON-RPC API'yi (Odoo 14+) destekleyen herhangi bir Odoo sürümüyle çalıştığı ve Odoo yükseltmelerinde değişiklik yapılmadan hayatta kaldığı anlamına gelir.

Ajan, Odoo erişim kontrolünü ve kayıt kurallarını nasıl yönetiyor?

Aracı, aracının ihtiyaçlarına göre özel olarak yapılandırılmış bir role sahip, özel bir Odoo hizmeti kullanıcısı olarak kimlik doğrulaması yapar. Odoo'nun erişim kontrol listeleri (ACL'ler) ve kayıt kuralları, tıpkı bir insan kullanıcı için olduğu gibi aracı kullanıcı için de geçerlidir. Aracı, izninin olmadığı bir işlemi denerse Odoo, aracının hata işleyicisinin günlüğe kaydedip ilettiği bir erişim hatası döndürür. Bu, Odoo güvenlik modelinizin yetkili erişim kontrolü kaynağı olmaya devam ettiği anlamına gelir.

Ajan yürütme sırasında Odoo sunucusu geçici olarak kullanılamıyorsa ne olur?

Odoo aracı tanımı, üstel geri çekilmeyle yeniden deneme mantığına sahiptir. Geçici hatalar için (HTTP 503, bağlantı zaman aşımı), aracı 5 saniyelik, 15 saniyelik ve 30 saniyelik gecikmelerle en fazla üç kez yeniden dener. Kalıcı arızalar için görev, atılacak iletiler kuyruğuna yönlendirilir ve operasyon ekibine bir uyarı gönderilir. Aracının çalışma belleği, yeniden deneme denemelerinde görev durumunu sürdürdüğü için uçuş sırasındaki görev verileri kaybolmaz.

Aracı, Odoo'da belirli kullanıcılar adına kayıt oluşturabilir mi?

Evet. Odoo JSON-RPC API, hizmet hesabının gerekli izinlere sahip olması durumunda uid parametresi aracılığıyla bağlam tabanlı kullanıcı kimliğine bürünmeyi destekler. Bu, temsilci tarafından oluşturulan satın alma siparişlerinin, o ürün kategorisinden sorumlu alıcı tarafından oluşturulmuş gibi görünmesine olanak tanıyarak Odoo'daki denetim takibini ve bildirim yönlendirmesini korur. Hizmet hesabı kimliğinin taklit edilmesi veya kullanılması, ECOSIRE'ın müşterilerin denetim gereksinimlerine göre almasına yardımcı olduğu bir politika kararıdır.

Entegrasyon, Odoo çok şirketli yapılandırmaları nasıl ele alıyor?

Çok şirketli Odoo örnekleri için, aracı bildirimi bir şirket eşleme yapılandırmasını içerir. Olayları işlerken veya API çağrıları yaparken aracı, Odoo oturumunda uygun şirket içeriğini ayarlar. Şirketler arası şirketler arası işlemler (şirketler arası satın almalar, transferler), temsilci tarafından her şirketin bağlamında ayrı API çağrıları yapılarak ve elde edilen kayıtlar birbirine bağlanarak gerçekleştirilir.


Sonraki Adımlar

Odoo güçlü bir platformdur ancak akıllı bir otomasyon katmanı, yerel otomasyon kurallarının çözemediği operasyonel karmaşıklığı ele aldığında tam potansiyeline ulaşır. OpenClaw temsilcileri, Odoo'nun takip edebildikleri ile operasyon ekibinizin yapması gerekenler arasındaki boşluğu kapatır.

ECOSIRE'ın OpenClaw Odoo entegrasyon hizmeti, Odoo modüllerinize göre kalibre edilmiş önceden oluşturulmuş aracılar, özel iş akışı otomasyonu ve sürekli optimizasyon sağlar. Ekibimiz hem OpenClaw aracısı geliştirmede hem de Odoo işlevsel yapılandırmasında derin uzmanlığa sahiptir; her iki alan arasında köprü oluşturuyoruz.

Odoo otomasyon gereksinimlerinizi görüşmek ve özel bir uygulama planı almak için ECOSIRE ile iletişime geçin.

E

Yazan

ECOSIRE Research and Development Team

ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.

WhatsApp'ta Sohbet Et