Automatizacija
Radite kao i dosad.
Vaš PIM, ERP, DAM ili zajednička mapa već ima podatke i fotografije. Odaberite prvi recept koji odgovara: svi rade sa svakim portalom Open Brand Exchange.
$ obx push ./export
Publishing to brands.kestrel.example (Kestrel, Kestrel Trail)
images: 27 checked, 3 uploaded (4.2 MB) in 3s
Done: rows: 40, images: 27 → new: 2 · updated: 3 · unchanged: 35# .github/workflows/publish.yml
on:
push:
paths: ["export/**"]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: openbrandexchange/obx-go/push-action@v0
with:
url: ${{ secrets.OBX_URL }}
token: ${{ secrets.OBX_TOKEN }}
folder: exportKoji vam recept odgovara?
| Imate… | Koristite | Potreban kod |
|---|---|---|
| CSV ili zip na web adresi, SFTP poslužitelju ili u S3 spremniku | Planirani uvoz | nema |
| mapu u koju stižu izvozi | obx watch | nema |
| poslužitelj ili računalo koje noću pokreće zadatke | cron ili Planer zadataka | jedan redak |
| izvoze u Git repozitoriju | GitHub Action | jedna YAML datoteka |
| n8n, Make ili Zapier | HTTP koraci | nema (vizualno) |
| programera koji povezuje vaš PIM ili ERP | Izravno API | malo |
Jedan format za sve
Svi načini objave čitaju isto: products.csv s jednim retkom po veličini i fotografije nazvane {style}_{color}_{position}.jpg (model, boja, pozicija). Kad to imate, radi svaki recept u nastavku.
brand,style_number,name:en,name:nl,item_type,season,materials,color_code,color_name:en,size,gtin
Kestrel,KO-1001,Merino Crew Sweater,Merino trui met ronde hals,sweater,AW26,main: 100% merino_wool,NVY,Navy,S,2000100101018
Kestrel,KO-1001,Merino Crew Sweater,Merino trui met ronde hals,sweater,AW26,main: 100% merino_wool,NVY,Navy,M,2000100101025images/
KO-1001_NVY_1.jpg ← style KO-1001, colour NVY, position 1 (front)
KO-1001_NVY_2.jpg
KO-1001_NVY_3.jpgŠto vam treba
U administraciji otvorite Automatsko učitavanje → Pristupni ključevi i izradite novi ključ. Dobivate dvije vrijednosti: adresu portala (OBX_URL) i sam ključ (OBX_TOKEN). Ključ se prikazuje samo jednom.
export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_… # admin → Automatic upload → Access keys (shown once)Svakom sustavu dajte vlastiti ključ. Tako možete opozvati jedan, a da ne pokvarite ostale.
1. Planirani uvoz (bez koda)
U administraciji: Automatsko učitavanje → Planirani uvozi → Dodaj planirani uvoz. Odaberite izvor i koliko se često pokreće.
- Web adresa (HTTPS): adresa datoteke products.csv ili zip arhive s products.csv i fotografijama. Podaci za prijavu pohranjuju se šifrirano.
- SFTP: poslužitelj, korisnik, lozinka ili ključ te mapa s izvozom.
- S3 spremnik: AWS S3, Cloudflare R2, MinIO ili Backblaze: krajnja točka, spremnik, mapa i ključ samo za čitanje.
Odaberite „Samo dodaj i ažuriraj” ili „Povuci i artikle koji nedostaju”. Druga opcija povlači i ono što je nestalo iz datoteke, ali se zaustavlja ako bi nestalo više od polovice marke, pa neispravan izvoz nikad ne isprazni vaš katalog. „Testiraj vezu” pokazuje koje bi datoteke pročitao.
Alat obx
obx je jedan program za Windows, macOS i Linux. Čita OBX_URL i OBX_TOKEN iz okruženja, prenosi samo nove ili promijenjene fotografije, po potrebi izrađuje web verzije i čeka dok portal sve ne obradi. Pokrećite ga koliko god često želite: nepromijenjeni artikli ne koštaju ništa.
obx info # check the token, see limits and brands
obx push --csv products.csv --images ./images # publish a CSV and a folder (or zip) of images
obx push --package export.zip # the same, as one zip
obx push --csv products.csv --images ./images --mirror # also take offline what is no longer in the file
obx push --csv products.csv --images ./images --dry-run # only check, change nothing
obx watch ./outbox # keep publishing whatever lands in a folder
obx status # recent jobs and their errorsIzlazni kod 0 = sve u redu, 2 = gotovo, ali neki reci imaju pogreške (navedene su), 1 = neuspjeh.
2. Mapa koja se sama objavljuje: obx watch
Neka PIM, ERP ili kolega sprema izvoze u mapu. obx watch objavljuje čim se nešto promijeni i preskače nepromijenjene fotografije. Pokrenite ga kao uslugu ili s Dockerom:
obx watch /data/outboxdocker run -d --restart unless-stopped \
-e OBX_URL -e OBX_TOKEN \
-v /data/outbox:/outbox \
ghcr.io/openbrandexchange/obx watch /outbox3. cron ili Windows Planer zadataka
# crontab -e: every night at 02:30
30 2 * * * OBX_URL=https://brands.kestrel.example OBX_TOKEN=obxi_… /usr/local/bin/obx push --csv /exports/products.csv --images /exports/images >> /var/log/obx.log 2>&1$action = New-ScheduledTaskAction -Execute "C:\Tools\obx.exe" -Argument "push --csv D:\Export\products.csv --images D:\Export\images"
$trigger = New-ScheduledTaskTrigger -Daily -At 2:30am
[Environment]::SetEnvironmentVariable("OBX_URL", "https://brands.kestrel.example", "Machine")
[Environment]::SetEnvironmentVariable("OBX_TOKEN", "obxi_…", "Machine")
Register-ScheduledTask -TaskName "Publish to OBX" -Action $action -Trigger $trigger -User "SYSTEM"4. GitHub Action
Spremite OBX_URL i OBX_TOKEN kao tajne repozitorija. Isto radi u GitLab CI, Bitbucketu ili Azure DevOpsu: instalirajte obx i pokrenite obx push.
# .github/workflows/publish.yml (secrets: OBX_URL, OBX_TOKEN)
name: Publish product content
on:
push:
branches: [main]
paths: ["export/**"]
schedule:
- cron: "30 2 * * *"
workflow_dispatch:
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install obx
run: |
curl -fsSL https://github.com/openbrandexchange/obx-go/releases/latest/download/obx_linux_amd64.tar.gz | tar -xz obx
sudo mv obx /usr/local/bin/
- name: Publish
env:
OBX_URL: ${{ secrets.OBX_URL }}
OBX_TOKEN: ${{ secrets.OBX_TOKEN }}
run: obx push --csv export/products.csv --assets-csv export/assets.csv --images export/images5. n8n, Make ili Zapier
Koristite običan korak HTTP Request sa zaglavljem Authorization: Bearer i vašim ključem. Svaki korak možete sigurno ponoviti: dvostruko slanje istih podataka ništa ne mijenja.
PUT {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/json
{"style_number": "KO-1001",
"name": {"en": "Merino Crew Sweater", "nl": "Merino trui met ronde hals"},
"item_type": "sweater", "season": "AW26",
"materials": [{"part": "main", "fibers": [{"fiber": "merino_wool", "percentage": 100}]}]}PUT {OBX_URL}/obx/v1/ingest/variants/2000100101025
Authorization: Bearer obxi_…
Content-Type: application/json
{"product_external_id": "KO-1001", "gtin": "2000100101025",
"color": {"code": "NVY", "name": {"en": "Navy"}}, "size": "M"}PUT {OBX_URL}/obx/v1/ingest/assets/KO-1001_NVY_1
Authorization: Bearer obxi_…
Content-Type: application/json
{"product_external_id": "KO-1001", "color_code": "NVY",
"role": "packshot", "view": "front", "position": 1}
PUT {OBX_URL}/obx/v1/ingest/assets/KO-1001_NVY_1/files/original
Authorization: Bearer obxi_…
Content-Type: image/jpeg
<the image file as binary body>Portal za Cloudflare sam ne izrađuje web-verzije fotografija. Ondje objavljujte pomoću obx ili putem „Uvozi” u administraciji: oni ih izrađuju za vas. Fotografije koje stignu drugim putem, npr. zakazanim uvozom, dotad se prikazuju u izvornoj veličini.
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json
{"status": "unpublished"}Želite obavijest kad se nešto dogodi? U administraciji dodajte obavijest (webhook) za dovršeni uvoz ili novi zahtjev za pristup i neka pokrene okidač u n8n, Make ili Zapier.
6. Izravno API (za programere)
Integracija pamti što je zadnji put poslala i šalje samo promjene, u paketima. Ili pošaljite CSV kakav jest i neka ga portal pročita.
URL="$OBX_URL/obx/v1/ingest"; AUTH="Authorization: Bearer $OBX_TOKEN"
# 1. Upload only the images the node does not have yet (addressed by sha256).
for f in images/*.jpg; do
sha=$(shasum -a 256 "$f" | cut -d' ' -f1)
curl -sf -I -H "$AUTH" "$URL/blobs/$sha" >/dev/null || \
curl -sf -X PUT -H "$AUTH" -H 'Content-Type: image/jpeg' --data-binary @"$f" "$URL/blobs/$sha"
done
# 2. One batch of up to 1000 operations (NDJSON), processed in order.
cat > batch.ndjson <<'EOF'
{"op":"upsert","kind":"product","external_id":"KO-1001","data":{"style_number":"KO-1001","name":{"en":"Merino Crew Sweater"}}}
{"op":"upsert","kind":"variant","external_id":"2000100101025","data":{"product_external_id":"KO-1001","gtin":"2000100101025","color":{"code":"NVY"},"size":"M"}}
{"op":"unpublish","kind":"product","external_id":"KO-0999"}
EOF
curl -s -X POST -H "$AUTH" -H 'Content-Type: application/x-ndjson' \
-H "Idempotency-Key: nightly-$(date +%F)" --data-binary @batch.ndjson "$URL/batch"curl -s -X POST -H "Authorization: Bearer $OBX_TOKEN" \
-F [email protected] -F [email protected] \
-F 'options={"mode":"upsert"};type=application/json' \
"$OBX_URL/obx/v1/ingest/imports" # returns a job; poll $OBX_URL/obx/v1/ingest/jobs/<id>Sve pojedinosti su u specifikaciji:Ingest API ·recepti za automatizaciju ·Go SDK ·Za programere