Systemen
Lightspeed Kassa koppeling met je webshop: winkelvoorraad en webshop gelijk
Een Lightspeed Kassa koppeling zet de voorraad per winkel uit Lightspeed Retail (R-Series) in je webshop en boekt webshoporders als verkoop in de kassa, zodat de voorraad daar afneemt. De API werkt met OAuth 2.0 en een leaky bucket die met 1 drip per seconde leegloopt, plus een halve per extra kassa. Daarmee is de doorvoer uit te rekenen voordat de koppeling draait.
Wat is Lightspeed Kassa en wie gebruikt het?
Lightspeed Retail is een kassasysteem in de cloud voor winkels: verkoop, voorraad per winkel, inkoop, klanten en werkorders. Lightspeed noemt het in zijn ontwikkelaarsdocumentatie Retail POS (R-Series). Een abonnement heeft een vast aantal kassa's, en dat aantal bepaalt ook hoeveel ruimte een koppeling in de API krijgt.
De gebruikers zijn winkeliers met een of meer filialen, vaak met een webshop naast de winkel. Draait die webshop op Lightspeed eCom, dan verbindt Lightspeed de twee zelf. Zo'n omnichannel shop kan via de eCom API niet schrijven naar producten, varianten, categorieën, merken en de andere productresources; artikelen worden in de kassa aangemaakt en schrijven gaat via de R-Series API. Draait hij op WooCommerce, Shopify of Magento, dan is er een koppeling nodig die de voorraad per winkel en de orders tussen kassa en webshop bijhoudt.
Wat je met Lightspeed Kassa koppelt
De kassa is leidend voor voorraad en artikelgegevens. De webshop is leidend voor de online order.
| Stroom | Richting | Resource in de R-Series API |
|---|---|---|
| Voorraad per winkel | kassa naar webshop | ItemShop, veld sellable per shopID |
| Artikelen en varianten | kassa naar webshop | Item, ItemMatrix |
| Prijzen | kassa naar webshop | ItemPrice per prijsniveau |
| Webshoporders | webshop naar kassa | Sale met SaleLines |
| Klanten | webshop naar kassa | Customer |
Een webshoporder gaat de kassa in als verkoop. Lightspeed schrijft zelf dat een voorraadcorrectie via een afgeronde verkoop loopt en niet door het voorraadveld te overschrijven. Dan staat er in de kassa een verkoop met een betaalwijze voor de webshop, en kloppen de rapportages per winkel.
Hoe Lightspeed Kassa data vrijgeeft
OAuth 2.0 met de rechten van een medewerker
De R-Series API werkt met OAuth 2.0 en de authorization code grant. Een medewerker logt in bij Lightspeed en geeft toestemming voor de scopes die de koppeling vraagt, zoals employee:inventory en employee:register. De autorisatiecode verloopt na 60 seconden. Een access token is meestal 60 minuten geldig; daarna haalt de koppeling met de refresh token een nieuwe op en krijgt hij ook een nieuwe refresh token. Een refresh token die 30 dagen niet gebruikt wordt, verloopt, en dan moet iemand opnieuw autoriseren.
De rechten van de medewerker die toestemming gaf, begrenzen wat de koppeling mag. Wordt die medewerker geblokkeerd, dan werkt het token niet meer. Antwoorden komen standaard als XML; met .json achter het adres als JSON. Een pagina bevat hooguit 100 records en de volgende pagina staat als complete URL in next.
Een emmer per kassa-account
Lightspeed gebruikt een leaky bucket. Elke combinatie van account en API-client heeft een eigen emmer, dus verkeer van andere apps gaat niet van het budget van de koppeling af.
| Onderdeel | Waarde |
|---|---|
| Drip rate, 1 kassa | 1 per seconde |
| Per extra kassa in het abonnement | 0,5 per seconde erbij |
| Emmer, 1 kassa | 90 |
| Per extra kassa | 10 erbij |
| Leesverzoek | 1 drip, meer bij extra relaties of filters |
Sale aanmaken |
2 drips, plus 0,5 per regel, plus 3 met complete |
count=1 |
10 drips |
Daarbovenop telt een burstlimiet per seconde. Bij overschrijding volgt HTTP 429 met een Retry-After in seconden. Elk antwoord draagt de header X-LS-API-Bucket-Level, bijvoorbeeld 92.57/90, zodat de koppeling zelf afremt voordat hij de grens raakt. De bedragen staan in de rate-limitpagina van Lightspeed; Lightspeed houdt zich het recht voor ze zonder aankondiging te veranderen.
De rekensom
Een winkel met 2 kassa's heeft een drip rate van 1 + 0,5 = 1,5 per seconde. De eerste keer inlezen van 15.000 artikelen in 2 winkels betekent 15.000 x 3 = 45.000 ItemShop-records: één per winkel plus het totaalrecord met shopID 0. In pagina's van 100 zijn dat 450 verzoeken, en 450 / 1,5 = 300 seconden, 5 minuten.
Webshoporders zijn duurder. Een order met 3 regels als afgeronde verkoop kost 2 + 3 x 0,5 + 3 = 6,5 drips, dus 4,3 seconden budget bij 1,5 per seconde. Een uitverkoopochtend met 400 orders vraagt 400 x 6,5 = 2.600 drips, bijna 29 minuten budget, terwijl het voorraadpollen ook doorloopt. De koppeling zet orders daarom in een wachtrij en laat het pollen voorgaan voor artikelen die net verkocht zijn. Zie doorvoer berekenen.
Waar het bij Lightspeed Kassa op vastloopt
Verkoopbaar is niet vrij
Het veld sellable in ItemShop is gelijk aan qoh, de voorraad in de winkel, behalve als die negatief is; dan is het 0. Stuks die gereserveerd zijn staan in eigen velden: onSpecialOrder, onWorkorder en onLayaway. Volgens de definitie van sellable gaan ze daar niet vanzelf af. Liggen er 6 sloten in de winkel, waarvan 2 op een werkorder, dan kan de webshop er 4 verkopen: 6 min 2. De koppeling leest de reserveringsvelden apart, trekt ze af en controleert in de dry run of de uitkomst klopt met wat de winkel telt. Welke winkels meetellen, en of een overboeking onderweg (onTransferIn) al meetelt, staat per koppeling vast. Zie meerdere magazijnen.
Een tijdstempel die de voorraad niet ziet
Het veld timeStamp op een artikel verandert niet als alleen de voorraad verandert; Lightspeed zegt er expliciet bij dat wijzigingen in ItemShops niet meetellen. Een koppeling die artikelen op timeStamp pollt, mist dus elke verkoop. ItemShop heeft een eigen timeStamp en is volgens Lightspeed bedoeld om voorraadwijzigingen te pollen. De koppeling draait daarom twee rondes: artikelen op hun tijdstempel voor naam, prijs en barcode, en ItemShop op de zijne voor de voorraad.
Vier codes per artikel en matrixen
Een artikel heeft systemSku, door Lightspeed gemaakt, alleen-lezen en de barcode op het etiket; customSku, je eigen code; manufacturerSku; en ean of upc van 11 tot 14 cijfers. De webshop heeft één SKU. Welke van de vier de sleutel is, wordt vooraf vastgelegd, en een artikel zonder die code gaat naar een controlelijst. Varianten zitten in een ItemMatrix met een attributenset als Color/Size, Size, Color of 3 Attributes, en de waarden in attribute1 tot attribute3. Die worden in de webshop de opties kleur en maat. Zie SKU of EAN.
Platformen die we aan Lightspeed Kassa koppelen
Per combinatie zijn er nog geen eigen pagina's. De webshopkant staat per platform beschreven: WooCommerce koppeling, Shopify koppeling en Magento koppeling. Lightspeed eCom staat op Lightspeed koppeling. Andere kassasystemen: Mplus koppeling en SW-Retail koppeling. Het overzicht van de voorraadstromen staat op voorraad koppelen.
Wij bouwen de koppeling voor een vaste prijs en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Voor de livegang draait hij als dry run: je ziet per artikel welke voorraad per winkel de webshop zou krijgen en welke verkopen in de kassa zouden ontstaan. Vertel hoeveel winkels en kassa's je hebt en welke webshop, dan rekenen we de doorvoer voor jouw abonnement uit.
Veelgestelde vragen
Welke Lightspeed-kassa is dit?
Lightspeed Retail POS, in de documentatie R-Series genoemd. De API staat op api.lightspeedapp.com. Lightspeed heeft daarnaast X-Series, met een eigen API en eigen documentatie. De koppeling wordt op de API van jouw versie gebouwd; deze pagina beschrijft R-Series.
Ik heb Lightspeed eCom. Heb ik dan een koppeling nodig?
Voor de standaardstroom niet: een artikel heeft in de kassa het veld publishToEcom, en Lightspeed verbindt kassa en eCom zelf. Een koppeling is er voor een webshop op een ander platform, zoals WooCommerce, Shopify of Magento, en voor regels die Lightspeed niet heeft. Hangt je eCom-shop aan de kassa, dan zijn producten en varianten in de eCom API alleen-lezen en schrijft een koppeling artikelgegevens naar de kassa. De eCom-kant staat op Lightspeed koppeling.
Hoeveel webshoporders per uur kan de kassa verwerken?
Een afgeronde verkoop met 3 regels kost 6,5 drips. Met 1 kassa loopt de emmer met 1 drip per seconde leeg: 3.600 / 6,5 is ongeveer 553 orders per uur, als er verder niets over die verbinding gaat. Met 3 kassa's is de drip rate 2 per seconde en verdubbelt dat. Het voorraadpollen gaat van hetzelfde budget af.
Waarom staat er een andere voorraad in de webshop dan in de kassa?
Meestal omdat de webshop sellable toont en de kassa ook reserveringen kent. Het veld sellable is gelijk aan de voorraad, behalve als die negatief is. Stuks voor een special order, een workorder of layaway staan in eigen velden en gaan er volgens die definitie niet vanzelf af. De koppeling trekt ze eraf voordat het getal naar de webshop gaat.
Wat gebeurt er als de medewerker die toegang gaf vertrekt?
Dan stopt de koppeling. De toegang loopt via de rechten van de medewerker die de koppeling autoriseerde, en een token stopt met werken als die medewerker wordt geblokkeerd. Laat de autorisatie daarom geven door een vast beheeraccount met precies de rechten die de koppeling nodig heeft.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk