Αυτοματοποίηση
Συνεχίστε να δουλεύετε όπως τώρα.
Το PIM, το ERP, το DAM ή ένας κοινόχρηστος φάκελος έχει ήδη τα δεδομένα και τις φωτογραφίες. Διαλέξτε την πρώτη συνταγή που ταιριάζει: όλες λειτουργούν με κάθε πύλη Open Brand Exchange.
$ 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: exportΠοια συνταγή σας ταιριάζει;
| Έχετε… | Χρησιμοποιήστε | Απαιτούμενος κώδικας |
|---|---|---|
| ένα CSV ή zip σε διεύθυνση web, διακομιστή SFTP ή κάδο S3 | Προγραμματισμένη εισαγωγή | κανένας |
| έναν φάκελο όπου καταλήγουν οι εξαγωγές | obx watch | κανένας |
| έναν διακομιστή ή υπολογιστή που εκτελεί εργασίες τη νύχτα | cron ή Χρονοδιάγραμμα εργασιών | μία γραμμή |
| τις εξαγωγές σας σε αποθετήριο Git | GitHub Action | ένα αρχείο YAML |
| n8n, Make ή Zapier | Βήματα HTTP | κανένας (οπτικά) |
| έναν προγραμματιστή που συνδέει το PIM ή ERP σας | Απευθείας το API | λίγος |
Μία μορφή για όλα
Κάθε τρόπος δημοσίευσης διαβάζει το ίδιο: ένα products.csv με μία γραμμή ανά μέγεθος και φωτογραφίες με όνομα {style}_{color}_{position}.jpg (μοντέλο, χρώμα, θέση). Μόλις το έχετε, λειτουργεί κάθε συνταγή παρακάτω.
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.jpgΤι χρειάζεστε
Στη διαχείριση, ανοίξτε την Αυτόματη μεταφόρτωση → Κλειδιά πρόσβασης και δημιουργήστε νέο κλειδί. Έχετε τότε δύο τιμές: τη διεύθυνση της πύλης σας (OBX_URL) και το ίδιο το κλειδί (OBX_TOKEN). Το κλειδί εμφανίζεται μόνο μία φορά.
export OBX_URL=https://brands.kestrel.example
export OBX_TOKEN=obxi_… # admin → Automatic upload → Access keys (shown once)Δώστε σε κάθε σύστημα δικό του κλειδί. Έτσι μπορείτε να ανακαλέσετε ένα χωρίς να χαλάσετε τα υπόλοιπα.
1. Προγραμματισμένη εισαγωγή (χωρίς κώδικα)
Στη διαχείριση: Αυτόματη μεταφόρτωση → Προγραμματισμένες εισαγωγές → Προσθήκη προγραμματισμένης εισαγωγής. Επιλέξτε την πηγή και πόσο συχνά θα εκτελείται.
- Διεύθυνση web (HTTPS): η διεύθυνση ενός products.csv ή ενός zip με products.csv και φωτογραφίες. Τα στοιχεία σύνδεσης αποθηκεύονται κρυπτογραφημένα.
- SFTP: διακομιστής, χρήστης, κωδικός ή κλειδί και ο φάκελος με την εξαγωγή.
- Κάδος S3: AWS S3, Cloudflare R2, MinIO ή Backblaze: endpoint, κάδος, φάκελος και κλειδί μόνο για ανάγνωση.
Επιλέξτε «Μόνο προσθήκη και ενημέρωση» ή «Απόσυρση και των ειδών που λείπουν». Η δεύτερη επιλογή αποσύρει και ό,τι εξαφανίστηκε από το αρχείο, αλλά σταματά αν θα εξαφανιζόταν πάνω από το μισό μιας μάρκας, ώστε μια χαλασμένη εξαγωγή να μην αδειάζει ποτέ τον κατάλογό σας. Το «Έλεγχος σύνδεσης» δείχνει ποια αρχεία θα διαβάζονταν.
Το εργαλείο obx
Το obx είναι ένα ενιαίο πρόγραμμα για Windows, macOS και Linux. Διαβάζει τα OBX_URL και OBX_TOKEN από το περιβάλλον, ανεβάζει μόνο νέες ή αλλαγμένες φωτογραφίες, δημιουργεί τις εκδόσεις web όταν χρειάζεται και περιμένει μέχρι η πύλη να επεξεργαστεί τα πάντα. Εκτελέστε το όσο συχνά θέλετε: τα αμετάβλητα είδη δεν κοστίζουν τίποτα.
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Κωδικός εξόδου 0 = όλα καλά, 2 = ολοκληρώθηκε αλλά κάποιες γραμμές είχαν σφάλματα (εμφανίζονται), 1 = απέτυχε.
2. Ένας φάκελος που δημοσιεύεται μόνος του: obx watch
Αφήστε το PIM, το ERP ή έναν συνάδελφο να αποθηκεύει εξαγωγές σε έναν φάκελο. Το obx watch δημοσιεύει μόλις κάτι αλλάξει και παραλείπει όσες φωτογραφίες έμειναν ίδιες. Εκτελέστε το ως υπηρεσία ή με 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 ή Χρονοδιάγραμμα εργασιών των Windows
# 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
Αποθηκεύστε τα OBX_URL και OBX_TOKEN ως μυστικά του αποθετηρίου. Το ίδιο λειτουργεί σε GitLab CI, Bitbucket ή Azure DevOps: εγκαταστήστε το obx και εκτελέστε 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 ή Zapier
Χρησιμοποιήστε ένα απλό βήμα HTTP Request με την κεφαλίδα Authorization: Bearer ακολουθούμενη από το κλειδί σας. Κάθε βήμα επαναλαμβάνεται με ασφάλεια: η αποστολή των ίδιων δεδομένων δύο φορές δεν αλλάζει τίποτα.
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>Η Πύλη για Cloudflare δεν δημιουργεί μόνη της εκδόσεις web των φωτογραφιών. Δημοσιεύστε εκεί με το obx ή μέσω «Εισαγωγές» στη διαχείριση: αυτά τις δημιουργούν για εσάς. Οι φωτογραφίες που φτάνουν αλλιώς, π.χ. από προγραμματισμένη εισαγωγή, εμφανίζονται μέχρι τότε στο αρχικό μέγεθος.
PATCH {OBX_URL}/obx/v1/ingest/products/KO-1001
Authorization: Bearer obxi_…
Content-Type: application/merge-patch+json
{"status": "unpublished"}Θέλετε ειδοποίηση όταν συμβαίνει κάτι; Στη διαχείριση, προσθέστε μια ειδοποίηση (webhook) για ολοκληρωμένη εισαγωγή ή νέο αίτημα πρόσβασης και αφήστε τη να ενεργοποιεί ένα trigger στο n8n, στο Make ή στο Zapier.
6. Απευθείας το API (για προγραμματιστές)
Μια διασύνδεση θυμάται τι έστειλε την τελευταία φορά και στέλνει μόνο τις αλλαγές, σε παρτίδες. Ή στείλτε το CSV όπως είναι και αφήστε την πύλη να το διαβάσει.
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>Όλες οι λεπτομέρειες βρίσκονται στην προδιαγραφή:Ingest API ·συνταγές αυτοματοποίησης ·Go SDK ·Για προγραμματιστές