Automatisering
Fortsätt arbeta som du gör i dag.
Ditt PIM, ERP, DAM eller en delad mapp har redan data och bilder. Välj det första receptet som passar: alla fungerar med alla 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: exportVilket recept passar dig?
| Du har… | Använd | Kod som krävs |
|---|---|---|
| en CSV eller zip på en webbadress, SFTP-server eller S3-bucket | Schemalagd import | ingen |
| en mapp där exporter hamnar | obx watch | ingen |
| en server eller dator som kör jobb på natten | cron eller Schemaläggaren | en rad |
| dina exporter i ett Git-repo | GitHub Action | en YAML-fil |
| n8n, Make eller Zapier | HTTP-steg | ingen (visuellt) |
| en utvecklare som kopplar ditt PIM eller ERP | API:et direkt | lite |
Ett format för allt
Alla sätt att publicera läser samma sak: en products.csv med en rad per storlek, och bilder med namnet {style}_{color}_{position}.jpg (artikel, färg, position). När du har det fungerar alla recept nedan.
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.jpgDet här behöver du
Gå till Automatisk uppladdning → Åtkomstnycklar i din administration och skapa en ny nyckel. Då har du två värden: adressen till din portal (OBX_URL) och själva nyckeln (OBX_TOKEN). Nyckeln visas bara en gång.
export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_… # admin → Automatic upload → Access keys (shown once)Ge varje system en egen nyckel. Då kan du återkalla en utan att de andra slutar fungera.
1. Schemalagd import (utan kod)
I din administration: Automatisk uppladdning → Schemalagda importer → Lägg till schemalagd import. Välj källa och hur ofta den ska köras.
- Webbadress (HTTPS): adressen till en products.csv, eller till en zip med products.csv och bilder. Inloggningsuppgifter lagras krypterade.
- SFTP: server, användare, lösenord eller nyckel, och mappen med exporten.
- S3-bucket: AWS S3, Cloudflare R2, MinIO eller Backblaze: endpoint, bucket, mapp och en skrivskyddad nyckel.
Välj ”Bara lägg till och uppdatera” eller ”Ta även saknade artiklar offline”. Det andra tar även offline det som försvann ur filen, men stoppar om mer än hälften av ett varumärke skulle försvinna, så att en trasig export aldrig tömmer er katalog. ”Testa anslutningen” visar vilka filer den skulle läsa.
Verktyget obx
obx är ett enda program för Windows, macOS och Linux. Det läser OBX_URL och OBX_TOKEN från miljön, laddar bara upp nya eller ändrade bilder, skapar webbversionerna vid behov och väntar tills portalen har bearbetat allt. Kör det så ofta du vill: oförändrade artiklar kostar 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 errorsSlutkod 0 = allt gick bra, 2 = klart men vissa rader hade fel (de listas), 1 = misslyckades.
2. En mapp som publicerar sig själv: obx watch
Låt ditt PIM, ERP eller en kollega spara exporter i en mapp. obx watch publicerar så fort något ändras och hoppar över bilder som är oförändrade. Kör det som tjänst, 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 Schemaläggaren
# 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
Spara OBX_URL och OBX_TOKEN som repository secrets. Samma sak fungerar i GitLab CI, Bitbucket eller Azure DevOps: installera obx och kö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
Använd ett vanligt HTTP Request-steg med headern Authorization: Bearer följt av din nyckel. Alla steg kan upprepas utan risk: att skicka samma data två gånger ändrar 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 för Cloudflare gör inte själv webbversioner av foton. Publicera där med obx eller via ”Importer” i administrationen: de gör dem åt er. Foton som kommer in på annat sätt, till exempel via en schemalagd import, visas fram till dess i originalstorlek.
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json
{"status": "unpublished"}Vill du få besked när något händer? Lägg till en avisering (webhook) i din administration för en färdig import eller en ny åtkomstansökan, och låt den starta en trigger i n8n, Make eller Zapier.
6. API:et direkt (för utvecklare)
En integration kommer ihåg vad den skickade senast och skickar bara ändringar, i omgångar. Eller skicka CSV:n som den är och låt portalen läsa 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>Alla detaljer finns i specifikationen:Ingest API ·automatiseringsrecept ·Go-SDK ·Utvecklare