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
- Schedule Trigger — laukaisee workflown ajastuksen mukaan
- Odoo-haku — hakee muuttuneet tietueet
write_date > edellinen_ajo-suodattimella - Muunnos — transformoi Odoo-kentät Custobar-muotoon (Code node)
- Eräkoonti — ryhmittelee tietueet 100 kpl:n eriin
- Lähetyssilmukka — lähettää erät yksi kerrallaan Custobar-rajapintaan
- Wait — 5–10 s tauko kutsujen välillä (rate limiting)
- Aikaleiman tallennus — tallentaa synkronointiajan n8n:n
staticData-muuttujaan
Inkrementaalinen synkronointi
Workflowt käyttävät Odoon write_date-kenttää muutosseurantaan:
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.