Automatiseerimine
Jätkake tööd nii nagu praegu.
Teie PIM-is, ERP-s, DAM-is või jagatud kaustas on andmed ja fotod juba olemas. Valige esimene sobiv retsept: kõik töötavad iga Open Brand Exchange'i portaaliga.
$ 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: exportMilline retsept teile sobib?
| Teil on… | Kasutage | Vajalik kood |
|---|---|---|
| CSV või zip veebiaadressil, SFTP-serveris või S3-ämbris | Ajastatud import | puudub |
| kaust, kuhu ekspordid jõuavad | obx watch | puudub |
| server või arvuti, mis käitab öösel ülesandeid | cron või Tööajasti | üks rida |
| ekspordid Giti hoidlas | GitHub Action | üks YAML-fail |
| n8n, Make või Zapier | HTTP-sammud | puudub (visuaalne) |
| arendaja, kes ühendab teie PIM-i või ERP | API otse | natuke |
Üks vorming kõigeks
Kõik avaldamisviisid loevad sama: products.csv ühe reaga suuruse kohta ja fotod nimega {style}_{color}_{position}.jpg (mudel, värv, asukoht). Kui see on olemas, töötab iga allpool olev retsept.
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.jpgMida vajate
Avage halduses Automaatne üleslaadimine → Juurdepääsuvõtmed ja looge uus võti. Teil on siis kaks väärtust: portaali aadress (OBX_URL) ja võti ise (OBX_TOKEN). Võtit näidatakse ainult üks kord.
export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_… # admin → Automatic upload → Access keys (shown once)Andke igale süsteemile oma võti. Nii saate ühe tühistada ilma teisi rikkumata.
1. Ajastatud import (ilma koodita)
Halduses: Automaatne üleslaadimine → Ajastatud impordid → Lisa ajastatud import. Valige allikas ja kui sageli see käivitub.
- Veebiaadress (HTTPS): products.csv või products.csv ja fotosid sisaldava zip-faili aadress. Sisselogimisandmed salvestatakse krüptitult.
- SFTP: server, kasutaja, parool või võti ning ekspordiga kaust.
- S3-ämber: AWS S3, Cloudflare R2, MinIO või Backblaze: lõpp-punkt, ämber, kaust ja kirjutuskaitstud võti.
Valige „Ainult lisa ja uuenda” või „Võta puuduvad tooted ka võrgust maha”. Teine võtab maha ka selle, mis failist kadus, kuid peatub, kui kaoks üle poole brändist, nii et vigane eksport ei tühjenda kunagi teie kataloogi. „Testi ühendust” näitab, milliseid faile see loeks.
Tööriist obx
obx on üks programm Windowsile, macOS-ile ja Linuxile. See loeb keskkonnast OBX_URL-i ja OBX_TOKEN-i, laadib üles ainult uued või muudetud fotod, teeb vajaduse korral veebiversioonid ja ootab, kuni portaal on kõik töödelnud. Käivitage seda nii sageli, kui soovite: muutmata tooted ei maksa midagi.
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 errorsVäljumiskood 0 = kõik korras, 2 = valmis, kuid mõnel real oli vigu (need loetletakse), 1 = ebaõnnestus.
2. Kaust, mis avaldab end ise: obx watch
Laske PIM-il, ERP-l või kolleegil salvestada ekspordid kausta. obx watch avaldab kohe, kui midagi muutub, ja jätab muutmata fotod vahele. Käivitage see teenusena või Dockeriga:
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 või Windowsi Tööajasti
# 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
Salvestage OBX_URL ja OBX_TOKEN hoidla saladustena. Sama töötab GitLab CI-s, Bitbucketis või Azure DevOpsis: paigaldage obx ja käivitage 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 või Zapier
Kasutage tavalist HTTP Request sammu päisega Authorization: Bearer ja oma võtmega. Iga sammu võib ohutult korrata: samade andmete kaks korda saatmine ei muuda midagi.
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>Portaal Cloudflare'ile ei tee fotodest ise veebiversioone. Avaldage seal obx-iga või haldusliidese kaudu „Impordid”: need teevad need teie eest. Muul viisil saabunud fotod, näiteks ajastatud impordist, näidatakse seni originaalsuuruses.
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json
{"status": "unpublished"}Soovite teadet, kui midagi juhtub? Lisage halduses teavitus (webhook) lõppenud impordi või uue juurdepääsutaotluse kohta ja laske sellel käivitada päästik n8n-is, Make'is või Zapieris.
6. API otse (arendajatele)
Liides mäletab, mida see viimati saatis, ja saadab ainult muudatused, partiidena. Või saatke CSV nii, nagu see on, ja laske portaalil see lugeda.
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>Kõik üksikasjad on spetsifikatsioonis:Ingest API ·automatiseerimise retseptid ·Go SDK ·Arendajatele