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.

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

Vilket recept passar dig?

Du har…AnvändKod som krävs
en CSV eller zip på en webbadress, SFTP-server eller S3-bucketSchemalagd importingen
en mapp där exporter hamnarobx watchingen
en server eller dator som kör jobb på nattencron eller Schemaläggarenen rad
dina exporter i ett Git-repoGitHub Actionen YAML-fil
n8n, Make eller ZapierHTTP-stegingen (visuellt)
en utvecklare som kopplar ditt PIM eller ERPAPI:et direktlite

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.

products.csv (förkortad)
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
Filnamn för bilder
images/
  KO-1001_NVY_1.jpg     ← style KO-1001, colour NVY, position 1 (front)
  KO-1001_NVY_2.jpg
  KO-1001_NVY_3.jpg

Hela importformatet

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

Slutkod 0 = allt gick bra, 2 = klart men vissa rader hade fel (de listas), 1 = misslyckades.

Ladda ner obx · obx-go

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/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 eller Windows Schemaläggaren

Linux eller 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, en gång)
$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/images

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

Artikel (till exempel när den ändras i ditt 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}]}]}
Färg och storlek, med 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"}
Bild: först uppgifterna, sedan själva filen
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.

Ta något offline
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.

Hoppa över bilder som portalen redan har och skicka en omgång
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"
En CSV och en zip med bilder på en gång
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