Automatizavimas

Dirbkite taip, kaip dirbate dabar.

Jūsų PIM, ERP, DAM ar bendras aplankas jau turi duomenis ir nuotraukas. Pasirinkite pirmą tinkamą receptą: visi veikia su bet kuriuo Open Brand Exchange portalu.

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

Kuris receptas jums tinka?

Turite…NaudokiteReikalingas kodas
CSV ar zip interneto adresu, SFTP serveryje ar S3 saugyklojeSuplanuotas importasnereikia
aplanką, į kurį patenka eksportaiobx watchnereikia
serverį ar kompiuterį, kuris naktį vykdo užduotiscron arba Užduočių planuoklisviena eilutė
eksportus Git saugyklojeGitHub Actionvienas YAML failas
n8n, Make ar ZapierHTTP žingsniainereikia (vizualiai)
kūrėją, kuris prijungia jūsų PIM ar ERPAPI tiesiogiaišiek tiek

Vienas formatas viskam

Visi publikavimo būdai skaito tą patį: products.csv su viena eilute kiekvienam dydžiui ir nuotraukas pavadinimu {style}_{color}_{position}.jpg (modelis, spalva, pozicija). Kai tai turite, veikia kiekvienas žemiau esantis receptas.

products.csv (sutrumpinta)
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
Nuotraukų failų pavadinimai
images/
  KO-1001_NVY_1.jpg     ← style KO-1001, colour NVY, position 1 (front)
  KO-1001_NVY_2.jpg
  KO-1001_NVY_3.jpg

Visas importo formatas

Ko jums reikia

Administravimo skiltyje atidarykite Automatinis įkėlimas → Prieigos raktai ir sukurkite naują raktą. Turėsite dvi reikšmes: portalo adresą (OBX_URL) ir patį raktą (OBX_TOKEN). Raktas rodomas tik vieną kartą.

export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_…   # admin → Automatic upload → Access keys (shown once)

Kiekvienai sistemai duokite atskirą raktą. Tada galėsite atšaukti vieną, nesugadindami kitų.

1. Suplanuotas importas (be kodo)

Administravime: Automatinis įkėlimas → Suplanuoti importai → Pridėti suplanuotą importą. Pasirinkite šaltinį ir dažnumą.

  • Interneto adresas (HTTPS): products.csv arba zip archyvo su products.csv ir nuotraukomis adresas. Prisijungimo duomenys saugomi užšifruoti.
  • SFTP: serveris, naudotojas, slaptažodis ar raktas ir aplankas su eksportu.
  • S3 saugykla: AWS S3, Cloudflare R2, MinIO ar Backblaze: galinis taškas, saugykla, aplankas ir tik skaitymo raktas.

Pasirinkite „Tik pridėti ir atnaujinti“ arba „Atšaukti ir trūkstamas prekes“. Antrasis atšaukia ir tai, kas dingo iš failo, bet sustoja, jei dingtų daugiau nei pusė prekės ženklo, todėl sugedęs eksportas niekada neištuštins jūsų katalogo. „Tikrinti ryšį“ parodo, kuriuos failus nuskaitytų.

Įrankis obx

obx yra viena programa Windows, macOS ir Linux. Ji nuskaito OBX_URL ir OBX_TOKEN iš aplinkos, įkelia tik naujas ar pakeistas nuotraukas, prireikus sukuria interneto versijas ir laukia, kol portalas viską apdoros. Paleiskite ją kiek norite dažnai: nepakitusios prekės nieko nekainuoja.

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

Išėjimo kodas 0 = viskas gerai, 2 = baigta, bet kai kuriose eilutėse buvo klaidų (jos išvardytos), 1 = nepavyko.

Atsisiųsti obx · obx-go

2. Aplankas, kuris publikuoja save: obx watch

Leiskite PIM, ERP ar kolegai įrašyti eksportus į aplanką. obx watch publikuoja, kai tik kas nors pasikeičia, ir praleidžia nepakitusias nuotraukas. Paleiskite kaip paslaugą arba su Docker:

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 arba Windows Užduočių planuoklis

Linux arba 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, vieną kartą)
$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

Įrašykite OBX_URL ir OBX_TOKEN kaip saugyklos paslaptis. Taip pat veikia GitLab CI, Bitbucket ar Azure DevOps: įdiekite obx ir paleiskite 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 ar Zapier

Naudokite įprastą HTTP Request žingsnį su antrašte Authorization: Bearer ir savo raktu. Kiekvieną žingsnį galima saugiai kartoti: tų pačių duomenų išsiuntimas du kartus nieko nepakeičia.

Prekė (pavyzdžiui, kai ji pasikeičia PIM)
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}]}]}
Spalva ir dydis su EAN
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"}
Nuotrauka: pirmiausia duomenys, tada pats failas
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>

Portalas Cloudflare pats nekuria nuotraukų žiniatinklio versijų. Ten skelbkite su obx arba per „Importai“ administravime: jie jas sukuria už jus. Kitu būdu gautos nuotraukos, pvz., iš suplanuoto importo, iki tol rodomos originalaus dydžio.

Ko nors atšaukimas
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json

{"status": "unpublished"}

Norite pranešimo, kai kas nors įvyksta? Administravime pridėkite pranešimą (webhook) apie baigtą importą ar naują prieigos prašymą ir leiskite jam paleisti trigerį n8n, Make ar Zapier.

6. API tiesiogiai (kūrėjams)

Integracija prisimena, ką išsiuntė paskutinį kartą, ir siunčia tik pakeitimus, paketais. Arba išsiųskite CSV tokį, koks yra, ir leiskite portalui jį nuskaityti.

Praleisti nuotraukas, kurias portalas jau turi, ir išsiųsti vieną 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 ir zip su nuotraukomis vienu kartu
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>

Visos detalės yra specifikacijoje:Ingest API ·automatizavimo receptai ·Go SDK ·Kūrėjams