Documentatia aferenta integrarilor este impartita in 3 sectiuni mari.
Informatii Generale
Documentatia OpenAPI poate fi gasita aici
Intro
Prin intermediul API-urilor de integrare, este posibil să se interacționeze cu sistemul Glovo. Este posibil să se primească notificări pentru comenzile noi și pentru comenzile anulate, de asemenea, informațiile referitoare la produsele aferente unui anumit magazin Glovo pot fi actualizate. În continuare, vom aborda fiecare capitol în detaliu.
IMPORTANT Este important să se țină cont de faptul că pentru a activa integrările între sistemul Glovo și soluțiile de POS, sunt necesare cel puțin două operații: operația de primire a notificărilor și operația de actualizare a meniului. În momentul în care integrarea este activată, conținutul magazinelor Glovo va fi gestionat exclusiv prin intermediul integrării.
IMPORTANT Această documentație este destinată mediului de producție. Nu se acceptă conturi de test pe acest mediu. Nu există un mediu de test pentru Portal. Se pot solicita doar store-uri de test pe domeniul https://testglovo.com, via email la pos.integrations@appsmart.ro. Numărul store-urilor de test este limitat și se alocă pentru o perioadă determinată. Faceti solicitarea când ați făcut implementarea formatelor, conform documentației, pentru a vă asigura că aveți suficient timp de testare până când se face realocarea. Pe aceste store-uri se poate testa funcția de actualizare a meniului. Fiind un mediu de staging, acesta nu este întotdeauna întreținut și notificările nu se trimit întotdeauna. Pentru testarea notificărilor, recomandarea este să se facă în producție, prin activarea unei locații și primirea de comenzi live. Activarea unei locații nu împiedică activitatea restaurantului. Cand faceti solicitarea pentru mediul de test, atasati si un json generat din sistemul POS, pentru menu update.
Pasii de integrare
- Înregistrarea se realizează pe portalul de integrare, detalii disponibile aici.
- Se urmează pașii pentru configurarea contului în portal, detalii disponibile aici.
- Se implementează API-ul de integrare, detalii disponibile aici, aici, aici si openapi.
- Se urmeaza pasii aferenti pentru Portalul Integrari, detalii aici
- In functie de nevoie, se poate implementa si functia LAAS, detalii aici
Endpoint-uri API Integrare
- staging: https://staging.store-management.glovo.alb.app.onlineservice.io
- production: https://prod.store-management.glovo.alb.app.onlineservice.io
Partner Name (partner_name)
Acest câmp trimis în payloadul JSON de actualizare a meniului identifică soluția de POS în relație cu middleware-ul de integrare. De obicei, acest atribut reprezintă numele soluției de POS. Este recomandabil să se utilizeze un singur nume de partener în cadrul sistemului. Acest nume este alocat în momentul în care se solicită crearea unui cont în portalul de integrare. Mai multe detalii despre acest câmp sunt discutate în secțiunea de exemple de payload pentru actualizarea meniului.
Store ID (store_id) / LID
În discuțiile de integrare, termenii Store ID sau LID vor fi întâlniți frecvent. Acest câmp identifică unic în sistemul Glovo un Store. Store-urile în Glovo sunt definite pe o anumită adresă. LID/Store ID trebuie să fie unic în sistemul Glovo. LID-urile folosite la nivelul Glovo sunt formate după regula: partner_name__store_id
Așa cum am menționat mai sus, partner_name este alocat de portalul de integrare în momentul în care se înregistrează o nouă soluție de POS. Store ID este introdus de soluția de POS în momentul în care solicită activarea unei noi integrări prin portal.
Glovo utilizează următorul sistem pentru a gestiona locațiile partenere: - Store - unul pe oraș - Adresele Store-ului - una pentru fiecare locație fizică
Authorization Header
Toate cererile către API-urile de integrare necesită un Authorization Header care poate fi găsit în portalul de integrare. Numele antetului este "Authorization".
POS Endpoints
Soluția de integrare poate trimite mai multe tipuri de notificări. Endpoint-urile corespunzătoare acestor tipuri de notificări sunt detaliate în secțiunea corespunzătoare din portal, pe care o puteți găsi aici.
Comenzi de tip Marketplace
Livrarea unei comenzi poate fi asigurată fie de un curier Glovo, fie de restaurant. În cazurile în care Glovo nu este implicată în procesul de livrare, identificăm aceste magazine ca fiind de tip "marketplace". Prin intermediul acestui document, veți găsi note și referințe speciale destinate acestor tipuri de magazine, care necesită informații suplimentare pentru a executa o comandă.
Terminologie
- POS (Point of Sale) - Sunt soluții software utilizate în restaurante pentru a gestiona fluxul intern al acestora, de la preluarea comenzilor și până la gestionarea produselor și retetelor.
- Integrarion Middleware (API Integrare) - Este soluția prezentată în această documentație care facilitează comunicarea cu sistemul Glovo.
- Store - Reprezintă un magazin din aplicația Glovo care poate avea mai multe adrese, locatii.
- Store Environment - Reprezintă tipul de magazin (store), dacă este un magazin de testare (staging) sau unul de producție. Poate avea valorile prod și staging.
Notificare Comenzi
Intro
De fiecare dată când este plasată o nouă comandă într-un magazin Glovo, aceasta va fi trimisă prin API către endpoint-urile de notificare ale soluțiilor de POS înregistrate în Portalul de integrări. Pentru detalii despre configurarea acestor endpoint-uri, puteți accesa aici.
NOTA: Este posibil ca in anumite situatii, in cazuri de erori, sa se incerce trimiterea notificarilor de mai multe ori. Pebtru a evita primirea de duplicate se recomanda creare unui index unicat pe campul order_code.
Format Notificare
Notificarea trimisa catre endpoint-urile definite in sistem este in format JSON.
Dupa cum este mentionat anterior, un restaurant poate livra cu Glovo sau cu livratori proprii. In cazul in care retsuarantul livreaza cu livratori proprii, atunci el este de tip marketplace. In functie de setarile restaurantului, formatul de json poate contine sau nu anumite elemente.
In cazul in care livrarea se face de catre Glovo, se poate observa mai jos un exemplu de notificare. In cazul livrarii de catre Glovo, detaliile clientului nu sunt disponibile in payload-ul care va ajunge catre POS. Doar o parte a numelui acestuia va ajunge catre POS.
{
"traceCode": null,
"traceId": null,
"order_id": "616342127",
"store_id": "TEST__111111",
"order_code": "ISRQHPPK1",
"order_time": "2023-05-09 16:16:36",
"order_type": "pickup",
"estimated_pickup_time": "2023-05-09 16:24:48",
"payment_method": "CASH",
"currency": "RON",
"allergy_info": "",
"pick_up_code": "584",
"is_picked_up_by_customer": false,
"cutlery_requested": false,
"special_requirements": null,
"loyalty_card": null,
"payment_total": 5700,
"customer_cash_payment_amount": null,
"courier": {
"name": "BogdanPopa G.",
"phone_number": "+40758604639"
},
"customer": {
"name": "Carmen H.",
"phone_number": "N/A",
"hash": "b4ae646e-094e-374d-b8ee-0594447ac916",
"invoicing_details": null
},
"fees": [
],
"discounts": [
],
"products": [
{
"id": "27520079",
"purchased_product_id": "MTgzMTc2Mzk0Ng==",
"quantity": 1,
"price": 1200,
"name": "Parmesan fries",
"attributes": [
]
},
{
"id": "5942500",
"purchased_product_id": "MTgzMTc2Mzk0OA==",
"quantity": 1,
"price": 1500,
"name": "Chickee Corn Dog",
"attributes": [
]
},
{
"id": "2555202",
"purchased_product_id": "MTgzMTc2Mzk0Nw==",
"quantity": 2,
"price": 1500,
"name": "Hybrid Corn Dog",
"attributes": [
]
}
],
"delivery_address": null,
"bundled_orders": [
]
}
Detalii structura JSON
Structura Notificare
Denumire | Tip date | Descriere | Since |
---|---|---|---|
traceCode | String | Cod intern care identifica o cerere peste mai multe operatii. Nu este nevoie a fi folosit de catre POS. - Optional | |
traceId | String | Id intern care identifica o cerere peste mai multe operatii. Nu este nevoie a fi folosit de catre POS. - Optional | |
is_picked_up_by_customer | Boolean | Valoare care indica daca o anumita comanda va fi ridicata de catre client si nu de catre curier. | |
order_id | String | ID-ul comenzii din sistemul Glovo. Identificator unic. - Obligatoriu | |
store_id | String | ID-ul unui anumit store din cadrul Glovo. Acest id poate contine mai multe informatii encodate precum un anumit brand. Se seteaza la nivelul Glovo in functie de ID-urile primite de la POS. - Obligatoriu | |
order_code | String | Camp alfanumeric folosit pentru cautarile istorice sau pentru comunicarea cu suportul Glovo. | |
order_time | String | String care reprezinta ora si data la care o anumita comanda a fost acceptata. Este in formatul yyyy-MM-dd HH:mm:ss | |
order_type | String | Poate avea valorile pickup daca este livrata de Glovo sau delivery daca este livrata de restaurant cu livratorii proprii. Acest camp este diferit de is_picked_up_by_customer si se foloseste in alt context. Campul is_picked_up_by_customer cu valoarea true anuleaza semnificatia campului order_type | |
estimated_pickup_time | String | Timpul estimate la care curierul ca ajunge pentru a ridica o comanda. Este in formatul yyyy-MM-dd HH:mm:ss | |
payment_method | String | Metoda de plata, poate avea doua valori DELAYED in cazul in care plata a fost facuta de catre client, cu cardul sau CASH, In cazul in care clientul va plati cu numerar. | |
currency | String | Moneda in care a fost plasata comanda | |
allergy_info | String | Poate contine detalii despre alergiile clientului, daca acesta le pune la dispozitie. | |
pick_up_code | String | Cod format din 3 cifre care identifica o comanda si se foloseste in comunicarea cu un curier. | |
cutlery_requested | Boolean | Indica faptul ca un client a cerut tacamuri sau nu | |
payment_total | Integer | Valoarea de plată exprimată în bani (centi). | |
customer_cash_payment_amount | Integer | Valoarea cash pe care clientul o are de achitat în cazul integrărilor de tip marketplace. | |
courier | Object | Conține detaliile despre curier. | |
customer | Object | Conține detaliile despre clientul care a pus comanda în cazul integrării de tip marketplace. | |
fees | Array | Conține detalii despre fee-urile plătite de către client, de obicei DeliveryFee, dar poate fi o listă în funcție de setup-urile de integrare. | |
discounts | Array | Lista de discounturi aplicate. Poate veni un singur discount sau mai multe în funcție de setup-ul de integrare. | |
products | Array | Lista produselor selectate de către client, inclusiv cele optionale și cele required, diferența realizându-se la nivel de preț. | |
delivery_address | Object | Adresa de livrare, inclusiv detaliile complete și coordonatele GPS în cazul integrării de tip marketplace. | |
bundled_orders | Array | Lista de id-uri a mai multor comenzi care pot fi livrate împreună în cazul integrărilor de tip marketplace. | |
minimum_basket_surcharge | Integer | Taxa minimă pentru coșul de cumpărături în cenți. Se aplică doar comenzilor de tip marketplace. Dacă comanda este livrată de Glovo, această taxă va fi nulă. | |
detailed_fees | Array | Un array care contine feeurile detaliate | 11.10.2023 |
glovo_discounts | Array | O lista cu discounturile suportate de catre Glovo | 11.10.2023 |
restaurant_discounts | Array | O lista cu discounturile suportate de catre restaurant | 11.10.2023 |
products_total | Integer | Totalul produselor fara disocunturi aplicate sau alte feeuri | 11.10.2023 |
Structura Courier
In cazul comenzilor de tip marketplace, campurile curierului sunt nule.
Denumire | Tip date | Descriere |
---|---|---|
name | String | Numele curierului asignat comenzii |
phone_number | String | Numarul de telefon al curierului asignat comenzii |
Structura Customer
In cazul comenzilor livrate de Glovo, campurile, in afara de nume, nu vor fi populate cu date.
Denumire | Tip date | Descriere |
---|---|---|
name | String | Numele clientului |
phone_number | String | Hash - informatie trimisa de catre Glovo. |
hash | String (nullable) | Numarul de telefon al clientului |
invoicing_details | Object (nullable) | Obiect care contine detaliile de facturare.Null in cazul in care clientul nu doreste factura. |
Structura Fees / Discounts
Denumire | Tip date | Descriere |
---|---|---|
code | String | Codul fee-ului/discountului |
description | String | O descriere |
value | String | Valoarea fee-ului sau discountului |
Structura Products
Denumire | Tip date | Descriere | Since |
---|---|---|---|
quantity | Integer | Cantitatea din produsul selectat de catre client pe comanda curenta | |
price | Integer | Pretul produsului exprimat in bani (centi) | |
name | String | Numele produsului | |
id | String | Id-ul produsului. ID-ul are corespondenta in solutia de POS. Aceste ID-uri pot fi transmise de catre implementatorul POS si vor fi setate ca atare. | |
attributes | Array | Atributele unui produs, optiunile de selectie precum optionalele sau aditionalele. Lista va contine o sublista de produse a caror pret poate fi 0 in cazul optionalelor sau mai mare de cat 0 in cazul aditionalelor. | |
purchased_product_id | String | Identificator unic al produsului in cadrul unei anumite comenzi. | |
discount | Integer | Discount in centi aplicat la nivel de produs | 11.10.2023 |
Structura Attributes
Denumire | Tip date | Descriere |
---|---|---|
id | String | Identificatorul atributului, id-ul de produs care este atasat produsului principal selectat. De exemplu, in cazul meniurilor, cand acestea sunt formate din mai multe subproduse. |
quantity | Integer | Cantitatea dintr-un anumit atribut selectata. |
name | String | Numele atributului. |
price | Integer | Pretul exprimat in bani (centi). |
Structura Delivery Address
Denumire | Tip date | Descriere |
---|---|---|
label | String | Adresa completa, nestructurata asa cum este selectata in Google Maps de catre utilizatorul Glovo |
latitude | Double | Latitudinea la care se gaseste adresa, cum este primita din Google Maps |
longitude | Double | Longitudinea la care se gaseste adresa conform Google Maps. |
Structura Detailed Fees
Denumire | Tip date | Descriere |
---|---|---|
code | String | Reprezinta codul fee-ului. Valori posibile sunt : DeliveryFee, MinimumBasketSurcharge, ServiceFee |
description | String | Descrierea fee-ului |
value | Integer | Valoarea feeului in cea mai mica unitate |
Structura Glovo Discounts
Denumire | Tip date | Descriere |
---|---|---|
code | String | Reprezinta codul discount-ului. Valori posibile sunt : GlovoDiscount, GlovoSupportedDeliveryFee, Other |
description | String | Descrierea discount-ului |
value | Integer | Valoarea feeului in cea mai mica unitate |
Structura Restaurant Discounts
Denumire | Tip date | Descriere |
---|---|---|
code | String | Reprezinta codul discount-ului. Valori posibile sunt : RestaurantDiscount |
description | String | Descrierea discount-ului |
value | Integer | Valoarea feeului in cea mai mica unitate |
Exemple Notificari
Notificare de tip pickup (1)
{ "traceCode":null, "traceId":null, "order_id":"616624880", "store_id":"test__aaa12321", "order_code":"TMRXMGYXV", "order_time":"2023-05-09 22:42:42", "order_type":"pickup", "estimated_pickup_time":"2023-05-09 22:55:14", "payment_method":"DELAYED", "currency":"RON", "allergy_info":"", "pick_up_code":"964", "is_picked_up_by_customer":false, "cutlery_requested":false, "special_requirements":null, "loyalty_card":null, "payment_total":3075, "customer_cash_payment_amount":null, "courier":{ "name":"Test T.", "phone_number":"+3333" }, "customer":{ "name":"Test Customer", "phone_number":"N/A", "hash":"740c4544-3d69-3187-b564-80eecfa83e77", "invoicing_details":null }, "fees":[
], "discounts":[ { "code":"Discount", "description":"Discounnt based on customer order for glovo delivery order ", "value":1025 } ], "products":[ { "id":"shaorma-mare-delivery-meniu_shaorma", "purchased_product_id":"MTgzMjYyMjA4MA==", "quantity":1, "price":4100, "name":"Shaorma mare pui + cartofi + racoritoare + sos deep", "attributes":[
] } ], "delivery_address":null, "bundled_orders":[
] }
Notificare de tip pickup (2)
{ "traceCode":null, "traceId":null, "order_id":"616609143", "store_id":"TEST__22222", "order_code":"TMB9H29JC", "order_time":"2023-05-09 22:25:02", "order_type":"pickup", "estimated_pickup_time":"2023-05-09 22:38:30", "payment_method":"DELAYED", "currency":"RON", "allergy_info":"NU DORESC SALATEE IN SHAORMA SAU GYROS SI NICI SOS DE MASLINE!!!!", "pick_up_code":"496", "is_picked_up_by_customer":false, "cutlery_requested":false, "special_requirements":null, "loyalty_card":null, "payment_total":6762, "customer_cash_payment_amount":null, "courier":{ "name":"TEST", "phone_number":"+4444" }, "customer":{ "name":"TEST S.", "phone_number":"N/A", "hash":"11ad3b6a-e2ff-39ab-ad7b-d216aee26e82", "invoicing_details":null }, "fees":[
], "discounts":[ { "code":"Discount", "description":"Discounnt based on customer order for glovo delivery order ", "value":1988 } ], "products":[ { "id":"cola", "purchased_product_id":"MTgzMjU4MDQyOQ==", "quantity":1, "price":800, "name":"cola", "attributes":[
] }, { "id":"shaorma-mare-delivery-meniu_shaorma", "purchased_product_id":"MTgzMjU4MDQyOA==", "quantity":1, "price":4100, "name":"Shaorma mare pui + cartofi + racoritoare + sos deep", "attributes":[
] }, { "id":"shaorma-mica-pui-vatra-delivery-gyrs", "purchased_product_id":"MTgzMjU4MDQyNw==", "quantity":1, "price":3850, "name":"Gyros pe vatra pui + cartofi + racoritoare + sos Deep", "attributes":[
] } ], "delivery_address":null, "bundled_orders":[
] }
Notificare tip marketplace (1)
{ "traceCode":null, "traceId":null, "order_id":"616615673", "store_id":"TEST__12345---1", "order_code":"BU8GXCCHK", "order_time":"2023-05-09 22:32:01", "order_type":"delivery", "estimated_pickup_time":"2023-05-09 22:41:39", "payment_method":"DELAYED", "currency":"RON", "allergy_info":"", "pick_up_code":"242", "is_picked_up_by_customer":false, "cutlery_requested":false, "special_requirements":null, "loyalty_card":null, "payment_total":6400, "customer_cash_payment_amount":null, "courier":{ "name":null, "phone_number":null }, "customer":{ "name":"TEST", "phone_number":"+3333333", "hash":"211fc636-3e8a-3de0-99ab-e39c389bad4f", "invoicing_details":null }, "fees":[ { "code":"DeliveryFee", "description":null, "value":699 } ], "discounts":[ { "code":"Voucher", "description":"Calculated voucher from order", "value":699 } ], "products":[ { "id":"235", "purchased_product_id":"MTgzMjU5Nzk0Mw==", "quantity":1, "price":5000, "name":"Ciolan afumat cu fasole iahnie", "attributes":[
] }, { "id":"557", "purchased_product_id":"MTgzMjU5Nzk0Mg==", "quantity":1, "price":1400, "name":"Salată de gogoșari murati", "attributes":[
] } ], "delivery_address":{ "label":"Adresa de livrare", "latitude":44.3935971, "longitude":26.1297343 }, "bundled_orders":[
] }
Notificare tip marketplace (2)
{ "traceCode":null, "traceId":null, "order_id":"616610156", "store_id":"TEST__22222", "order_code":"CJTN7YT3E", "order_time":"2023-05-09 22:26:03", "order_type":"delivery", "estimated_pickup_time":"2023-05-09 22:38:35", "payment_method":"CASH", "currency":"RON", "allergy_info":"", "pick_up_code":"726", "is_picked_up_by_customer":false, "cutlery_requested":false, "special_requirements":null, "loyalty_card":null, "payment_total":6796, "customer_cash_payment_amount":10000, "courier":{ "name":null, "phone_number":null }, "customer":{ "name":"Test Test", "phone_number":"+4444", "hash":"c8a5baf3-e630-33ce-b6e6-48ea4b17ca71", "invoicing_details":null }, "fees":[ { "code":"DeliveryFee", "description":null, "value":599 } ], "discounts":[ { "code":"Voucher", "description":"Calculated voucher from order", "value":900 }, { "code":"Discount", "description":"Discount based on customer order for restaurant delivery order", "value":900 } ], "products":[ { "id":"15710361-15914393", "purchased_product_id":"MTgzMjU4MzE1Mg==", "quantity":1, "price":999, "name":"Inele de ceapă", "attributes":[
] }, { "id":"19194151-16341228", "purchased_product_id":"MTgzMjU4MzE1MA==", "quantity":1, "price":4499, "name":"Pizza Anghinare", "attributes":[
] }, { "id":"15914095-19194805", "purchased_product_id":"MTgzMjU4MzE1MQ==", "quantity":1, "price":2499, "name":"Papanasi cu smantana si gem de afine", "attributes":[
] } ], "delivery_address":{ "label":"Adresa de livrare", "latitude":46.771634, "longitude":23.6301196 }, "bundled_orders":[
] }
Notificare tip marketplace (2)
{ "traceCode":null, "traceId":null, "order_id":"616604244", "store_id":"test__1111", "order_code":"CJWCL11UW", "order_time":"2023-05-09 22:19:59", "order_type":"delivery", "estimated_pickup_time":"2023-05-09 22:33:48", "payment_method":"DELAYED", "currency":"RON", "allergy_info":"", "pick_up_code":"602", "is_picked_up_by_customer":false, "cutlery_requested":false, "special_requirements":null, "loyalty_card":null, "payment_total":13994, "customer_cash_payment_amount":null, "courier":{ "name":null, "phone_number":null }, "customer":{ "name":"Test Test", "phone_number":"+2222", "hash":"016e3838-d5cd-3981-8cc3-8601a2a115a7", "invoicing_details":null }, "fees":[ { "code":"DeliveryFee", "description":null, "value":599 } ], "discounts":[
], "products":[ { "id":"15914065-15914432", "purchased_product_id":"MTgzMjU2NzQ1NA==", "quantity":1, "price":500, "name":"Chilli Mayo", "attributes":[
] }, { "id":"15710352-15914267", "purchased_product_id":"MTgzMjU2NzQ1MQ==", "quantity":1, "price":3599, "name":"Chicken Burger", "attributes":[ { "id":"cf-15710352-15914267-17038868", "quantity":1, "price":999, "name":"Cartofi Fry n Dip" } ] }, { "id":"15710355-15914315", "purchased_product_id":"MTgzMjU2NzQ1Mg==", "quantity":1, "price":2999, "name":"Tenders", "attributes":[ { "id":"cf-15710355-15914315-17147846", "quantity":1, "price":999, "name":"Cartofi Fry n Dip" } ] }, { "id":"15914058-15914288", "purchased_product_id":"MTgzMjU2NzQ1Mw==", "quantity":1, "price":3799, "name":"Paste Quattro Formaggi", "attributes":[ { "id":"extra-15914058-15914288-16336474", "quantity":1, "price":500, "name":"Extra Parmezan" } ] } ], "delivery_address":{ "label":"Adresa de livrare", "latitude":46.75185968139803, "longitude":23.58961270255769 }, "bundled_orders":[
] }
Actualizare Meniu Store
Intro
Sistemul Glovo oferă posibilitatea de a trimite un payload pentru actualizarea completă a unui anumit magazin definit, inclusiv suprascrierea configurării vechi cu cea nouă. Această operațiune se realizează prin trimiterea unui payload JSON către Glovo ETL.
Operația de actualizare a meniului este asincronă și are loc în două etape. Prima etapă constă în trimiterea payload-ului către endpoint-ul de actualizare corespunzător, definit aici. Sistemul returnează un răspuns de succes, dar acesta nu înseamnă că magazinul Glovo a fost actualizat cu succes. În schimb, înseamnă că payload-ul a fost primit și va fi procesat.
Pentru a verifica dacă operația a fost finalizată cu succes sau nu, este necesar să apelați al doilea endpoint, respectiv cel de check status, cu detalii disponibile aici. De asemenea, API-ul V3, în comparație cu versiunea anterioară, permite definirea unui endpoint unde se pot primi notificări legate de operațiunea de actualizare. Aceasta înseamnă că în momentul în care Glovo răspunde cu SUCCESS sau ERROR, sau cu orice alt status în afara de PROCESSING, Glovo ETL va trimite o notificare la endpointul definit. Payload-ul trimis va fi același ca și în cazul apelării funcției de check status menționate anterior.
IMPORTANT:Exista o limita de 5 operatii de menu update pe zi per store id. Daca se depaseste numarul de 5 operatii pe zi, API-ul va intoarce eroare in care se specifica faptul ca aceasta limita a fost atinsa. Pentru a se evita tingerea acestei limite, pentru anumite operatii, se poate folosi api-urile de Items, definite prin modificare atribut , modificare produs sau actualizare bulk
Format JSON
Un exemplu de structura care trebuie trimisa catre endpoin-tul de update menu este urmatoarea:
{
"store_environment": "staging",
"store_id": "gi20__001",
"partner_name": "gi20",
"super_categories": [
{
"name": "default",
"position": 0,
"image_url": null,
"display_super_category": false,
"categories": [
{
"name": "MENIUL ZILEI",
"position": 1,
"sections": [
{
"name": "MENIUL ZILEI",
"position": 0,
"products": [
{
"id": "18412870",
"name": "MENIUL ZILEI",
"price": "45.0",
"image_url": null,
"description": "Ciorbă+Fel principal+garnitură la alegere+salată de însoțire. ",
"available": true,
"attribute_groups": [
{
"id": "17876377",
"name": "Alege ciorba 300 g",
"min": 1,
"max": 1,
"collapse": true,
"multiple_selection": false,
"attributes": [
{
"id": "17876412",
"name": "Ciorbă de văcuță",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "17876428",
"name": "Ciorbă rădăuțeană",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18410924",
"name": "Ciorbă de legume",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18410951",
"name": "Ciorba de burta",
"available": true,
"selected_by_default": false,
"price": "0.0"
}
]
},
{
"id": "17876434",
"name": "Alege fel principal 130 g",
"min": 1,
"max": 1,
"collapse": true,
"multiple_selection": false,
"attributes": [
{
"id": "18410955",
"name": "Șnițel de pui parizian",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18410962",
"name": "Snitel vienez",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18410986",
"name": "Strips",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18411018",
"name": "Snitel porc",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "29146515",
"name": "Pulpa de pui la cuptor",
"available": true,
"selected_by_default": false,
"price": "0.0"
}
]
},
{
"id": "28894887",
"name": "Alege garnitura",
"min": 1,
"max": 1,
"collapse": true,
"multiple_selection": false,
"attributes": [
{
"id": "28894978",
"name": "Cartofi wedges",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "28895046",
"name": "Cartofi pai",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "28895274",
"name": "Piure de cartofi",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "28895291",
"name": "Orez cu legume",
"available": true,
"selected_by_default": false,
"price": "0.0"
}
]
},
{
"id": "18411033",
"name": "Alege salata",
"min": 0,
"max": 1,
"collapse": true,
"multiple_selection": false,
"attributes": [
{
"id": "18411039",
"name": "Salată de varză",
"available": true,
"selected_by_default": false,
"price": "0.0"
},
{
"id": "18411049",
"name": "Castraveti murati",
"available": true,
"selected_by_default": false,
"price": "0.0"
}
]
}
]
}
]
}
]
},
{
"name": "MIC DEJUN",
"position": 2,
"sections": [
{
"name": "MIC DEJUN",
"position": 0,
"products": [
{
"id": "17862204",
"name": "Omletă cu ciuperci",
"price": "17.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411120",
"name": "Omletă cu șuncă",
"price": "18.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411136",
"name": "Omletă Artemis",
"price": "20.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
}
]
}
]
},
{
"name": "CIORBE",
"position": 3,
"sections": [
{
"name": "CIORBE",
"position": 0,
"products": [
{
"id": "18411225",
"name": "Ciorbă de legume",
"price": "20.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411250",
"name": "Ciorbă de văcuță",
"price": "23.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411265",
"name": "Ciorbă de burtă",
"price": "23.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411275",
"name": "Ciorbă rădăuțeană",
"price": "23.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
}
]
}
]
},
{
"name": "HAMBURGERI",
"position": 4,
"sections": [
{
"name": "HAMBURGERI",
"position": 0,
"products": [
{
"id": "18411340",
"name": "Hamburger clasic",
"price": "45.0",
"image_url": null,
"description": "Carne de vită, roșii, ceapă, castraveți murați, sos de casă, brânză cheddar, cartofi pai 280 gr ",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411376",
"name": "Hamburger cremă de brânză",
"price": "46.0",
"image_url": null,
"description": "Carne de vită, roșii, sos de gorgonzola, salată, brânză cheddar, sos de casă, cartofi pai cu parmezan și usturoi 280 g",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411407",
"name": "Hamburger cu trufe",
"price": "49.0",
"image_url": null,
"description": "Carne de vită, rucolă, nuci, ulei de trufe, brânză cedar, cartofi pai cu parmezan și usturoi 280 g ",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411423",
"name": "Hamburger ARTEMIS",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411436",
"name": "Double hamburger classic",
"price": "54.0",
"image_url": null,
"description": "2 bucăți de carne de vită, roșii, ceapă, castraveți murați, sos de casă, brânză cheddar, cartofi pai",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411480",
"name": "Double hamburger ARTEMIS",
"price": "55.0",
"image_url": null,
"description": "2 bucăți de carne de vită, roșii, pancetta, ou, castraveți murați, sos de casă, cartofi pai cu parmezan și usturoi",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411513",
"name": "Double hamburger cu cremă de brânză",
"price": "53.0",
"image_url": null,
"description": "2 bucăți carne de vită, roșii, cremă de brânză, salată, mozzarella, sos de casă, cartofi pai cu usturoi și parmezan",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411539",
"name": "Double hamburger trufe",
"price": "58.0",
"image_url": null,
"description": "Carne de vită, rucola, nuci, maioneză cu ulei de trufe, brânză cheddar, cartofi pai cu usturoi și parmezan",
"available": true,
"attribute_groups": [
]
}
]
}
]
},
{
"name": "MENIURI COMPLETE ",
"position": 6,
"sections": [
{
"name": "MENIURI COMPLETE ",
"position": 0,
"products": [
{
"id": "18411809",
"name": "Cripsy wings",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411842",
"name": "Chilli wings",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411867",
"name": "Strips cu susan",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411879",
"name": "Strips cu fulgi de porumb",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411919",
"name": "Crispy strips",
"price": "41.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18411950",
"name": "Cașcaval pane+ cartofi pai",
"price": "30.0",
"image_url": null,
"description": "150 g/250 g",
"available": true,
"attribute_groups": [
]
}
]
}
]
},
{
"name": "SALATE ",
"position": 9,
"sections": [
{
"name": "SALATE ",
"position": 0,
"products": [
{
"id": "18412384",
"name": "Salată Bulgărească",
"price": "28.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412404",
"name": "Salată Grecească",
"price": "30.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412452",
"name": "Salată Grecească",
"price": "31.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412468",
"name": "Salată asortată",
"price": "14.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
}
]
}
]
},
{
"name": "DESERT",
"position": 10,
"sections": [
{
"name": "DESERT",
"position": 0,
"products": [
{
"id": "18412522",
"name": "Clătite cu ciocolată",
"price": "18.0",
"image_url": null,
"description": "Făină, ou, lapte, ciocolată, zahăr 250 g",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412549",
"name": "Clătite cu dulceață",
"price": "18.0",
"image_url": null,
"description": "Făină, ou, lapte, zahăr, dulceață 250 g ",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412583",
"name": "Clătite cu Finetti, banane și Oreo",
"price": "23.0",
"image_url": null,
"description": "Făină, ou, lapte, zahăr, banane, biscuiți oreo 250 g",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412618",
"name": "Clătite cu brânză de vaci, stafide",
"price": "26.0",
"image_url": null,
"description": "Făină, ou, lapte, brânză de vaci, zahăr, stafide, smântână 250 g",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412651",
"name": "Papanași",
"price": "26.0",
"image_url": null,
"description": "Brânză de vaci, ou, zahăr, făină, smântână, dulceață 250 g ",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412687",
"name": "Cheesecake Oreo",
"price": "28.0",
"image_url": null,
"description": "Unt, ou, zahăr, lapte, biscuiți oreo, sos de afine, cremă de brânză 250 g ",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412699",
"name": "Colțunași cu brânză dulce",
"price": "27.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
},
{
"id": "18412714",
"name": "Colțunași cu smântână dulce",
"price": "27.0",
"image_url": null,
"description": "",
"available": true,
"attribute_groups": [
]
}
]
}
]
}
]
}
]
}
Detaliere properitati JSON
Documentatia OpenAPI pentru menu update poate fi gasita aici.
Pe langa documentatia OpenAPI, prezentam mai jos fiecare sectiune din payload-ul de menu update.
Proprietati de identificare
În cadrul sistemului Glovo, câmpurile "store_environment", "store_id" și "partner_name" sunt utilizate pentru a identifica un partener și un magazin Glovo asociat acelui partener.
Câmpul "store_environment" identifică locația unui magazin în infrastructura Glovo. Magazinul poate fi definit în infrastructura de staging sau de producție, iar valorile permise pentru acest câmp sunt "prod" și "staging".
Câmpul "store_id" reprezintă ID-ul magazinului în sistemul Glovo. În general, acest ID este format din "partner_name" și un șir alfanumeric (partner_name__alfanumeric).
Câmpul "partner_name" este numele partenerului sau al soluției POS, așa cum a fost definit în Portal la momentul înregistrării.
Super Categorii (super_categories)
Super categoriile reprezinta cel mai inalt nivel de organizare al informatiei intr-un store Glovo. Super-categoriile nu sunt obligatorii. Dacă există cel puțin una, o listă cu toate super-categoriile este afișată clienților când deschid un magazin, în aplicație. În caz contrar, colecția este afișată ca si structura principala.
DIFERENTE Fata de versiunea anterioara, in V3 a fost introdusa o modificare. Proprietatea super_categories nu mai este obiect ci este un Array. Acest lucru permite realizarea unei structuri complexe, din punct de vedere ierarhic. In sectiunea de exemple se pot vedea diferite modele de payload si rezultatele rularii acestora pe un store de test. Pentru Backward Compatibility se poate trimite payloadul ca in versiunea V2, adica Obiect in loc de Array. Acest lucru poate fi observat tot in sectiunea de exemple.
Categorii (categories)
O categorie reprezinta nivelul 2 al meniului Glovo, in cazul in care sunt folosite super categorii, sau nivelul 1 in cazul in care super categoriile sunt optionale. Este obligatoriu să aveți cel puțin o categorie în meniul dumneavoastră. Este formată din secțiuni și trebuie să aibă cel puțin una pentru a conține alte elemente. Unele exemple de categorii includ: Băuturi, Burgeri, Salate, Deserturi, Paste.
Sectiuni (sections)
Sectiunile reprezinta un nivel de organizare de sub categorii.
Produse (products)
Un produs este componenta principală a meniului Glovo. De obicei, reprezintă un produs fizic dintr-un magazin, deși oferim magazinelor flexibilitatea de a configura ce doresc să ofere ca produse. Fiecare produs aparține unei secțiuni.
IMPORTANT idu-rile produselor trebuie sa fie unice. Nu pot exista produse cu acelasi Id dar cu preturi diferite. De exemplu, daca avem coca cola, care se vinde cu 1 leu in cazul in care este vandut individual, dar el face parte si dintr-un meniu unde se vinde cu 0 lei, trebuie sa existe 2 produse definite cu idu-uri diferite. Unul pentru vanzarea individuala si unul pentru vanzarea in cadrul unei componente.
IMPORTANT Imaginile produselor trebuie sa se ghideze dupa urmatoarele aspecte:
- Orientare: patrata.
- Dimensiune: 1000 x 1000 px.
- Format: JPG.
- Marime: < 1MB
- Background: deschis, culoare simpla sau texturata
- Protocol: HTTPS Pozele trebuie hostate de catre solutia de POS, trebuie sa raspunda pe protocolull HTTPS iar certificatele trebuie sa fie calificate, si sa nu fie expirate.
Grupuri de atribute (attribute_groups)
Grupurile de atribute permit gruparea personalizărilor similare în grupuri generice. Fiecare grup de atribute poate avea un număr minim și maxim de opțiuni pentru client. Exemple de grupuri de atribute pot include:
Sosuri: un grup de atribute precum maioneză, muștar sau sos de roșii Băuturi: un grup de atribute precum apă, cola sau lămâie
IMPORTANT idu-rile produselor trebuie sa fie unice.
Atribute (attributes)
Un produs poate fi personalizat în diferite moduri, cum ar fi adăugarea de maioneză, includerea unei băuturi sau adăugarea de carne suplimentară. Fiecare dintre aceste personalizări este considerată un atribut. Nu este obligatoriu ca un produs să aibă atribute. Fiecare atribut poate avea un impact diferit asupra prețului. Atributele similare sunt grupate în grupuri de atribute.
IMPORTANT idu-rile produselor trebuie sa fie unice.
Validarea meniului
Permite încărcarea unui meniu și validarea sa în conformitate cu definiția actuală a schemei JSON. Veți primi fie un mesaj "totul este în regulă" (all-OK), fie o listă de erori și o listă de avertismente pe care meniul le-ar genera, împreună cu detalii despre erori.
Specificatia tehnica poate fi gasita aici.
Verificare stare update
Pentru verificarea manuala a starii unei operatii de update, se pot verifica informatiile definite aici
Actualizare elemente store
Intro
Articolele reprezintă produsele și atributele incluse într-un meniu de magazin. Aceste resurse vă permit să efectuați operațiuni individuale sau în masă pentru a le menține actualizate în ceea ce privește prețul și disponibilitatea lor.
Actualizarea elementelor produselor si atributelor se poate face in mai multe moduri. Modificare produse, conform documentatiei de aici. Modificare atribute, conform documentatiei de aici. De asemenea se poate realiza un update bulk de atribute si produse. Documentatia aferenta se poate gasi aici.
Operatia de Bulk Update este o operatie asincrona. Rezultatul operatiei se verifica apelang endpointul de bulk check a carei documentatii se gaseste aici
Setare store in modul aglomerat
La nivelul API-ului de integrare a fost introdusa optiunea de a seta un store in modul aglomerat. Detaliile operatiei se pot gasi aici.
Log Modificari
11.10.2023
În ceea ce privește structura de notificare trimisă către soluțiile de POS, au fost efectuate anumite modificări pentru a introduce noi câmpuri de date. Aceste câmpuri includ următoarele:
- Colectia detailed_fees: Această colecție furnizează informatii detaliate cu privire la taxele care pot fi aplicate în cadrul sistemelor Glovo. Aceste taxe pot include:
- DeliveryFee: Reprezintă taxa de livrare pe care clientul o suportă. Această taxă are valoare atunci când magazinul Glovo este de tip marketplace și livrarea este efectuată de către restaurant.
- MinimumBasketSurcharge: Reprezintă taxa minimă plătită pentru o comandă, în cazul în care valoarea comenzii este sub un anumit prag.
- ServiceFee: Este o taxă suplimentară pentru servicii care poate fi activată și percepută de către Glovo de la clienți. Această taxă este colectată inițial de restaurante și ulterior decontată către Glovo.
- Colectia glovo_discounts: Aceasta este o colecție nou introdusă de Glovo și oferă informații despre discounturile suportate de Glovo pentru produsele din comandă. Aceste informații au fost anterior deduse din datele brute de către sistemul ETL și transmise sub formă de vouchere. Această funcționalitate va continua să existe pentru colecțiile existente de discounturi. Colecția poate include mai multe tipuri de discounturi, precum:
- GlovoDiscount: Este discountul suportat de către Glovo pentru produsele din comandă.
- FreeDeliveryFee: Acest discount reprezintă o reducere calculată de sistemul ETL și nu este disponibil în datele brute furnizate de sistemele centrale Glovo. Acesta ar trebui să reflecte situația în care Glovo sau Restaurantul suportă plata tarifului de livrare (DeliveryFee). Aici pot intra și situațiile în care un client este membru Prime și nu plătește tariful de livrare.
- Other: Această categorie include alte tipuri de discounturi care nu sunt furnizate explicit de către sistemele centrale Glovo, dar care pot fi calculate din datele brute de către sistemul ETL. Acesta poate include, de exemplu, situațiile în care un client plătește parțial comanda cu puncte Glovo.
Colectia restaurant_discounts: Această colecție conține informații despre discounturile suportate de către restaurant.
Campul products_total: Acest câmp conține totalul valorii produselor din comandă. Spre deosebire de câmpul paymentTotal, care poate să includă alte informații, products_total se referă doar la valoarea totală a produselor, fără a include alte informații adiționale.
Discount la nivel de produs: De asemenea, la nivelul fiecarui produs din comanda a fost introdus un camp de discunt care reprezinta discountul aplicat la nivelul produsului. Discountul afisat la nivel de produs se refera doar la discountul suportat de restaurant. Discountul Glovo nu apare la nivel de produs.
Este important de retinut ca informatia este dublata intre colectiile detalied si non detailed. Ele nu trebuie combinate la calcule.
De asemenea este important de retinut faptul ca nu toate informatiile care sunt trecute pe bonul glovo si trebuie sa ajunga prin integrare la restaurant.
05.02.2024
- Introducerea modului "aglomerat"
Portal Integrari
Procesul de activare al unei integrări presupune comunicarea cu un reprezentant al companiei Glovo, care are rolul de a activa integrarea pentru un anumit Store Glovo. Pentru a facilita și gestiona eficient această comunicare, a fost creat un portal de integrări care poate fi accesat la adresa https://portal.integrations.cloud.onlineservice.io/.
Inregistrare cont
Înregistrarea unei noi soluții POS în sistem presupune accesarea linkului de înregistrare disponibil la adresa https://portal.integrations.cloud.onlineservice.io/register. Numele soluției POS poate conține doar litere și cifre, fără spații sau alte caractere speciale. De asemenea, linkul de înregistrare poate fi accesat și din portalul de integrări, disponibil în secțiunea cont a meniului.
După trimiterea cererii de înregistrare, administratorul va primi o notificare pentru a activa noul cont. După activare, solutia de POS va primi pe email datele de autentificare.
Contacte POS
După autentificare, va apărea un mesaj care va anunța că trebuie să definiți două contacte pentru soluția de POS. Este necesară definirea acestor contacte pentru a putea efectua operațiuni în sistem. Lista de contacte POS este disponibilă și în bara de navigare.
Pentru adaugarea unui nou contact POS se alege optiunea Adaugare contact.
Trebuie adaugate minim 2 contacte.
Gestiune Brand
Brandurile reprezinta categoria principala de organizare. Un brand poate avea definite mai multe locatii. Brandul poate reprezenta un restaurant fizic un restaurant virtual sau orice alta grupare de locatii care se refera la aceeasi categorie principala, brandul. Accesam meniul “Operatiuni - Brand” si se va deschide pagina pentru adaugarea acestora. Pentru adaugarea unui brand se alege optiunea Adauga Brand.
Se introduc datele solicitate si se salveaza informatiile.
Notificari active? - daca se scoate aceasta bifa, solutia de POS nu va mai primi notificarile pentru toate storeurile definite la nivelul brandului.
LAAS activ? - aceasta optiune marcheaza faptul ca pentru brandul definit se va activa si integrarea de tip LAAS. Mai multe detalii despre LAAS poot fi gasite aici
Activarea optiunii LAAS presupune introducerea a doua informatii suplimentare. Detaliile se gasesc in documentatia LAAS.
Gestiune Locatii
Dupa adaugarea unui brand, se poate selecta optiunea de Vizualizare din grid-ul care contine toate brandurile. In ecranul de vizualizare se pot adauga locatii aferente brandului.
Dupa selectarea vizualizarii, se va deschide ecranul de mai jos.
Urmatorul pas este de a accesa butonul din dreapta jos “Creare o noua locatie”.
Nume: se introduce numele restaurantului
Pos Store ID: se introduce lid-ul (ID-ul din sistemul POS al locatiei) fara indicativul solutiei de POS pentru ca acesta se completeaza automat in campul de mai jos
NOTA Acest ID poate fi orice sir de caractere alfanumerice atata timp cat ele sunt unice, in sistem.
Adresa: trecem adresa restaurantului
Menu Update activ? ca si in cazul brandului, se poate dezactiva primirea notificarilor pentru o anumita locatie.
IMPORTANT Integrare deja activata? este un atribut folosit pentru introducerea datelor istorice. bifarea acestei optiuni va marca locatia ca fiind deja activata in Glovo, ceea ce inseamna ca echipa Glovo nu va mai fi notificata pentru activarea unei locatii noi.
Dupa salvarea unei noi locatii, echipa Glovo va fi notificate pentru a putea sa realizeze activarea in sistemele Glovo. Dupa ce activarea in Glovo va fi realizata, echipa Glovo va marca locatia ca activa si solutia de POS va fi primi notificarea de activare a locatiei. In acest moment, notificarile pot ajunge in POS.
Gestiune API key-uri POS
IMPORTANT Valoarea API key-ului se trimite pe headerul Authorization catre endpointurile definite.
Definirea unui API key reprezintă un pas necesar înainte de a putea defini endpoint-uri în sistem, pentru notificări referitoare la comenzi noi, rezultate de actualizări de meniu sau anulări de comenzi. Procedura de definire a unui API key poate fi accesată prin intermediul meniului Profil-API Key-uri POS.
Se alege optiunea Creare API Key POS
API Code - un cod oarecare API Key - este valoarea care va fi trimisa pe headerul Authorization catre endpoint-urile definite. Api Name - un nume descriptiv pentru cheia pe care o definim Pos implementation - se alege automat numele solutiei de POS
Gestiune Endpoint-uri POS
Pentru gestiunea endpoint-urilor se acceaseaza meniul Profil - Endpoint-uri POS
Mai departe se alege optiunea Creare Endpoint POS.
Nume - numele endoint-ului URL - url-ul endpoint-ului Solutie POS - se autocompleteaza cu solutia POS existenta Configurare cheie API - se alege dintre cheile API definite Cod - un cod pentru endpoint
Tipurile de endpoint-uri POS care se pot defini sunt :
Notificare comenzi - catre acest tip de endpoint se tirmit notificarile pentru comenzile noi
Notificare rezultat menu update - se trimit notificarile cu rezultatul operatiei de menu update
Notificare comenzi anulate - se trimit comenzile anulate de catre utilizatorii Glovo
Inainte de salvare, se poate apasa pe butonul Testeaza endpoint pentru a se verifica raspunsul venit de la endpoint-ul definit.
Pot fi definite mai multe endpoint-uri de acelasi tip, dar trebuie tinut cont de faptul ca toate comenzile din contul solutiei de POS se vor duce catre toate endpointurile. Daca solutia de POS trebuie sa isi distribuie mesajele, catre multipli clienti, acest lucru se face la nivelul solutiei. Aceasta expune un singur endpoint catre glovo si mai departe, distribuirea, se face la nivelul acelui endpoint.
Portal Laas
Informatii generale
Laas este un serviciu de inchiriere curieri pus la dispozitie de catre Glovo. Documentatia OpenAPI de integrari Laas este gaseste aici
Laas se foloseste pentru inchirierea de resurse pentru comenzile venite atat din canale externe dar si pentru comenzile venit din Glovo, atunci cand restaurantul face livrarea cu livratori proprii, restaurant de tip Marketplace. Pentru a facilita crearea de comenzi LAAS care vin prin Glovo, a fost create o noua functionalitate care este documentata mai jos.
Creare cont in LAAS Partners
Daca nu exista cont deja creat in LAAS Partners, se pot urmari pasii de mai jos. Daca exista deja cont creat se poate trece la pasul 7.
Pentru integrarea LAAS există două medii:
1 Mediul de testare (staging/sandbox)
2 Mediul de producție (pentru crearea de comenzi reale)
Pentru a putea folosi acest serviciu, este nevoie să vă creați un cont, urmărind pașii de mai jos:
3 Accesați url-ul https://laaspartners.testglovo.com (test) sau https://laaspartners.glovoapp.com (producție).
4 Apăsați ‘Înregistrați/vă’ și completați câmpurile Nume, Email, Parolă.
5 În pasul următor trebuie să completați datele companiei.
6 După salvarea datelor, contul dumneavoastră ajunge în starea ‘Cont în curs de activare’. După verificarea detaliilor veți fi notificat pe email.
7 După ce contul Dumneavoastră devine activ, vă puteți autentifica pentru a obține credențialele pentru integrare. Accesați meniul ‘Setări’.
8 În dreapta paginii accesați meniul ‘Date de acces API’ și apăsați butonul ‘Reînnoiți datele de acces’.
9 Datele de acces vor fi șterse și regenerate de fiecare date când efectuați acțiunea de reînnoire.
10 Salvați datele de acces (ApiKey și ApiSecret) într-un loc sigur.
Completare detalii LAAS in Portalul Integrari.
Adresa portalul este aici : https://portal.integrations.cloud.onlineservice.io/
Daca nu aveti cont in Portal urmati pasii de aici. Dupa activarea contului, veti primi un email cu datele de autentificare. Dupa ce a fost creat contul nu uitati ca trebuie sa creati cel putin 2 contacte in Portal. Mai multe detalii aici
Portalul Integrari suporta mai multe moduri de lucru cu LAAS. Acestea sunt detaliate mai jos.
Comenzi din canale externe Glovo
Pentru comenzile care vin din canale externe, adica nu prin Glovo, activarea LAAS se face prin definirea unui nou brand si prin introducerea cheilor obtinute in pasii anterior, la nivelul brandului.
Meniul Operatiuni - Branduri
Deoarece acest Brand va lucra cu comenzi LAAS, se va bufa optiunea "LAAS activ?" si se vor introduce cheile obtinute in pasii anteriori.
IMPORTANT: Daca acest brand se foloseste doar pentru comenzi LAAS si nu este nevoie de trimiterea de notificari catre solutia de POS a restaurantului. se debifeaza functia "Notificari active?"
Comenzi prin canale Glovo fara trimiterea de notificare comanda catre POS
Pentru a usura munca de creare inregistrari in LAAS Partners, a fost creat un mecanism prin care sa se poata adauga acestea prin apasarea unui buton. Pentru acest lucru trebuie sa urmati cativa pasi. Definirea unui brand se face conform pasului anterior.
Dupa ce s-a definit un Brand, trebuie sa se defineasca o locatie pentru acel Brand. Locatia reprezinta structura fizica de unde se pot ridica comenzile de livrare. IMPORTANT : Adresa locatiei trebuie sa fie introdusa cu mare atentie pentru ca de acolo se va face ridicarea comenzilor. O adresa de pickup gresita va ingreuna procesul de livrare.
Pentru a defini o locatie pe un brand, urmati pasii urmatori.
- Din lista de branduri, selectati optiunea "Vizualizare" a brandului dorit.
- In sectiunea "Locatii" alegeti optiunea "Creare o noua locatie"
Se va deschide ecranul de adaugare locatie.
In acest ecran introduceti detaliile storeului. Detalii pot fi gasite si in documentatia de aici.
In cazul in care Brandul este marcat pentru LAAS, in ecran apar informatii suplimentare de bifat. Daca dorim sa putem genera comenzi LAAS pentru acest store, se bifeaza functia "Disponibil pentru LAAS". Fara aceasta functie bifata, comenzile nu vor fi disponibile pentru creare in LAAS.
In cazul in care dorim si primirea de comenzi in solutia de POS folosita de restaurant, se bifeaza si optiunea "Disponibil pentru notificari de comenzi". Un Brand definit ca LAAS care nu are optiunea "Disponibil pentru notificari de comenzi" nu va primi notificari de comenzi in solutia de POS. Daca un Brand este definit ca LAAS, dar pentru o locatie nu se doreste creare din sistem a comenzilor LAAS, se poate pastra bifata doar optiunea "Disponibil pentru notificari de comenzi" fara optiunea "Disponibil pentru LAAS".
Daca se merge pe varianta in care se doreste creare de comenzi LAAS din portalul integrari si se bifeaza optiunile de mai sus, dupa activarea in Glovo a locatiei, activare facuta de catre echipa Glovo, comenzile eligibile LAAS vor putea fi vazute in sectiunea Operatiuni -> Comenzi eligibile LAAS.
In Lista vor aparea ultimele comenzi intrate in sistem care sunt disponibile pentru a fi trimise in LAAS Partners. Se aceseaza optiunea "Creare comanda LAAS" pentru a deschide ecranul de creare comanda.
Acest ecran prezinta cateva informatii preluate din comanda glovo. Un aspect foarte important este daca plata selectata de catre client in Glovo este cash In acest caz, la creare comenzii in LAAS Partners trebuie sa se trimita si sumele ce trebuie incasate de la client. In acest caz, apar doua campuri de valori. "Cost livrare" si "Cost colet". Portalul integrari incearca sa calculeze aceste sume pe baza informatiilor venite din Glovo, dar nu pot fi garantate din cauza ca pot aparea tot felul de discounturi si alte aspecte care pot ingreuna determinarea sumei de plata de catre client. Sumele afisate sunt cu caracter informativ, un operator uman avand responsabilitatea sa le valideze. De aceea exista bifa "Confirm ca am verificat sumele si sunt corecte." fara de care nu se activeaza butonul de salvare.
Daca apar diferente intre sumele afisate si cele calculate de catre un operator uman, va rog sa raportati problema prin apasarea optiunii "Raporteaza problema sume".
FOARTE IMPORTANT: Verificati sumele din campurile "Cost livrare" si "Cost colet" pentru a va asigura ca sunt corecte. Responsabilitatea corectitudinii valorilor este a persoanei care va crea o comanda in LAAS.
Daca toate informatiile sunt corecte, se poate apasa butonul "Salveaza" si astfel se va crea o comanda in LAAS Partners. Mai departe, comanda se urmareste in LAAS Partners.
IMPORTANT: Dacă nu vă apare secțiunea de LAAS în portal, vă rugăm solicitați activarea acesteia.