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.

Terminal
$ 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
publish.ymlGitHub Action
# .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: export

Koji vam recept odgovara?

Imate…KoristitePotreban kod
CSV ili zip na web adresi, SFTP poslužitelju ili u S3 spremnikuPlanirani uvoznema
mapu u koju stižu izvoziobx watchnema
poslužitelj ili računalo koje noću pokreće zadatkecron ili Planer zadatakajedan redak
izvoze u Git repozitorijuGitHub Actionjedna YAML datoteka
n8n, Make ili ZapierHTTP koracinema (vizualno)
programera koji povezuje vaš PIM ili ERPIzravno APImalo

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.

products.csv (skraćeno)
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,2000100101025
Nazivi datoteka fotografija
images/
  KO-1001_NVY_1.jpg     ← style KO-1001, colour NVY, position 1 (front)
  KO-1001_NVY_2.jpg
  KO-1001_NVY_3.jpg

Potpuni format uvoza

Š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 errors

Izlazni kod 0 = sve u redu, 2 = gotovo, ali neki reci imaju pogreške (navedene su), 1 = neuspjeh.

Preuzmi obx · obx-go

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/outbox
Docker
docker run -d --restart unless-stopped \
  -e OBX_URL -e OBX_TOKEN \
  -v /data/outbox:/outbox \
  ghcr.io/openbrandexchange/obx watch /outbox

3. cron ili Windows Planer zadataka

Linux ili macOS
# 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
Windows (PowerShell, jednom)
$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/images

5. 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.

Artikl (na primjer kad se promijeni u PIM-u)
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}]}]}
Boja i veličina s EAN-om
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"}
Fotografija: najprije podaci, zatim sama datoteka
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.

Povlačenje nečega
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.

Preskoči fotografije koje portal već ima i pošalji jedan paket
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"
CSV i zip s fotografijama odjednom
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