Menús
Recetas de menú
Fragmentos de menú resueltos para los escenarios que necesitan los restaurantes reales: modificadores de selección múltiple, opciones anidadas, especiales por horario y descuentos de happy hour.
Estos son fragmentos para copiar y adaptar en escenarios comunes de menú. Cada uno muestra solo la parte relevante del documento del menú: insértela en la estructura completa de Publicar un menú. Para conocer el modelo que hay detrás, consulte El modelo de menú.
Todos los precios son enteros en unidades menores (450 = $4.50) y cada objeto lleva un externalId que es suyo.
Selección múltiple: elegir hasta 3, máximo 2 distintos
“Elija sus ingredientes: hasta 3 en total, pero no más de 2 tipos diferentes.” El conteo total y el conteo de opciones distintas son reglas separadas:
{ "externalId": "grp-toppings", "name": "Toppings", "minSelections": 0, "maxSelections": 3, "maxUniqueSelections": 2, "options": [ { "externalId": "top-mushroom", "name": "Mushroom", "maxQuantity": 3, "price": { "amount": { "amountMinor": 150, "currency": "USD" } } }, { "externalId": "top-pepperoni", "name": "Pepperoni", "maxQuantity": 3, "price": { "amount": { "amountMinor": 200, "currency": "USD" } } }, { "externalId": "top-olives", "name": "Olives", "maxQuantity": 3, "price": { "amount": { "amountMinor": 100, "currency": "USD" } } } ]}maxSelections: 3limita la cantidad total seleccionada.maxUniqueSelections: 2limita el número de opciones distintas. Un cliente puede elegir 2× Mushroom + 1× Olives (3 en total, 2 tipos), pero no tres ingredientes diferentes.maxQuantity: 3en cada opción permite pedir doble o triple de un mismo ingrediente.
Modificadores anidados
Una opción que abre más opciones: elegir un acompañamiento y, si es la ensalada, elegir un aderezo. Las opciones pueden llevar sus propios grupos de modificadores:
{ "externalId": "itm-combo", "name": "Burger Combo", "variations": [{ "externalId": "var-combo", "name": "Regular", "price": { "amount": { "amountMinor": 1200, "currency": "USD" } } }], "modifierGroups": [ { "externalId": "grp-side", "name": "Choose your side", "minSelections": 1, "maxSelections": 1, "options": [ { "externalId": "side-fries", "name": "Fries" }, { "externalId": "side-salad", "name": "Side salad", "modifierGroups": [ { "externalId": "grp-dressing", "name": "Dressing", "minSelections": 1, "maxSelections": 1, "options": [ { "externalId": "drs-ranch", "name": "Ranch" }, { "externalId": "drs-vinaigrette", "name": "Vinaigrette" } ] } ] } ] } ]}Elegir Side salad muestra una opción obligatoria de Dressing; elegir Fries no. Anide tan profundo como lo necesite el menú.
Disponibilidad: especiales del día
Una sección de desayuno que solo aparece por las mañanas de lunes a viernes. Coloque la ventana en la categoría (restringe todo lo que contiene) o en un solo artículo:
{ "externalId": "cat-breakfast", "name": "Breakfast", "availability": { "windows": [ { "dayOfWeek": 1, "startTime": "07:00", "endTime": "11:00" }, { "dayOfWeek": 2, "startTime": "07:00", "endTime": "11:00" }, { "dayOfWeek": 3, "startTime": "07:00", "endTime": "11:00" }, { "dayOfWeek": 4, "startTime": "07:00", "endTime": "11:00" }, { "dayOfWeek": 5, "startTime": "07:00", "endTime": "11:00" } ] }, "items": [{ "externalId": "itm-pancakes", "name": "Pancakes", "variations": [{ "externalId": "var-pancakes", "name": "Regular", "price": { "amount": { "amountMinor": 950, "currency": "USD" } } }] }]}dayOfWeekva de0(domingo) a6(sábado); agregue una ventana por cada día activo.startTime/endTimeson hora localHH:MM(formato de 24 horas), en la zona horaria del menú: establezca el campo de nivel superiortimezone(por defecto es UTC).- Un objeto sin
availabilitysiempre está disponible.
Así funcionan los menús por horario del día: hay un menú por local y las ventanas de disponibilidad lo dividen.
Happy hour: un descuento recurrente
Un descuento recurrente requiere tres objetos de nivel superior que trabajan juntos: a qué se aplica (un conjunto de productos), el cálculo del descuento y cuándo está activo (la promoción):
{ "productSets": [ { "externalId": "set-drinks", "name": "All drinks", "itemIdsAny": ["itm-latte", "itm-cold-brew"] } ], "discounts": [ { "externalId": "disc-happy-hour", "name": "20% off drinks", "benefitType": "percentage", "percentage": 20, "benefitTargetProductSetId": "set-drinks" } ], "promotions": [ { "externalId": "promo-happy-hour", "name": "Happy hour", "discountId": "disc-happy-hour", "applicationMode": "automatic", "availability": { "windows": [ { "dayOfWeek": 1, "startTime": "16:00", "endTime": "18:00" }, { "dayOfWeek": 2, "startTime": "16:00", "endTime": "18:00" }, { "dayOfWeek": 3, "startTime": "16:00", "endTime": "18:00" }, { "dayOfWeek": 4, "startTime": "16:00", "endTime": "18:00" }, { "dayOfWeek": 5, "startTime": "16:00", "endTime": "18:00" } ] } } ]}- El conjunto de productos indica a qué se aplica el descuento (aquí, dos bebidas; use
"allProducts": truepara todo el menú). - El descuento indica cuánto (20 % de descuento). Otros
benefitTypesonamount,set_price,free_itemybxgy. - La promoción los une e indica cuándo:
applicationMode: "automatic"la aplica sin un código yavailabilitydefine las ventanas semanales recurrentes. UsevalidFrom/validUntilpara una campaña de una sola vez.
Marcar un artículo como agotado (86)
Marque algo como agotado sin reestructurar el menú: establezca stockStatus en el artículo (o la variante):
{ "externalId": "itm-latte", "name": "Latte", "stockStatus": "out_of_stock", "variations": [{ "externalId": "var-latte", "name": "Regular", "price": { "amount": { "amountMinor": 450, "currency": "USD" } } }] }stockStatus es in_stock, out_of_stock o low_stock. Si lo omite al volver a publicar, se conserva el valor actual, así que una actualización de inventario puede ser una publicación pequeña y específica.
Combínelas
Estas recetas se pueden combinar. Una categoría de desayuno (disponibilidad) puede contener un artículo armable (modificadores anidados) con un grupo de “primer ingrediente gratis” (freeSelectionCount), mientras una promoción de happy hour se aplica a las bebidas. Publique el menú completo y Maple lo aplica como un solo diff; consulte Publicar un menú.