Hyppää sisältöön

Arkkitehtuuri

Yleiskuva

flowchart TB
    subgraph odoo["Odoo ERP (odoo01.rst-steel.app)"]
        PP[product.product]
        RP[res.partner]
        SO[sale.order]
        SOL[sale.order.line]
    end

    subgraph n8n["n8n (n8n-rst-stel-app.rst-steel.app)"]
        WF1["📦 Tuotteet"]
        WF2["🧍 Asiakkaat"]
        WF3["🧾 Tilaukset"]
    end

    subgraph custobar["Custobar CDP (rst-steel.custobar.com)"]
        CP[/api/products/upload/]
        CC[/api/customers/upload/]
        CS[/api/sales/upload/]
    end

    PP -->|JSON-RPC| WF1
    RP -->|JSON-RPC| WF2
    SO -->|JSON-RPC| WF3
    SOL -->|JSON-RPC| WF3

    WF1 -->|HTTP POST| CP
    WF2 -->|HTTP POST| CC
    WF3 -->|HTTP POST| CS

Yhteydet ja autentikointi

Odoo (lähde)

  • Protokolla: JSON-RPC (n8n:n sisäänrakennettu Odoo-node)
  • Credential: Odoo account (id: 7exZcC1D5JSvHBdV)
  • Toiminto: search_read — hakee tietueet suodattimilla ja palauttaa valitut kentät

Custobar (kohde)

  • Protokolla: REST API, HTTP POST
  • Autentikointi: HTTP Basic Auth (erillinen credential per endpoint)
  • Credentialit:
Endpoint Credential-nimi Credential-id
/api/products/upload/ products (custobar API) lm38nGn4XmihFp1T
/api/customers/upload/ customers (Custobar API) RdguEnPMXEeMiXzk
/api/sales/upload/ sales (Custobar API) 4BVd3YVJP6SUVN8p

Infrastruktuuri

Komponentti Tekniikka Sijainti
Palvelin Hetzner, Ubuntu 24.04 157.180.11.120
Hallinta CapRover (Docker Swarm) captain.rst-steel.app
n8n v2.9.4 (Docker-kontti) srv-captain--n8n
n8n-tietokanta PostgreSQL (Docker) srv-captain--n8n-rst-stel-app-db

Workflow-malli (yhteinen rakenne)

Kaikki kolme workflowta noudattavat samaa perusrakennetta:

flowchart LR
    A["⏰ Schedule<br/>Trigger"] --> B["📥 Hae Odoosta<br/>(Odoo node)"]
    B --> C["🔄 Muunna<br/>(Code node)"]
    C --> D["📦 Kokoa erät<br/>(Batch Builder)"]
    D --> E["🔁 Loop Over<br/>Items"]
    E -->|erä| F["📤 HTTP POST<br/>Custobariin"]
    F --> G["⏳ Wait"]
    G --> E
    E -->|valmis| H["💾 Tallenna<br/>aikaleima"]
    H --> I["✅ Valmis"]

Vaiheet

  1. Schedule Trigger — laukaisee workflown ajastuksen mukaan
  2. Odoo-haku — hakee muuttuneet tietueet write_date > edellinen_ajo -suodattimella
  3. Muunnos — transformoi Odoo-kentät Custobar-muotoon (Code node)
  4. Eräkoonti — ryhmittelee tietueet 100 kpl:n eriin
  5. Lähetyssilmukka — lähettää erät yksi kerrallaan Custobar-rajapintaan
  6. Wait — 5–10 s tauko kutsujen välillä (rate limiting)
  7. Aikaleiman tallennus — tallentaa synkronointiajan n8n:n staticData-muuttujaan

Inkrementaalinen synkronointi

Workflowt käyttävät Odoon write_date-kenttää muutosseurantaan:

write_date > edellisen_ajon_aikaleima

Aikaleima tallennetaan n8n:n workflow-kohtaiseen staticData-muuttujaan (global.lastSync). Code-nodessa:

// Lue edellinen aikaleima
const lastSync = $getWorkflowStaticData('global').lastSync || '2020-01-01 00:00:00';

// Tallenna uusi aikaleima ajon lopussa
const staticData = $getWorkflowStaticData('global');
staticData.lastSync = new Date().toISOString().replace('T', ' ').substring(0, 19);

Ensimmäinen ajo

Jos lastSync-arvoa ei ole (ensimmäinen ajo tai reset), käytetään oletusaikaa 2020-01-01 00:00:00, jolloin haetaan kaikki tietueet.