POST Insertar/actualizar productos

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 o serviceChargeTax, 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 ProductoDescripciónInteger Value
ProductoUn elemento de "nivel superior" en un menú (también se puede agrupar dentro de un grupo modificador o bundle).1
ModificadorOpciones al pedir un producto, normalmente modificaciones del producto.2
Grupo de modificadorUna agrupación de modificadores (también puede agrupar productos).3
BundleSolo 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 y max: 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

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

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.

ParameterMeaning
caloriesThis is the base calorie amount, where a maximum calories is set, this should be interpreted as the 'minimum'
caloriesRangeHighThe maximum calorie amount of an item
posProductIdThe 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í.

Language
Authorization
OAuth2
Click Try It! to start a request and see the response here!