Tiekėjų likučių sinchronizavimas, kuris įrašo tik perskaitytus skaičius
Kaip tiekėjų likučių sinchronizavimas nuskaito didmenininkų B2B portalus ir atnaujina „Shopify“: nėra skaičiaus – nėra įrašo, o „pavyko“ reiškia tikrą pakeitimą.
AFKzona Group · 5 min. skaitymo
- Trumpas atsakymas
- Tiekėjo likučiai – tinklalapyje, o ne API
- Stocksync – tai naršyklė, eilė ir kiekvienos prekės įrašas
- „Nežinoma“ niekada netampa nuliu, o „pavyko“ visada reiškia pakeistą parduotuvę
- Parduotuvė gauna tik tiekėjo paskelbtus skaičius
- Penki klausimai tiekėjų likučių sinchronizavimui įvertinti
- Ką galima pritaikyti ir kitur
- Klausimai
Trumpas atsakymas
- Stocksync – tiekėjų likučių sinchronizavimo sistema. Nustatytu laiku ji prisijungia prie didmenininko B2B portalo su pačios parduotuvės paskyra, nuskaito likučius, atima atsargų rezervą ir „Shopify“ parduotuvėje nustato atitinkamus kiekius.
- Stocksync atskiria „nežinoma“ nuo „nulis“: prekei, kurią portalas rodo be skaičiaus, parduotuvėje lieka esamas kiekis, o priežastis užfiksuojama.
- Paleidimas laikomas pavykusiu, kai parduotuvę pasiekė kiekvienas numatytas pakeitimas. Šią taisyklę saugo testas.
- Kiekiai įrašomi absoliučiomis reikšmėmis, todėl pakartotas paleidimas palieka tą patį skaičių. Kiekviena paleidimo prekė užfiksuojama: kas perskaityta, kas įrašyta ir kodėl.
Stocksync niekada neįrašo likučio, jei portale nenurodytas skaičius. Jei tiekėjo portale parašyta „In stock“ be skaičiaus, kiekis išsaugomas kaip nežinomas, o skaičius parduotuvėje nekeičiamas: spėtas nulis paslėptų prekes, kurias parduotuvė gali parduoti.
Būtent dėl šios taisyklės tiekėjų likučių sinchronizavimą galima palikti veikti savarankiškai, todėl šioje atvejo analizėje ją sekame nuo didmenininko prisijungimo puslapio iki kiekio „Shopify“ parduotuvėje.
Tiekėjo likučiai – tinklalapyje, o ne API
Didmenininko, kuriam skirtas Stocksync, likučiai matomi tik puslapyje, į kurį reikia prisijungti: HTML lentelė, sesijos slapukas, o prieinamumas nurodytas žodžiais, pavyzdžiui, „7 in stock“ ar „Out of stock“. Duomenų srauto nėra. Todėl arba kas nors kiekvieną rytą prisijungia ir perrašo skaičius ranka, arba niekas to nedaro, ir parduotuvė parduoda tai, ko tiekėjas nebeturi.
Integracijos per duomenų srautus tinka tik tiems tiekėjams, kurie tokį srautą teikia. Norint automatizuoti žmogų su dviem atvertais naršyklės skirtukais, tenka išspręsti du nemalonius uždavinius: perskaityti žmonėms skirtą puslapį ir pakeisti duomenis svetimoje parduotuvėje jos nesugadinant.
Stocksync – tai naršyklė, eilė ir kiekvienos prekės įrašas
Stocksync per „DevTools“ protokolą valdo „headless“ Chrome, atlieka parduotuvės įrašytus prisijungimo žingsnius, nuskaito kiekvienos prekės kiekį, o pakeitimus įrašo per „Shopify“ Admin GraphQL API. Sinchronizaciją be žmogaus įsikišimo paleidžia užduočių eilė „Postgres“ duomenų bazėje. Kiekvienas paleidimas užfiksuojamas, kiekvienai prekei – po eilutę: kas perskaityta, kas įrašyta ir kodėl.
- Aprašas, o ne atskiras nuskaitymo scenarijus. Keturių tipų žingsniai (atidaryti, užpildyti, spustelėti, palaukti) ir CSS selektoriai eilutei, prekės kodui ir kiekiui. Parduotuvė juos įveda vieną kartą – kiekvienam tiekėjui atskiro kodo nerašome.
- Teksto analizė. „1,430 in stock“ virsta 1 430, „Sold out“ – 0, „In stock“ – nežinomu kiekiu.
- Rezervas. Parduotuvė gauna tiekėjo skaičių atėmus rezervą, bet ne mažiau nei nulį: kai rezervas lygus dviem, 12 virsta 10. Sinchronizuoti galima kas 15 minučių, bet ne rečiau kaip kartą per parą.
- Absoliučios reikšmės. „Shopify“ gauna komandą „nustatyti likutį 10“ paketais po 250 – tai „Shopify“ masyvų riba. Išsiųsta du kartus, ji vis tiek palieka 10. O komanda „atimti 2“, išsiųsta du kartus, atimtų keturis.
- Eilė, kuri atlaiko perkrovimą. Užduotys paimamos su
FOR UPDATE SKIP LOCKED; jei užduoties vykdytojas „nukrito“, po 15 minučių užduotis grąžinama į eilę. - Užšifruoti prisijungimo duomenys. Portalo slaptažodis ir „Shopify“ raktas šifruojami AES-256-GCM, iššifruojami tik foninio proceso sinchronizacijos metu ir niekada nerodomi.
„Nežinoma“ niekada netampa nuliu, o „pavyko“ visada reiškia pakeistą parduotuvę
Dvi taisyklės įdiegtos kode, o testai jas tikrina. Prekei, kurią portalas rodo be skaičiaus, lieka esamas kiekis, portalo tekstas užfiksuojamas, ir ji niekada neįrašoma kaip nulis. O paleidimas laikomas pavykusiu, kai parduotuvę pasiekė kiekvienas numatytas pakeitimas, ir paleidimo puslapyje matyti kiekvienos prekės rezultatas.
Kiekviena prekė paleidimą baigia viena iš keturių įrašytų būsenų, ir tik viena iš jų rašo į parduotuvę.
Sinchronizacija, kuri praneša apie sėkmę nieko nepakeitusi, yra blogesnė nei jokios sinchronizacijos, nes parduotuvė nustoja tikrinti.
Antrąją taisyklę saugo testas: jis sinchronizuoja su tyčia neprijungta parduotuve ir tikrina, ar kiekviena prekė perskaityta, ar nė viena nepriskirta prie atnaujintų, ar kiekviena užskaityta kaip nepavykusi ir ar kiekvienai nurodyta priežastis. Variklio testai jungiasi prie bandomojo portalo, sukurto kaip tikras didmeninės prekybos portalas – su sesijos slapuku ir žodžiais nurodytu prieinamumu. Jie tikrina teksto analizės taisykles, tikslius kiekius, tai, kad kitas nuskaitymas pastebi pokytį nuo 143 iki 4, ir tai, kad neteisingas slaptažodis paleidimą sustabdo.
Parduotuvė gauna tik tiekėjo paskelbtus skaičius
Kiekvienas Stocksync įrašomas skaičius yra tiekėjo portale per paskutinę sinchronizaciją paskelbtas kiekis, atėmus parduotuvės rezervą. Kai portalas pakeičia išdėstymą, parduotuvėje lieka esami skaičiai, o paleidimas įvardija prisijungimo žingsnį ar prekę, kurią reikia pritaikyti, todėl parduotuvėje niekada neatsiranda niekieno neperskaitytas kiekis.
Ta pati taisyklė lemia ir kitus sistemos sprendimus:
- Dėl absoliučių reikšmių kartoti nieko nekainuoja. „Shopify“ apie užklausų ribojimą praneša įprastame atsakyme, ir Stocksync kiekvieną atsakymą tam patikrina. Kadangi reikšmės absoliučios, kitas paleidimas jas išsiunčia dar kartą be rizikos suskaičiuoti dukart.
- Įrašas atsako į klausimą, kurį parduotuvės iš tikrųjų užduoda. Kiekvienas paleidimas išsaugo atliktus prisijungimo žingsnius ir trukmę, o pasiekus likučių puslapį – ir galutinį puslapio adresą bei pavadinimą; šalia – eilutės kiekvienai prekei.
- Prieiga lieka pačios parduotuvės. Stocksync jungiasi su esama parduotuvės didmeninės prekybos paskyra ir skaito tą likučių puslapį, kurį ta paskyra ir taip mato.
Penki klausimai tiekėjų likučių sinchronizavimui įvertinti
| Klausimas | Geras atsakymas |
|---|---|
| Kas nutinka, kai portale nenurodytas skaičius? | Parduotuvėje lieka esamas kiekis, prekė užfiksuojama ir niekada neįrašoma kaip nulis. |
| Ką reiškia „pavyko“? | Parduotuvę pasiekė kiekvienas numatytas pakeitimas, prekė po prekės. |
| Ar įrašoma absoliuti reikšmė, ar pokytis? | Absoliutūs kiekiai, todėl pakartotas ar dvigubas paleidimas palieka tą patį skaičių. |
| Kas nutinka, kai pasikeičia portalo išdėstymas? | Parduotuvėje lieka esami skaičiai, o paleidimas nurodo žingsnį, selektorių ar prekę, kurią reikia pritaikyti. |
| Kur laikomi portalo prisijungimo duomenys ir kas juos mato? | Jie užšifruoti autentifikuojančiu šifru, raktas laikomas ne duomenų bazėje, iššifruojama tik sinchronizacijos metu, sąsajoje niekada nerodoma. |
Ką galima pritaikyti ir kitur
Su tais pačiais sprendimais susiduria kiekviena integracija, kuri rašo į sistemą, kuria žmonės pasikliauja. Duomenyse laikykite „nežinoma“ ir „nulis“ skirtingomis reikšmėmis. Sėkmę apibrėžkite kaip pasiektą rezultatą ir patikrinkite ją su tyčia atjungta sistema. Rinkitės įrašus, kurie nustato reikšmę, o ne ją keičia, – tada kartojimui nereikės jokio koordinavimo.
Ir kiekvienai prekei užfiksuokite priežastį. Sinchronizacija pasitikima tada, kai ir po kelių savaičių galima atsakyti, kodėl pasikeitė skaičius.
Jei jūsų parduotuvė perka iš didmenininko, kuris likučius rodo tik prisijungus, pažiūrėkite, kaip dirbame su integracijomis ir nedidelėmis, aiškiai apibrėžtomis užduotimis, arba užsisakykite pokalbį – kartu peržiūrėsime jūsų tiekėjo portalą.
Dažni klausimai
Kaip sinchronizuoti tiekėjo likučius su „Shopify“, jei tiekėjas neturi API?
Kažkas turi perskaityti tą patį puslapį, kurį skaitytų žmogus. Stocksync per „headless“ Chrome prisijungia prie didmenininko portalo su pačios parduotuvės paskyra, atlieka vieną kartą įrašytus prisijungimo žingsnius, pagal CSS selektorius nuskaito kiekvieno prekės kodo kiekį, atima atsargų rezervą ir per „Shopify“ Admin GraphQL API nustato absoliučius likučius. Kiekvieno paleidimo kiekvienai prekei užfiksuojama, kas perskaityta ir kas įrašyta.
Kaip dažnai sinchronizuoti tiekėjo likučius su e. parduotuve?
Tiek dažnai, kad parduotuvė niekada neparduotų to, ką tiekėjas pardavė prieš valandą. Stocksync veikia pagal kiekvienam tiekėjui nustatytą grafiką – nuo kas 15 minučių iki kartą per parą – ir dar taiko atsargų rezervą. Greitai judančioms prekėms tinka trumpas intervalas ir mažas rezervas, lėtai judančiam katalogui – sinchronizacija kartą per parą. Kiekvienas paleidimas nustato absoliučius kiekius, todėl laikas niekada nesukelia dvigubo skaičiavimo.
Kas nutinka, kai tiekėjas pakeičia savo svetainę?
Parduotuvė lieka saugi. Stocksync įrašo tik perskaitytus kiekius, todėl naujas išdėstymas niekada nevirsta klaidingais skaičiais parduotuvėje: jei prisijungimo žingsnis nebeatitinka, paleidimas jį įvardija, o jei prekė nebe ten, kur buvo, parduotuvėje lieka esamas kiekis. Įrašyti žingsniai ir selektoriai pritaikomi naujam išdėstymui, ir kitas paleidimas tęsia darbą.
Kokį atsargų rezervą nustatyti e. parduotuvėje?
Tokį, kuris padengia tai, kas gali būti parduota tarp dviejų sinchronizacijų, nes iš tiekėjo perka ir kiti klientai. Stocksync skelbia tiekėjo kiekį atėmus rezervą, bet ne mažiau nei nulį, o rezervas nustatomas kiekvienam tiekėjui atskirai. Kai rezervas lygus dviem, tiekėjo 12 parduotuvėje virsta 10, o 1 – 0. Kuo dažniau sinchronizuojama, tuo mažesnio rezervo reikia.
Kaip saugomi tiekėjų portalų slaptažodžiai?
Stocksync tiekėjo portalo slaptažodį ir „Shopify“ prieigos raktą šifruoja AES-256-GCM algoritmu, o šifravimo raktas laikomas serverio aplinkoje, ne duomenų bazėje. Dėl autentifikavimo žymės pakeisto šifruoto teksto tiesiog nepavyks iššifruoti – jis nevirs šiukšlėmis. Duomenys iššifruojami tik foninio proceso vykdomos sinchronizacijos metu, o sąsajoje jie niekada nerodomi.