Verkaufskanäle

Überblick
Ein Verkaufskanal ist eine Verkaufsstelle außerhalb des Systems — ein Marktplatz oder ein Shop. Der Bereich hält zwei Richtungen zusammen: hinaus gehen Angebote und Bestände, herein kommen Bestellungen.
Der Grundsatz dahinter: Das System bleibt die Wahrheit. Ein Kanal bekommt eine Zuteilung vom Bestand, nicht den Bestand selbst — sonst verkauften zwei Kanäle dasselbe Stück.
Kernaufgaben
Einen Kanal einrichten. Sie legen den Kanal an, hinterlegen die Zugangsdaten und bestimmen, welche Bestandszuteilung und welcher Kunde für eingehende Bestellungen gelten.
Angebote pflegen. Ein Angebot verbindet ein Produkt mit dem Kanal. Titel, Beschreibung und Preis lassen sich je Kanal überschreiben — was nicht überschrieben ist, kommt aus dem Produktstamm.
Abgleich anstoßen. Der Abgleich sendet Angebote und Bestände hinaus und holt Bestellungen herein. Er lässt sich von Hand starten; im Regelbetrieb läuft er automatisch.
Bundles und Konfigurationsartikel. Meldet der Kanal die gewählten Optionen mit (Shopware: verschachtelte Positionen, Shopify: Bundles), übernimmt der Import einen Konfigurationsartikel mit genau dieser Auswahl und bucht die Teile nicht zusätzlich. Ist das Bundle bei Ihnen kein Konfigurationsartikel, bleiben die einzelnen Teile die Bestellung — wie ohne Bundle. WooCommerce liefert diese Angaben noch nicht.
Lieferzeit an den Kanal. Die Lieferzeit des Artikels geht mit dem Angebot hinaus, jeder Kanal bekommt sie in seiner Form: Shopware die Spanne 1:1 (Mindest- und Höchstwert in Tagen), Otto den Höchstwert als Lieferzeit (Paket oder Spedition stellt die Kanal-Einstellung Versandart ein), Amazon und Kaufland den Höchstwert als Bearbeitungszeit — die Zeit bis zum Versand, zu der der Marktplatz die Laufzeit selbst addiert. Der Höchstwert, weil die Bearbeitungszeit eine Versandzusage ist, deren Bruch der Marktplatz zählt; die Lieferzeit enthält die Laufzeit bereits und ist damit eine sichere Obergrenze. Kaufland pflegt sie mit dem Bestand an der vorhandenen Einheit, Amazon nur beim Eigenversand. Ohne Lieferzeit am Artikel oder bei „Auf Anfrage" geht nichts hinaus — der Kanal behält seine Vorgabe. Eine geänderte Lieferzeit sendet das Angebot beim nächsten Abgleich neu.
Texte, Hersteller, Eigenschaften, Varianten und Bilder an den Shop. Shopware und Shopify bekommen mehr als Titel und Preis:
| Angabe | Shopware | Shopify |
|---|---|---|
| Name und Beschreibung je Sprache (aus den Übersetzungen; Varianten erben die Beschreibung des Containers) | als Übersetzung — nur für Sprachen, die der Shop führt; eigene Zuordnung über die Kanal-Einstellung languageCodes (z. B. {"en": "en-US"}) | als registrierte Übersetzung; die Hauptsprache des Shops (Kanal-Einstellung primaryLocale, Vorgabe de) ist der Ausgangstext |
| Hersteller mit gesetzlichen Angaben (GPSR: Firmenname, verantwortliche Person in der EU, Anschrift, E-Mail, Telefon) | Hersteller mit Link, die Pflichtangaben als Zusatzfelder octibiz_gpsr_* | Hersteller als Vendor, die Pflichtangaben als Metafeld octibiz.gpsr |
| Eigenschaften (z. B. Farbe: Rot) | Eigenschaften mit Gruppe | Metafeld octibiz.properties |
| Varianten | Variante unter dem Container als Eltern-Artikel, mit ihren Achsen-Werten | alle Varianten eines Containers als EIN Produkt mit Varianten (Achsen als Produkt-Optionen, Titel und Übersetzung vom Container) |
| Bilder (öffentliche Adresse am Medium) | Medien, das erste als Titelbild | Produktbilder, vom Shop über die Adresse abgeholt |
Jede Änderung an diesen Angaben sendet das Angebot beim nächsten Abgleich neu. Beträge gehen wie immer in der kleinsten Einheit der Kanal-Währung hinaus.
Varianten als echte Varianten im Shop. In Octibiz bleibt jede Variante ein eigener Artikel mit eigener Artikelnummer, eigenem Preis und eigenem Bestand. Im Shop entsteht daraus das, was der Shop unter einem Artikel mit Varianten versteht:
| Shop | Abbildung |
|---|---|
| Shopware | Haupt-Artikel (Artikelnummer des Containers) mit je einer Variante |
| Shopify | EIN Produkt mit allen Varianten; die Achsen (z. B. Farbe, Größe) sind die Produkt-Optionen |
| WooCommerce | variables Produkt (Artikelnummer des Containers) mit je einer Variation; die Achsen sind die Variations-Merkmale |
Ändert sich eine Variante, gehen bei Shopify und WooCommerce alle Varianten desselben Containers mit — das Shop-Produkt wird als Ganzes gesetzt. Bestand und Preis gehen je Variante; eine Bestellung aus dem Shop trifft über die Artikelnummer genau die Variante. Wird ein Varianten-Artikel in Octibiz gelöscht oder deaktiviert, fällt er bei der nächsten Übertragung seiner Geschwister aus dem Shopify-Produkt. Varianten, die vor dieser Umstellung als einzelne Produkte übertragen wurden, legt der erste Abgleich als gemeinsames Produkt neu an und setzt die alten Einzelprodukte dabei einmalig auf Entwurf (Shopify DRAFT, WooCommerce draft) — gelöscht wird nichts, Bestellungen und Verweise im Shop bleiben erhalten. Das Abgleich-Ergebnis nennt je Variante, welches alte Produkt auf Entwurf gesetzt wurde.
Ein Angebot zurückziehen. Zurückziehen entfernt es auf dem Kanal, ohne das Produkt anzufassen.
Felder im Detail
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Kennung channelKey | ja | Text, max. 100 Zeichen | Die technische Kennung des Kanals. Nicht mehr ändern, sobald Aufträge darüber laufen. |
Name name | ja | Text, max. 160 Zeichen | Wie der Kanal in Listen und Auswertungen heißt. |
Anbindungsart connectorType | ja | verfügbarer Konnektor, max. 60 Zeichen | Womit verbunden wird — Marktplatz, Shop, Fremdsystem. |
Anbieter-Verbindung integrationProvider | nein | eingerichtete Anbindung | Über welche Anmeldung zugegriffen wird. |
Einstellungen config | nein | je nach Anbindung | Zugangsdaten und Kennungen des Kanals. |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke die Aufträge dieses Kanals laufen. |
Währung currency | nein | Währungskennung nach ISO 4217, 3 Zeichen | In welcher Währung dieser Kanal verkauft. Leer = die Buchwährung. Steht hier etwas anderes, rechnet das System die Preise einmal um und meldet Betrag und Währung gemeinsam; ohne hinterlegten Kurs läuft kein Preis- oder Angebotslauf. Beträge gehen mit den Nachkommastellen der Währung hinaus und kommen so herein (Yen ohne, Euro mit zwei, Bahrain-Dinar mit drei); importierte Bestellungen tragen die Währung des Marktplatzes. |
Lager warehouseId | nein | bestehendes Lager | Aus welchem Bestand der Kanal bedient wird. |
Bestandsanteil (%) stockPercent | nein | 1 bis 100 | Wie viel des Bestands dem Kanal gemeldet wird. Bei mehreren Kanälen auf demselben Lager der Weg, nicht dieselbe Ware doppelt zu verkaufen. |
Bestandspuffer stockBuffer | nein | 0 oder mehr | Wie viele Stück zurückgehalten werden. Der wirksamste Schutz gegen Überverkauf: Der letzte Artikel wird nicht gemeldet, damit die zeitliche Lücke zwischen zwei Verkäufen niemanden trifft. |
Preis-Kunde priceCustomerUlid | nein | bestehender Kunde | Von welchem Kunden die Preisfindung übernommen wird. So bekommt ein Marktplatz seine eigenen Preise, ohne dass sie irgendwo doppelt gepflegt werden. |
Auffang-Kunde fallbackCustomerUlid | nein | bestehender Kunde | Wem ein Auftrag zugeordnet wird, dessen Käufer sich nicht zuordnen lässt. Ohne ihn bleibt der Auftrag hängen. |
Ausführender Nutzer runAsUserUlid | nein | bestehendes Konto | In wessen Namen der Kanal handelt. Dessen Rechte gelten — und im Protokoll steht diese Identität. |
Aufträge automatisch bestätigen autoConfirmOrders | nein | Ja/Nein | Ob eingehende Aufträge ohne Prüfung in die Bearbeitung gehen. |
Aufträge orders | nein | Liste eingehender Aufträge | Die vom Kanal übernommenen Bestellungen. |
Nur über Schnittstelle und Automation
| Feld | Werte / Format | Was es bewirkt |
|---|---|---|
checkouts | ein Warenkorb oder eine Liste, höchstens 100 | Meldet begonnene Warenkörbe des Kanals (POST …/channels/{ulid}/checkouts) — der Weg für Shop-Webhooks wie Shopify checkouts/create. Jede Meldung mit derselben externalId schreibt denselben Warenkorb fort; completedAt gesetzt heißt bestellt. |
operation und force | Vorgangsart, Ja/Nein | Löst einen Abgleich aus — Bestand melden, Preise senden, Aufträge holen. force übergeht die Schonfrist zwischen zwei Läufen; mit Bedacht zu verwenden, weil Marktplätze die Zahl der Anfragen begrenzen. |
externalOrderId | Fremd-Kennung | Welche Bestellung des Kanals als versandt gemeldet wird. Daran erkennt der Marktplatz die Sendung wieder. |
orderUlid | eigener Auftrag | Aus welchem eigenen Auftrag die Sendung stammt. |
carrier | Text, max. 60 Zeichen | Der Versanddienstleister — in der Schreibweise, die der Kanal erwartet. |
trackingNumber | Text, max. 120 Zeichen | Die Sendungsnummer, die der Käufer zu sehen bekommt. |
trackingUrl | Adresse, max. 500 Zeichen | Der Verfolgungs-Link zur Sendung. |
shippedAt | Zeitpunkt | Wann versandt wurde; leer = jetzt. |
lines | Liste aus Artikelnummer und Menge | Meldet eine Teilsendung. Leer heißt: die ganze Bestellung ist raus. Die Positions-Kennung des Marktplatzes ergänzt das System aus dem Bestell-Import — sie ist nirgends sonst zu bekommen. |
Einstellungen & Rechte
- Sehen:
channels.channel.view - Kanal einrichten (Zuteilung, Zugangsdaten, Kunde):
channels.channel.manage - Angebote:
channels.listing.manage - Abgleich anstoßen:
channels.sync.execute
Modul-Flag: module.channels. Die eigentliche Anbindung an einen konkreten Marktplatz bringt jeweils ein eigenes Kanal-Plugin mit.
FAQ & Fehlerbilder
Der Bestand auf dem Kanal weicht ab. Prüfen Sie die Zuteilung: Der Kanal sieht nur seinen Anteil, nicht den Gesamtbestand.
Ein Artikel ohne Lagerführung steht mit hoher Menge im Kanal. Das ist gewollt: Dienstleistungen, Downloads und Artikel ohne Bestandsführung gelten als verfügbar, nicht als ausverkauft. Gemeldet wird die Menge aus der Einstellung channels.unmanaged_stock_qty (Vorgabe 999); WooCommerce und Shopify bekommen stattdessen „ohne Bestandsführung".
Eine Teilsendung erscheint beim Marktplatz als ganze Lieferung. Seit 2026-09-21 meldet jede Sendung genau ihre Positionen und Mengen zurück; ältere Meldungen bleiben, wie sie waren.
Wo kommen Marktpreise her? Die Repricer-Auskunft über Fremdangebote gibt es für Amazon, eBay und Kaufland. Otto bietet dafür keine Schnittstelle; dort meldet die Auskunft „nicht unterstützt".
Eine Bestellung kam ohne Kunden an. Dann fehlt am Kanal der Kunde für eingehende Bestellungen.
Der Abgleich meldet einen Fehler. Die Meldung des Kanals steht im Lauf-Journal — meist sind es abgelaufene Zugangsdaten oder ein vom Marktplatz abgelehntes Feld.