La "Fuente de verdad" en lo que respecta a los datos y estructura de los productos es el sistema de TPV integrado. El TPV sincroniza los productos con sus respectivos identificadores únicos (PLU's) y posteriormente los menús se construyen en Deliverect con los items seleccionados.
A continuación, los pedidos serán creados por los canales con esos mismos PLUs e inyectados en el TPV mediante un 'Webhook de pedidos'
Este proceso no implica necesariamente una transferencia de todos los productos almacenados en el TPV, puede consistir en un sub-grupo únicamente; por ejemplo, "Solo Productos Online", los cuales el cliente puede identificar como adecuados para comercializar online.
Menús vs Productos
Los productos provienen de un TPV, sin embargo, no es posible insertar menús estructurados directamente.
El proceso de construcción de menú, 'Menu Building', se gestiona en su totalidad en Deliverect (consultar guía aquí)
Precio
El precio es almacenado como un int con 2 dígitos decimales, por ejemplo, 5 euros se almacena como 500
.
Niveles de precios
Los niveles de precios o price levels, permiten que un menú contenga diferentes precios por canal o tipo de delivery. Los productos tienen un precio base el cual se envía mediante el atributo price
. Adicionalmente, se pueden definir precios opcionales en su correspondiente sección de priceLevels, utilizando el nombre y precio específico.
Los niveles de precios son definidos durante al sincronización de producto mediante la sección priceLevels
con un identificador posId
y nombre descriptivo name
.
Tras sincronizar los productos en una ubicación, los niveles podrán ser seleccionados mediante un desplegable dentro de la configuración del canal. En la vista previa o al publicar menús para estos canales, se aplicará el nivel de precio seleccionado.
{
"name": "Burger",
"price": 1000,
"priceLevels": {
"B1": 1000,
"D1": 900,
"BD2020": 500
}
}
{
"name": "Burger Deal 2020",
"posId": "BD2020"
}
Note that when no data is available on a product for the selected price level, the base price is applied.
Overloads
Ciertos productos pueden contener estructuras con overloads las cuales representan un cargo adicional. En los ejemplos 4 y 5, un modificador y un producto tienen diferentes estructuras dependiendo de a qué grupo pertenezcan. Esto se determina mediante el alcance o "scope".
En el ejemplo, el nombre del grupo modificador es "Choose Your First Topping with PLU "FREE-TOP". Dentro de cada uno de los modificadores, como por ejemplo "Pepperoni", se incluye un array llamado Overloads el cual especifica que cargo aplica en cada caso.
Impuestos
Al sincronizar los productos hacia Deliverect, es importante especificar los impuestos que aplican en cada caso.
Dependiendo del tipo de pedido es posible variar la tasa que aplica en cada caso:
- Delivery (
deliveryTax
) - Takeaway (
takeawayTax
) - Eat-in (
eatInTax
)
Las tasas de impuestos son almacenadas utilizando 3 dígitos decimales p.ej. 5% se almacenaría como 5000
.
Puede darse el caso de que a algún producto le aplique un 0% de impuestos, y tenga precio 0.
{
"productType": 1,
"plu": "GB-02",
"name": "Ginger Beer",
...
"deliveryTax": 5000,
"takeawayTax": 5000,
"eatInTax": 5000,
Formato de precio
Los valores para el precio (price), impuestos (tax) y nivel de precios deben enviarse como enteros (integer) y sin valores decimales.
PLU
El PLU suele ser un valor fácil de usar para el cliente y debe ser el mismo en todas las ubicaciones para el mismo producto. El PLU es lo que se utilizará para mapear las órdenes provenientes de los canales. Por lo tanto, su uso es obligatorio y no debe exceder los 36 caracteres.
deliveryTax y takeawayTax
Los impuestos sobre las ventas anteriores no son lo mismo que
deliveryCostTax
oserviceChargeTax
, que son impuestos separados que aplica un canal al costo de la entrega o al cargo por servicio.
Imágenes
La URL de la imagen que se proporciona se almacena en caché y se coloca detrás de un CDN. Las imágenes se almacenan en caché durante 24 horas. Los canales descargarán las imágenes y también las almacenarán en caché. Dependiendo del canal, las imágenes pueden cambiar de tamaño. Deliverect admite imágenes de hasta 16,8 megapíxeles de tamaño.
Sobrescritura
Los clientes pueden sobrescribir ciertos detalles de los productos dentro del generador de menús en Deliverect, incluidos;
- Nombres
- Descripciones
- Precios
- Imágenes
- Todo lo que no sea sobrescrito en Deliverect se puede actualizar a través de este punto final
Product types
When pushing products to us, you need to specify the relevant value which represents the product type used
Tipo de Producto | Descripción | Integer Value |
---|---|---|
Producto | Un elemento de "nivel superior" en un menú (también se puede agrupar dentro de un grupo modificador o bundle). | 1 |
Modificador | Opciones al pedir un producto, normalmente modificaciones del producto. | 2 |
Grupo de modificador | Una agrupación de modificadores (también puede agrupar productos). | 3 |
Bundle | Solo puede contener productos que se ofrecen como parte de una oferta , 'Meal deal', la cual Deliverect ofrecerá a un precio fijo. | 4 |
Categorías
Una categoría es una forma de organizar productos en una sección a la que se hará referencia al crear un menú. Los productos pueden estar en una o más categorías indicadas por un array llamado de posCategoryIds
. Es importante tener al menos una categoría por producto.
Eliminar productos
Actualmente no hay modo de eliminar directamente un producto. Para lograr el efecto deseado, se puede insertar nuevamente una lista de productos, en la que se omiten los productos "a eliminar".
Productos duplicados
Cuando se envíen productos, hay que asegurarse de que no haya PLU duplicados. Si hay PLU duplicados, el producto se procesará, pero se emitirán los productos duplicados
Ejempo : Ejemplo Básico
El primer ejemplo a la derecha consiste en un producto simple, Delicious Steak, con dos modificadores adjuntos. Corresponde a la siguiente estructura:
También contiene las siguientes estructuras:
- Valores
min
ymax
: permiten configurar un valor mínimo y máximo para un modificador. multiMax
: permite seleccionar más de una vez el mismo modificador,defaultQuantity
: hace que un modificador sea preseleccionado por defecto.
Con respecto al primer grupo de modificadores, 'Cooking Instructions' el cliente debe elegir una opción. Esto se hace configurando min
y max
con un valor de 1
.
El segundo grupo de modificadores, 'Choose Your Side' tiene un valor máximo
de 2
, lo cual permite seleccionar hasta dos opciones. El modificador Fries se seleccionará por defecto, esto se hace usando
"defaultQuantity": 1. Además, este grupo de modificadores también contiene el valor "multiMax": 2. Se podría seleccionar el modificador Fries o cualquier otro adjunto a este grupo dos veces.
Ejemplo: Meal Deals
En los ejemplos de la derecha, es posible seleccionar varios grupos de productos juntos, los cuales formaran una oferta o meal deal.
These examples use the following structure, where products are linked together using the subProducts
field.
Estructura de un Meal Deal
Combo/Meal Deal:
Bundle:
- Product
Type:1
- Bundle
Type:4
- Product
Type:1
- Modifier group
Type:3
- Modifier
Type:2
- Modifier
- Modifier group
- Product
Modificadores anidados - Nested Modifiers
El segundo ejemplo le muestra un producto con modificadores anidados. Estos son modificadores que forman parte de un grupo de modificadores dentro de otro. En el ejemplo específico, se puede seleccionar un plato y agregar un modificador de la selección de arroz (rice) o fideos (noodles). Después de hacer eso, se le pedirá que elija modificadores adicionales, como el sate o la salsa picante que están anidados.
Meal Deal con 'Upsell'
En el ejemplo 3, tenemos un grupo de modificadores además de los bundles. Esto permite pedir patatas fritas, las cuales no están incluidas como parte de la oferta y se le cobrará al cliente de manera acorde. Esto se conoce como 'upsell', lo cual puede consistir grupos de modificadores que contienen productos o modificadores.
También es posible construir combos de la siguiente manera:
- Combo product
Type:1
- Modifier group
Type:3
- Modifier
Type:2
- Modifier group
Type:3
- Modifier
Type:2
- Modifier
- Modifier group
- Modifier
Consulta aquí para ver ejemplos de cómo los pedidos con ofertas de comida se envían al POS.
Multi-select modifiers
Es posible indicar si las opciones dentro de un grupo de modificadores específico se pueden seleccionar más de una vez. Para ello, consulta el ejemplo básico en la esquina superior derecha de la página.
El grupo de modificadores 'Choose Your Side' contiene dos atributos: max
and multiMax
.
El valor de max
es dos, lo que permite seleccionar un máximo de dos modificadores. Como solo hay dos modificadores en el grupo, esto en sí mismo no supone una gran diferencia cuando los modificadores solo se pueden seleccionar una vez
Añadir multiMax
hace que los modificadores puedan seleccionarse más de una vez. Debido a que tiene un valor de dos, cada modificador se puede seleccionar cómo máximo dos veces.
Debido a esto, el cliente puede elegir dos guarniciones, que pueden ser diferentes o del mismo tipo.
Selección por defecto
Es posible establecer una cantidad predeterminada de modificadores y meal deals (ofertas de comida). Con una cantidad predeterminada de 1, el elemento se selecciona de forma predeterminada en el menú.
Esto se muestra en el primer ejemplo (en la esquina superior derecha de la página), donde el modificador Fries tiene un valor de 1, "defaultQuantity": 1
. Debido a esto, el modificador patatas fritas se seleccionará de forma predeterminada.
Auto Aplicar
Puede darse el caso de que los productos pedidos en línea se reciban con un conjunto predefinido de subproductos aplicados. Es diferente a pre-seleccionar elementos en la interfaz del menú a través de defaultQuantity
. Es un mecanismo para que elementos específicos sean asociados por Deliverect automáticamente tras la realización de un pedido.
Esto se muestra en el primer ejemplo (en la esquina superior derecha de la página), donde 'Parsley Garnish' y 'Melted Butter' están dentro de un grupo de modificadores 'Garnishes', el cual está configurado para aplicar estos elementos automáticamente cuando el se pide 'Steak Frites'.
Nota: Ni la plataforma del canal ni el consumidor final verán estos artículos, por lo tanto, no pueden tener ningún precio asociado. Si la anulación de la selección de elementos preestablecidos o el cobro es un requisito, consulte la sección anterior Selección por defecto ,
"autoApply": [
{
"plu": "PR1"
},
{
"plu": "PR2"
}
],
Traducciones
Es posible incluir traducciones de nombres de productos y descripciones ene el JSON. Siempre se requiere un nombre base (field name) mientras que las traducciones son opcionales(field nameTranslations). Translations are supported for all product types.
The translations are passed as a nested JSON object where the property names are language tags and the values are the translations themselves.
Ejemplo
{
"productType": 1,
"plu": "MEAT-02",
"price": 200,
"name": "Chicken",
"nameTranslations": {
"ar": "دجاج",
"en": "Chicken",
"es": "Pollo",
"nl": "Kip"
},
"description": "Grilled chicken",
"descriptionTranslations": {
"ar": "دجاج مشوي",
"en": "Grilled chicken.",
"es": "Pollo asado.",
"nl": "Gegrilde kip."
}
}
Las etiquetas de idioma son códigos de idioma ISO 639-1. Se pueden complementar con minúsculas código de país ISO 3166-1.
Visibilidad de productos
Un producto se puede marcar como invisible (deshabilitado) configurando la propiedad visible
como false
. Después de esta acción, el producto se ocultará en todos los menús donde se usó y no se enviará a los canales hasta que se vuelva a marcar como visible.
{
"productType": 1,
"plu": "SI-01",
"price": 100,
"name": "Fries",
"visible": false
}
Etiquetas de productos: tipos de consumibles y alérgenos.
Un producto puede tener una o más etiquetas de producto dentro de productTags
. Se utilizan para indicar tipos de consumibles y/o alérgenos.
Consulta aquí una lista completa de alérgenos con su valor:
Calorías
Si el POS admite la sincronización de calorías, estas debe enviarse en el JSON como se muestra en la tabla de atributos a continuación.
Parameter | Meaning |
---|---|
calories | This is the base calorie amount, where a maximum calories is set, this should be interpreted as the 'minimum' |
caloriesRangeHigh | The maximum calorie amount of an item |
posProductId | The posProductId is the internal ID used for products. It is unique across locations but is entirely optional as a reference only. |
"products": [
{
"productType": 1,
"plu": "PR03",
"price": 900,
"name": "Cheese Lovers Pizza",
...
"calories": 500,
"caloriesRangeHigh": 750
},
...
]
},
Información Nutricional
La información nutricional puede pasarse con los productos mediante el objeto nutritionalInfo como muestra el siguiente ejemplo:
La unidad de medida utilizada es el gramo. Los ingredientes y aditivos se añaden mediante los arrays "additives" e "ingredients" dentro del objeto "supplementalInfo".
"nutritionalInfo": {
"fat": 1,
"sugar": 4,
"saturatedFat": 1,
"carbohydrates": 1,
"protein": 1,
"salt": 1
},
"supplementalInfo": {
"instructionsForUse": "Cool before drink.",
"ingredients": [
"Water",
"Sugar"
],
"additives": [
"Artificial Food Coloring",
"Sodium Nitrite",
"Salt",
"Aspartame"
],
"prepackaged": true,
"deposit": 0
},
Sincronización de productos (GET Productos)
La llamada a este endpoint debe iniciarse como respuesta tras recibir una petición al webhook de GET Productos. Consultar la sección correspondiente aquí.