Awtomazzjoni

Kompli aħdem kif taħdem issa.

Il-PIM, l-ERP, id-DAM jew folder kondiviż tiegħek diġà għandu d-data u r-ritratti. Agħżel l-ewwel riċetta li taqbel: kollha jaħdmu ma' kull portal ta' 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

Liema riċetta taqbel miegħek?

Għandek…UżaKodiċi meħtieġ
CSV jew zip fuq indirizz web, server SFTP jew bucket S3Importazzjoni skedataxejn
folder fejn jaslu l-esportazzjonijietobx watchxejn
server jew PC li jħaddem xogħlijiet bil-lejlcron jew Task Schedulerlinja waħda
l-esportazzjonijiet tiegħek f'repożitorju GitGitHub Actionfajl YAML wieħed
n8n, Make jew ZapierPassi HTTPxejn (viżwali)
żviluppatur li jgħaqqad il-PIM jew l-ERP tiegħekL-API direttamentftit

Format wieħed għal kollox

Kull mod ta' pubblikazzjoni jaqra l-istess ħaġa: products.csv b'linja waħda għal kull daqs, u ritratti msemmija {style}_{color}_{position}.jpg (stil, kulur, pożizzjoni). Ladarba għandek dan, kull riċetta hawn taħt taħdem.

products.csv (imqassar)
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
Ismijiet tal-fajls tar-ritratti
images/
  KO-1001_NVY_1.jpg     ← style KO-1001, colour NVY, position 1 (front)
  KO-1001_NVY_2.jpg
  KO-1001_NVY_3.jpg

Il-format sħiħ tal-importazzjoni

X'għandek bżonn

Fl-amministrazzjoni tiegħek, mur fuq Tlugħ awtomatiku → Ċwievet tal-aċċess u oħloq ċavetta ġdida. Imbagħad ikollok żewġ valuri: l-indirizz tal-portal tiegħek (OBX_URL) u ċ-ċavetta nnifisha (OBX_TOKEN). Iċ-ċavetta tintwera darba biss.

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

Agħti lil kull sistema ċ-ċavetta tagħha. Imbagħad tista' tirrevoka waħda mingħajr ma tkisser l-oħrajn.

1. Importazzjoni skedata (mingħajr kodiċi)

Fl-amministrazzjoni tiegħek: Tlugħ awtomatiku → Importazzjonijiet skedati → Żid importazzjoni skedata. Agħżel is-sors u kemm-il darba jaħdem.

  • Indirizz web (HTTPS): l-indirizz ta' products.csv, jew ta' zip b'products.csv u ritratti. Id-dettalji tal-login jinħażnu kriptati.
  • SFTP: server, utent, password jew ċavetta, u l-folder bl-esportazzjoni.
  • Bucket S3: AWS S3, Cloudflare R2, MinIO jew Backblaze: endpoint, bucket, folder u ċavetta read-only.

Agħżel "Żid u aġġorna biss" jew "Irtira wkoll l-oġġetti neqsin". It-tieni waħda tirtira wkoll dak li għeb mill-fajl, iżda tieqaf jekk kieku jgħib aktar minn nofs marka, biex esportazzjoni difettuża qatt ma tbattal il-katalgu tiegħek. "Ittestja l-konnessjoni" juri liema fajls jaqra.

L-għodda obx

obx huwa programm wieħed għal Windows, macOS u Linux. Jaqra OBX_URL u OBX_TOKEN mill-ambjent, itella' biss ritratti ġodda jew mibdula, jagħmel il-verżjonijiet web meta jkun meħtieġ u jistenna sakemm il-portal tiegħek jipproċessa kollox. Ħaddmu kemm-il darba trid: l-oġġetti mhux mibdula ma jiswew xejn.

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

Kodiċi tal-ħruġ 0 = kollox sew, 2 = lest imma xi linji kellhom żbalji (jiġu elenkati), 1 = falla.

Niżżel obx · obx-go

2. Folder li jippubblika lilu nnifsu: obx watch

Ħalli l-PIM, l-ERP jew kollega jsalva l-esportazzjonijiet f'folder. obx watch jippubblika hekk kif xi ħaġa tinbidel u jaqbeż ir-ritratti li baqgħu l-istess. Ħaddmu bħala servizz, jew b'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 jew Windows Task Scheduler

Linux jew 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, darba)
$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

Aħżen OBX_URL u OBX_TOKEN bħala sigrieti tar-repożitorju. L-istess jaħdem f'GitLab CI, Bitbucket jew Azure DevOps: installa obx u ħaddem 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 jew Zapier

Uża pass HTTP Request normali bl-header Authorization: Bearer segwit miċ-ċavetta tiegħek. Kull pass jista' jiġi ripetut mingħajr periklu: li tibgħat l-istess data darbtejn ma jbiddel xejn.

Oġġett (pereżempju meta jinbidel fil-PIM tiegħek)
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}]}]}
Kulur u daqs, bl-EAN tiegħu
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"}
Ritratt: l-ewwel id-dettalji, imbagħad il-fajl innifsu
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>

Il-Portal għal Cloudflare ma jagħmilx hu stess verżjonijiet tal-web tar-ritratti. Hemmhekk ippubblika b'obx jew minn "Importazzjonijiet" fl-amministrazzjoni tiegħek: huma jagħmluhom għalik. Ir-ritratti li jaslu b'mod ieħor, bħal minn importazzjoni skedata, jintwerew sa dak iż-żmien fid-daqs oriġinali.

Tneħħi xi ħaġa offline
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json

{"status": "unpublished"}

Trid sinjal meta jiġri xi ħaġa? Fl-amministrazzjoni tiegħek, żid notifika (webhook) għal importazzjoni lesta jew talba ġdida għall-aċċess, u ħalliha tibda trigger f'n8n, Make jew Zapier.

6. L-API direttament (għall-iżviluppaturi)

Integrazzjoni tiftakar x'bagħtet l-aħħar darba u tibgħat biss il-bidliet, f'lottijiet. Jew ibgħat is-CSV kif inhu u ħalli l-portal jaqrah.

Aqbeż ir-ritratti li l-portal diġà għandu, imbagħad ibgħat lott wieħed
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 u zip ta' ritratti f'daqqa
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>

Kull dettall jinsab fl-ispeċifikazzjoni:Ingest API ·riċetti tal-awtomazzjoni ·Go SDK ·Għall-iżviluppaturi