Zewnętrzne menu aplikacji Syrve
W Syrve Live API v2 wdrożyliśmy metody, które pozwalają na bardziej elastyczną pracę z zewnętrznym menu. Zaleta nowych metod polega na tym, że podczas pobierania menu system zewnętrzny otrzyma aktualne ceny i dostępność dań w restauracji w momencie zapytania, nie ma potrzeby osobnej ręcznej synchronizacji zewnętrznego menu Syrve App z cenami restauracji.
Metody:
/api/2/menu - lista zewnętrznych menu i kategorii cen dostępnych dla ApiLogin
/api/2/menu/by_id - metoda pobierania zewnętrznego menu (w zapytaniu przekazywane jest id menu)
Praca z zewnętrznym menu Syrve App za pośrednictwem Syrve Live API jest dostępna tylko dla użytkowników wersji chmurowej.
Zewnętrzne menu nie działa z aktualizacjami cen.
Do pracy z Syrve Loyalty nadal należy korzystać z zewnętrznego menu utworzonego w Syrve Instance. Wystarczy jedynie zduplikować pozycje z zewnętrznego menu Syrve App, dodając te same dania do Syrve Instance bez dodatkowych ustawień struktury menu.
Przypadki użycia
1. Restauracja chce ustawić inny skład dań w zewnętrznym menu dla różnych typów zamówień. Na przykład niektóre dania nie mogą być dostarczane przez kurierów, ale muszą być dostępne w zewnętrznym menu do odbioru osobistego. Mogą również występować różne ceny dla odbioru i dostawy.
2. Restauracja posiada osobną aplikację do zamówień na dowóz i osobną aplikację do zamówień przy stoliku. Menu jest takie samo, ale ceny lub zestaw restauracji, z którymi aplikacje współpracują, mogą się różnić.
3. Różne ceny dań i różna dostępność dań w różnych restauracjach sieci. Na przykład w "Restauracji 1" sałatka kosztuje 10 USD, w "Restauracji 2" - 15 USD, a w "Restauracji 3" danie zostało wyłączone ze sprzedaży.
4. Restauracja chce zamieścić na swojej stronie internetowej informacje o alergenach obecnych w potrawie.
5. Restauracja korzysta z rozmiarów dań i chce wyświetlać informacje o kaloryczności i wadze w zależności od rozmiaru dania.
6. Restauracja korzysta z rozmiarów dań i chce, aby zdjęcia dań na stronie różniły się w zależności od rozmiaru.
7. Menu restauracji (zestaw dań, ceny) różni się dla różnych usług zewnętrznych.
8. Restauracja chce ograniczyć usługę zewnętrzną w pracy z siecią restauracji i udostępnić dostęp tylko do wybranych restauracji w sieci.
Algorytm pracy
Konfiguracja kont do pracy z API
Aby pracować z zewnętrznymi menu za pomocą API, należy powiązać je z kontem Syrve Live API.
-
Zaloguj się do swojego konta Syrve App - Syrve Live API
-
Wybierz "API Clients" - Dodaj:

- Ustaw nazwę konta i opcjonalnie określ źródło zamówienia:

"Źródło zamówienia" służy zarówno do oznaczania zamówień pochodzących przez API, jak i do ograniczania widoczności zamówień.
Jeśli "Źródło zamówienia" nie jest określone, to przez API można uzyskać informacje o wszystkich zamówieniach restauracji.
Jeśli "Źródło zamówienia" jest określone, to zamówienia tworzone przez API będą oznaczone "Źródłem", a dostęp do zamówień będzie ograniczony przez filtr.
- Wybierz zewnętrzne menu z listy rozwijanej (można wybrać wiele opcji):

- Wybierz wartość pola Źródło ceny. Ceny w zewnętrznym menu mogą pochodzić:
- z zewnętrznego menu (ceny dań są podstawiane z zewnętrznego menu utworzonego w Syrve App)
- z wybranej kategorii cen (ceny pobierane są z konkretnej restauracji dla danej kategorii cen, zewnętrzne menu Syrve App określa tylko strukturę menu).
Jeśli w polu "Źródło ceny" wybrano "Kategoria cen", to z listy rozwijanej wybierz jedną lub kilka kategorii cen, z którymi będzie pracował system zewnętrzny:

- Zapisz zmiany.
Praca z API
Aby uzyskać listę zewnętrznych menu, z którymi może pracować system zewnętrzny, należy pobrać wszystkie zewnętrzne menu dostępne dla konta, a następnie, aby uzyskać informacje o konkretnym menu, zostanie użyte pole id z odpowiedzi na zapytanie. Do tego służy /api/2/menu.
Body jest puste, struktura wyjściowa to:
{
"externalMenus": [
{"id": 42, "name": "Menu 1"},
{"id": 43, "name": "Menu 2"}
],
"priceCategories": [ // null, jeśli w UI wybrano zewnętrzne menu jako Źródło zamówienia
{"id": guid1, "name": "PC 1"},
{"id": guid2, "name": "PC 2"}
],
}
Następnie, korzystając z uzyskanego ID zewnętrznego menu, pobierz pozycje dla niego za pomocą /api/2/menu/by_id z body:
{
"externalMenuId": 73,
"organizationIds": ["c0a959b8-7ba0-4763-a297-eda830672cca"],
"priceCategoryId": guid lub null
}
Null w tej metodzie można wysłać tylko jeśli pobieranie cen jest skonfigurowane z zewnętrznego menu. W przypadku pobierania cen z kategorii cen, obowiązkowe jest wskazanie kategorii cen, nawet jeśli jest to tylko jedna (bazowa).
W odpowiedzi przychodzi struktura zewnętrznego menu:
{
"id": 73,
"name": "Menu rest",
"description": "",
"itemCategories": [
{
"id": "39bdc944-82d0-462a-982d-591326cef59c",
"name": "Kawa",
"description": "",
"buttonImageUrl": "",
"headerImageUrl": null,
"items": [
{
"itemId": "2f9f071d-f8d0-4d91-9674-21044abaea42",
"sku": "00064",
"name": "Cappuccino",
"description": "Smaczne klasyczne cappuccino
",
"allergenGroups": [
{
"id": "d15c3f77-8dcd-3cb9-27b8-99363c7fba6a",
"code": "7",
"name": "Mleko"
}
],
"tags": [
],
"labels": [
],
"taxCategory": null,
"itemSizes": [
{
"sizeId": "865522ee-3104-4579-8c12-47de103193fa",
"sku": "00064-S",
"sizeCode": "S",
"sizeName": "Mały",
"isDefault": true,
"nutritionPerHundredGrams": {
"fats": 2,
"carbs": 5,
"proteins": 4,
"energy": 54
},
"prices": [
{
"price": 170,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 150,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"portionWeightGrams": 400,
"itemModifierGroups": [
{
"name": "Mleko",
"description": "",
"restrictions": {
"minQuantity": 1,
"maxQuantity": 1,
"freeQuantity": 0,
"byDefault": 0
},
"items": [
{
"id": "44d44fa6-5676-443c-9b01-84c239b3c7f9",
"sku": "00059",
"name": "Mleko migdałowe",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "820b9018-6797-48df-892b-875306e792b5"
},
{
"id": "80e4c7a6-da3f-4548-8233-d4615a304436",
"sku": "00060",
"name": "Mleko kokosowe",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "495ef4d6-8c52-40fb-8f50-96bd8e486af9"
},
{
"id": "4f80ab6b-4031-4a74-a4c6-07df66a45491",
"sku": "00058",
"name": "Standardowe mleko",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 1
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 1,
"carbs": 6,
"proteins": 4,
"energy": 49
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "6fffa208-704f-43b9-b028-37da372f81ec"
}
],
"canBeDivided": true,
"itemGroupId": "7bb36295-54f1-4940-8b05-0e4dd618733a",
"sku": "0025",
"childModifiersHaveMinMaxRestrictions": false
},
{
"name": "Syrop",
"description": "",
"restrictions": {
"minQuantity": 0,
"maxQuantity": 9,
"freeQuantity": 0,
"byDefault": 0
},
"items": [
{
"id": "dfb877ef-15f6-4dd9-aa30-24177530b04e",
"sku": "00094",
"name": "Syrop czekoladowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "2818f2de-5717-4f88-b65a-d1d8309357f6"
},
{
"id": "809be120-a0f5-4f56-8182-451aa9201ef6",
"sku": "00095",
"name": "Syrop truskawkowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "39b64a14-723d-46ed-8efc-b0b4a4f6a44b"
},
{
"id": "5353d3c0-0531-465c-8104-40b419a3a403",
"sku": "00096",
"name": "Syrop bananowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "52fef420-04a9-49de-bfd0-0c7c5e5b299c"
},
{
"id": "de9f5029-e52c-411a-a700-e9619d43b349",
"sku": "00093",
"name": "Syrop waniliowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "c170c89a-a868-49c6-9787-91b7197ab869"
},
{
"id": "e3726c2c-6c3b-4fba-b704-a703a5b56e56",
"sku": "00092",
"name": "Syrop kokosowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "869c8404-7a97-48c6-a7f4-13d965f2dac5"
}
],
"canBeDivided": false,
"itemGroupId": "b4d096b3-4c52-49f6-8f66-f75260c1f55c",
"sku": "0020",
"childModifiersHaveMinMaxRestrictions": false
}
],
"buttonImageUrl": null,
"buttonImageCroppedUrl": [
]
},
{
"sizeId": "1a636556-e844-4abf-a95a-ff8e57226ade",
"sku": "00064-L",
"sizeCode": "L",
"sizeName": "Duży",
"isDefault": false,
"nutritionPerHundredGrams": {
"fats": 2,
"carbs": 5,
"proteins": 4,
"energy": 54
},
"prices": [
{
"price": 240,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 240,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"portionWeightGrams": 400,
"itemModifierGroups": [
{
"name": "Mleko",
"description": "",
"restrictions": {
"minQuantity": 1,
"maxQuantity": 1,
"freeQuantity": 0,
"byDefault": 0
},
"items": [
{
"id": "99ff4826-cb6a-4bcb-9f9b-b7a8fef5ed68",
"sku": "00059",
"name": "Mleko migdałowe",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "820b9018-6797-48df-892b-875306e792b5"
},
{
"id": "513c8e13-9f80-4b38-af0f-5b1b3fb53dc4",
"sku": "00060",
"name": "Mleko kokosowe",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "495ef4d6-8c52-40fb-8f50-96bd8e486af9"
},
{
"id": "21aa708c-5808-479e-89b8-35fb46864983",
"sku": "00058",
"name": "Mleko standardowe",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 0,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 0,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 1,
"carbs": 6,
"proteins": 4,
"energy": 49
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "6fffa208-704f-43b9-b028-37da372f81ec"
}
],
"canBeDivided": true,
"itemGroupId": "7bb36295-54f1-4940-8b05-0e4dd618733a",
"sku": "0025",
"childModifiersHaveMinMaxRestrictions": false
},
{
"name": "Syrop",
"description": "",
"restrictions": {
"minQuantity": 0,
"maxQuantity": 9,
"freeQuantity": 0,
"byDefault": 0
},
"items": [
{
"id": "a03682d2-fb15-423f-88de-0260feba6e3d",
"sku": "00094",
"name": "Syrop czekoladowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "2818f2de-5717-4f88-b65a-d1d8309357f6"
},
{
"id": "629d50fe-172b-4bbd-b0b9-af51cf105139",
"sku": "00095",
"name": "Syrop truskawkowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "39b64a14-723d-46ed-8efc-b0b4a4f6a44b"
},
{
"id": "e1b3bfea-2888-40ba-a89c-b3d18a8a394e",
"sku": "00096",
"name": "Syrop bananowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "52fef420-04a9-49de-bfd0-0c7c5e5b299c"
},
{
"id": "93ec800f-f3ec-4636-a318-3f3cca90e5bd",
"sku": "00093",
"name": "Syrop waniliowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "c170c89a-a868-49c6-9787-91b7197ab869"
},
{
"id": "9e1bcf1a-8c8b-4a9d-9b94-c2772fc05e90",
"sku": "00092",
"name": "Syrop kokosowy",
"description": "",
"buttonImageUrl": null,
"prices": [
{
"price": 20,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 20,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"restrictions": {
"minQuantity": 0,
"maxQuantity": 0,
"freeQuantity": 0,
"byDefault": 0
},
"allergenGroups": [
],
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"portionWeightGrams": 0,
"tags": [
],
"labels": [
],
"itemId": "869c8404-7a97-48c6-a7f4-13d965f2dac5"
}
],
"canBeDivided": false,
"itemGroupId": "b4d096b3-4c52-49f6-8f66-f75260c1f55c",
"sku": "0020",
"childModifiersHaveMinMaxRestrictions": false
}
],
"buttonImageUrl": null,
"buttonImageCroppedUrl": [
]
}
],
"orderItemType": "Złożony",
"modifierSchemaId": "71fbd193-d99b-4168-ac17-da664493400e",
"modifierSchemaName": {
"id": "71fbd193-d99b-4168-ac17-da664493400e",
"deleted": false,
"name": "Kawa",
"productScale": "54840d34-2855-4080-9eb9-96dfcd1b040d",
"modifiers": [
{
"modifier": "7bb36295-54f1-4940-8b05-0e4dd618733a",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 1,
"maximumAmount": 1,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": true,
"required": true,
"childModifiers": [
{
"modifier": "820b9018-6797-48df-892b-875306e792b5",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": true,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "495ef4d6-8c52-40fb-8f50-96bd8e486af9",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": true,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "6fffa208-704f-43b9-b028-37da372f81ec",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": true,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
}
],
"cls": ""
},
{
"modifier": "b4d096b3-4c52-49f6-8f66-f75260c1f55c",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 9,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
{
"modifier": "52fef420-04a9-49de-bfd0-0c7c5e5b299c",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "2818f2de-5717-4f88-b65a-d1d8309357f6",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "869c8404-7a97-48c6-a7f4-13d965f2dac5",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "39b64a14-723d-46ed-8efc-b0b4a4f6a44b",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
},
{
"modifier": "c170c89a-a868-49c6-9787-91b7197ab869",
"defaultAmount": 0,
"freeOfChargeAmount": 0,
"minimumAmount": 0,
"maximumAmount": 0,
"hideIfDefaultAmount": false,
"childModifiersHaveMinMaxRestrictions": false,
"splittable": false,
"required": false,
"childModifiers": [
],
"cls": ""
}
],
"cls": ""
}
],
"splittableProduct": true
}
}
]
},
{
"id": "3f5388f0-54aa-466e-993c-dbb824a9f730",
"name": "Pizza",
"description": "",
"buttonImageUrl": "",
"headerImageUrl": null,
"items": [
{
"itemId": "9d28f14c-2ef4-48eb-b0c3-3e2ab9ffa7e7",
"sku": "00017",
"name": "Pepperoni",
"description": "ser mozarella, sos pomidorowy, szynka pepperoni",
"allergenGroups": [
],
"tags": [
],
"labels": [
],
"taxCategory": null,
"itemSizes": [
{
"sizeId": null,
"sku": "00017",
"sizeCode": null,
"sizeName": null,
"isDefault": true,
"nutritionPerHundredGrams": {
"fats": 0,
"carbs": 0,
"proteins": 0,
"energy": 0
},
"prices": [
{
"price": 480,
"organizationId": "7eb96c48-c234-46d2-86bb-42034aa113c7"
},
{
"price": 480,
"organizationId": "9fab92f9-774c-4b10-a6b5-876346815092"
}
],
"portionWeightGrams": 0,
"itemModifierGroups": [
],
"buttonImageUrl": null,
"buttonImageCroppedUrl": [
]
}
],
"orderItemType": "Produkt",
"modifierSchemaId": null,
"modifierSchemaName": null
}
]
}
]
}
Uwagi
-
Podczas pobierania zewnętrznego menu dla kilku organizacji, w bloku cen zwracane są informacje o cenach dla żądanych organizacji. Jeśli cena = 0, oznacza to, że danie jest dostępne do sprzedaży za cenę zero, jeśli cena = null, oznacza to, że danie jest zabronione do sprzedaży w tej organizacji.
-
Modyfikatory mają wartości minimalne i maksymalne dla grupy oraz dla każdego modyfikatora z osobna. Jeśli minQuality > 0, to ta grupa modyfikatorów jest obowiązkowa. maxQuality odpowiada za maksymalną możliwą liczbę modyfikatorów dodanych do dania. Jeśli parametr childModifiersHaveMinMaxRestrictions = false, to ograniczenia dotyczące liczby modyfikatorów są pobierane z wartości grupy modyfikatorów. Jeśli childModifiersHaveMinMaxRestrictions = true, to ograniczenia dotyczące liczby modyfikatorów są pobierane z każdego modyfikatora (elementów).
-
Jeśli itemGroupId = null, to modyfikatory w tej grupie są traktowane jako proste, pojedyncze.
-
Parametr sizeCode pokazuje nazwę rozmiaru dla kuchni.
-
Jeśli parametr itemSize zawiera jeden element, a w tym elemencie sizeId i sizeName = null, to danie nie ma rozmiaru. Jeśli jest więcej niż 1 element, to danie ma rozmiary, pola sizeName i sizeId pokazują nazwę i identyfikator rozmiaru.