Automatisering
Fortsett å jobbe slik du gjør i dag.
PIM, ERP, DAM eller en delt mappe har allerede dataene og bildene. Velg den første oppskriften som passer: alle fungerer med alle Open Brand Exchange-portaler.
$ 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: exportHvilken oppskrift passer deg?
| Du har … | Bruk | Kode som trengs |
|---|---|---|
| en CSV eller zip på en nettadresse, SFTP-server eller S3-bøtte | Planlagt import | ingen |
| en mappe der eksporter havner | obx watch | ingen |
| en server eller PC som kjører jobber om natten | cron eller Oppgaveplanlegging | én linje |
| eksportene dine i et Git-repo | GitHub Action | én YAML-fil |
| n8n, Make eller Zapier | HTTP-steg | ingen (visuelt) |
| en utvikler som kobler til PIM eller ERP | API-et direkte | litt |
Ett format for alt
Alle måter å publisere på leser det samme: en products.csv med én linje per størrelse, og bilder med navnet {style}_{color}_{position}.jpg (varenummer, farge, posisjon). Når du har det, virker alle oppskriftene nedenfor.
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.jpgDette trenger du
Gå til Automatisk opplasting → Tilgangsnøkler i administrasjonen og lag en ny nøkkel. Da har du to verdier: adressen til portalen din (OBX_URL) og selve nøkkelen (OBX_TOKEN). Nøkkelen vises bare én gang.
export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_… # admin → Automatic upload → Access keys (shown once)Gi hvert system sin egen nøkkel. Da kan du trekke tilbake én uten å ødelegge de andre.
1. Planlagt import (uten kode)
I administrasjonen: Automatisk opplasting → Planlagte importer → Legg til planlagt import. Velg kilde og hvor ofte den skal kjøre.
- Nettadresse (HTTPS): adressen til en products.csv, eller til en zip med products.csv og bilder. Innloggingsdata lagres kryptert.
- SFTP: server, bruker, passord eller nøkkel, og mappen med eksporten.
- S3-bøtte: AWS S3, Cloudflare R2, MinIO eller Backblaze: endpoint, bøtte, mappe og en skrivebeskyttet nøkkel.
Velg «Bare legg til og oppdater» eller «Ta også manglende varer offline». Det andre tar også offline det som forsvant fra filen, men stopper hvis mer enn halvparten av et merke ville forsvinne, så en ødelagt eksport aldri tømmer katalogen deres. «Test tilkoblingen» viser hvilke filer den ville lese.
obx-verktøyet
obx er ett program for Windows, macOS og Linux. Det leser OBX_URL og OBX_TOKEN fra miljøet, laster bare opp nye eller endrede bilder, lager webversjonene ved behov og venter til portalen har behandlet alt. Kjør det så ofte du vil: uendrede artikler koster ingenting.
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 errorsAvslutningskode 0 = alt i orden, 2 = ferdig, men noen linjer hadde feil (de listes), 1 = mislyktes.
2. En mappe som publiserer seg selv: obx watch
La PIM, ERP eller en kollega lagre eksporter i en mappe. obx watch publiserer så snart noe endres, og hopper over bilder som er uendret. Kjør det som tjeneste eller med Docker:
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 eller Windows Oppgaveplanlegging
# 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
Lagre OBX_URL og OBX_TOKEN som repository secrets. Det samme fungerer i GitLab CI, Bitbucket eller Azure DevOps: installer obx og kjør 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 eller Zapier
Bruk et vanlig HTTP Request-steg med headeren Authorization: Bearer etterfulgt av nøkkelen din. Alle steg kan trygt gjentas: å sende de samme dataene to ganger endrer ingenting.
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 for Cloudflare lager ikke selv nettversjoner av bilder. Publiser der med obx eller via «Importer» i administrasjonen: de lager dem for dere. Bilder som kommer inn på annen måte, for eksempel via en planlagt import, vises frem til da i original størrelse.
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json
{"status": "unpublished"}Vil du ha beskjed når noe skjer? Legg til et varsel (webhook) i administrasjonen for en ferdig import eller en ny tilgangsforespørsel, og la det starte en trigger i n8n, Make eller Zapier.
6. API-et direkte (for utviklere)
En integrasjon husker hva den sendte sist, og sender bare endringer, i bunker. Eller send CSV-en som den er, og la portalen lese den.
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>Alle detaljer står i spesifikasjonen:Ingest API ·automatiseringsoppskrifter ·Go-SDK ·Utviklere