Requisitos:
- La licencia de Glop debe tener el módulo Cloud o Business.
- Debe tener marcado el módulo de la propia integración en el apartado API Rest en la configuración del sitio del cliente.
- Previamente, se debe configurar la integración (si fuera necesario).
- No se pueden tener habilitadas las reservas de Glop (Agenda en comercios) y cualquier otro sistema de reservas de manera simultánea.
- La plataforma de reservas nos debe asignar un API-Key único para Glop que usaremos para todas las llamadas en el header. La plataforma identificará la reserva a través de este valor y el identificador de la reserva.
Localizaciones: Deliveries | Glop API Rest
- Obtención de localizacionesPara poder obtener las reservas y redirigirlas a nuestros terminales, necesitamos que la plataforma integradora de Reservas nos envíe localizaciones/restaurantes a las que van dirigidos las reservas.
Nosotros hacemos un mapeo entre localizaciones y terminal de Glop de envío de las reservas.
La plataforma integradora deberá desarrollar un endpoint al cual llamaremos para que nos devuelva las localizaciones. La respuesta debe tener estas características:[ { "id":"96f8adc9-c1dd-42a8-94a1-6b6d669bcce6", "nombre":"Nombre Localización 1" }, { "id":"96f0d827-8b28-4f65-a874-89f67e76a9b4", "nombre":"Nombre Localización 2" } ]
El campo id debe ser único para todos las localizaciones existentes. El id de localización lo obtenemos de la llamada explicada aquí.El campo nombre es el nombre de cada localización (restaurante o establecimiento)
Este endpoint debe ser remitido por la plataforma integradora a joaquin@glop.es. - Nuestro sistema siempre utiliza el id de localización de un JSON de reserva para «llevarlo» hasta el terminal (una vez mapeado).
- La plataforma integradora necesita obtener de Glop los identificadores de las mesas para hacer un match entre el salón de Glop y el de la plataforma Obtener mesas por id grupo | Glop API Rest “La solicitud requiere que el Servicio Glop esté activo para responder a esta petición. Esto es necesario para la correcta recuperación de tablas a través de los grupos de terminales.” El ID de grupo se refiere a un establecimiento (Localización) que agrupa al menos un terminal. Un grupo puede contener uno o más terminales. Por ejemplo, si un propietario tiene dos establecimientos, esto implicaría tener dos ID de grupos diferentes: uno con uno o más terminales y el otro con sus propios terminales. Aquí un enlace al endpoint de obtener la lista de grupos de terminales: Obtener lista grupos terminales | Glop API Rest
Mesas: Obtener mesas por id grupo | Glop API Rest
- Obtención de mesas
Para poder asignar las reservas a las mesas equivalentes en los salones de glop, las plataformas integradoras deberán usar este endpoint para recibir los identificadores únicos de cada mesa.
Nosotros hacemos un mapeo entre el número de mesa en los salones Glop y los identificadores que devolvemos en el endpoint. Para poder realizar esta llamada, el software Glop deberá estar en marcha.
Estructura endpoint a sistema externo de reservascurl --request GET \ --url https://api.glop.es/api/v1/cloud/tables?id_grupo={id_grupo} \ --header 'Accept: application/json' \ --header 'Authorization: Bearer 123'
- Id_grupo: ID del grupo de terminales sobre el cual queremos obtener las mesas.
- Authorization: Token de acceso que se obtendrá mediante el endpoint de obtener token.
Nuestro endpoint devolverá una respuesta con estos parámetros:
[ { "id_mesa": "12", "numero_mesa": "9", "id_salon": "1", "nombre_salon": "Salon Glop" } ]
- id_mesa: Identificador único de la mesa.
- numero_mesa: Número de la mesa en el salón de glop.
- id_salon: Identificador único del salón al cual pertenece la mesa.
- nombre_salon: Nombre del salón al cual pertenece la mesa en glop.
Obtener token de acceso: Autorización | Glop API Rest
- Obtención del token
Para poder realizar llamadas a la API de Glop se necesitará obtener el Bearer Token de autorización mediante este endpoint. Para poder obtenerlo necesitaremos tener un sitio configurado con API Rest en App.glop.es.
Estructura endpoint a sistema externo de reservascurl --request POST \ --url https://api.glop.es/api/v1/auth/oauth/token \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "grant_type": "client_credentials", "client_id": "{{client_id_client_user}}", "client_secret": "{{client_secret_client_user}}", "scope": "*" }'
- client_id: Id de las credenciales de API Rest del sitio.
- client_secret: Secret de las credenciales de API Rest del sitio.
Estos valores deberán ser suministrados por el soporte de Glop.
Nuestro endpoint devolverá una respuesta con estos parámetros:{ "token_type": "string", "expires_in": 0, "access_token": "string" }
El token a usar será el devuelto en el parámetro access_token.
Casos de uso:
- Un cliente realiza una reserva desde la plataforma externa (día, fecha, mesa, nombre, email, etc).
- La plataforma externa le asigna número de reserva
- Nuestro software consulta reservas de hoy + dos días (reservas a dos días vista con las de hoy) (Obtener reservas)
- El cliente llega al establecimiento y es llevado a su mesa.
- Si el cliente tiene una reserva previa:
- Si la reserva tiene una mesa asignada desde la plataforma, la mesa estará disponible para el cliente siempre que se asigne manualmente. Update-Table Sit-Client
- Si el establecimiento cambia una mesa (por cualquier motivo), Glop enviará el traspaso de la mesa de la reserva a la plataforma. Update-Table
- Al cerrar la cuenta, se enviará la información del ticket a la plataforma Set-Ticket
- Si el cliente NO tiene reserva previaWalk-InUpdate-TableSit-Client
- Se abrirá una mesa libre en Glop y se enviará petición walk-in (nueva mesa sin reserva) al sistema de reservas indicándole que esa mesa está ocupada
- El sistema de reservas nos debe responder con un identificador de reserva
- Al cerrar la cuenta, se enviará la información del ticket a la plataforma Set-Ticket
- Si el cliente tiene una reserva previa:
Ciclo completo de una Reserva
Agregado de productos a una Reserva
Endpoints necesarios para la integración con GLOP
Algunos endpoints requieren el parámetro apikey en la cabecera o URL. Este parámetro será único en todas las llamadas realizadas por nuestros terminales a la API de terceros, independientemente del establecimiento que realice la llamada. Los establecimientos se «registrarán» y se «gestionarán» a través del listado de localizaciones y terminales en nuestra configuración de la API.
Obtener Reservas
Descripción
Obtenemos la lista de reservas confirmadas o pendientes de confirmar desde Glop para poder gestionarlas de manera individual, asegurando así una correcta integración entre Glop y la plataforma de reservas. Al enviar una reserva sin mesa, es estrictamente necesario que esta venga con la cadena «SIN».
Estructura endpoint a sistema externo de reservas
- restaurant: localizador de restaurante
- date_start: fecha filtro inicio formato (dd-mm-YYYY)
- date_end: fecha filtro fin formato (dd-mm-YYYY)
Ejemplo respuesta del sistema externo de reservas
{ "resp": 1, "reservs":[ { "id_reserv": "eytoRR",//Imprescindible, Identificador único de la reserva "product": "1", // Nullable "date_add": "2019-11-26", // Nullable "time_add": "12:19:36", // Nullable "user_name": "ANONYMOUS", // Nullable "date": "2019-11-27", // Fecha de la Reserva - Nullable "for": "2", // Número de comensales de la Reserva - Nullable "commentary_restaurant": "", // Comentario asignado a la Reserva - Máximos 255 Carácteres - Nullable "commentary_client": "", // Nullable "user_phone": null, // Número de teléfono asignado a la Reserva - Nullable "tables": "67", // Imprescindible, ID de la mesa o mesas a la cual se les asignará la reserva, si no viene el ID, enviar "SIN" "status": "-2", //Contemplamos el Status 1 y -2,</em> -2 = CANCELADA, 1 = CONFIRMADA "source": null, // Nullable "duration": "180", // Nullable "camarero": null, // Nullable "is_group": "0", // Nullable "id_client": "oGS2wA", // Identificador único del Cliente de la plataforma de reservas "origin": "", // Nullable "email": "", // Correo eléctronico asignado a la Reserva - Nullable "first_name": "Pepito", // Nombre del cliente que realizó la Reserva - Nullable "last_name": "Perez" // Apellido del cliente que realizó la Reserva - Nullable } ], "page": "0" } *Nullable: Que puede ser nulo. (null)
Walk-In
Descripción
Asignación de una mesa ad hoc para clientes que llegan sin reserva
Asignamos una mesa de Glop sin previo aviso («walk-in») cuando ubicamos a clientes sin reservas, utilizando Glop. De esta manera, notificamos a la plataforma de reservas que la mesa está ocupada.
Estructura endpoint a sistema externo de reservas
curl --location 'https://www.{externalreservsmanager}.com/api/reserv/walk_in' \ --header 'Content-Type: application/json' \ --header 'apikey: apikey' \ --data '{ "restaurant": "casa-carlos", "hour": "22:00", "people": "3", "id_table": "13" }'
- restaurant: localizador de restaurante
- hour: Hora format (HH:mm)
- people: número de comensales
- id_table: mesas separadas por coma a reservar para esos comensales
Ejemplo respuesta del sistema externo de reservas
{ "resp": 1, "id_reserv": "kfMxTN" }
Inmediatamente después se hace un Update Table y un Sit Client
Update Table
Descripción
Asignar o traspasar una reserva de una mesa a otra. Asignamos el identificador de la mesa a otra mesa al realizar un traspaso de mesa. Si una reserva está asignada a 2 mesas, esta no podrá ser traspasada.
Estructura endpoint a sistema externo de reservas
curl --location 'https://www.{externalreservsmanager}.com/api/reserv/update_table' \ --header 'Content-Type: application/json' \ --header 'apikey: apikey' \ --data '{ "id_reserv": "rhRa36", "tables": "105" }'
- id_reserv: identificador de reserva
- tables: El nuevo identificador de la mesa para la reserva
- apikey
Ejemplo respuesta del sistema externo de reservas
{ "resp": 1, "message": "Ok" }
Sit Client
Descripción
Asignar a una reserva asiganda a un cliente una mesa especifica en Glop para que la plataforma confirme o indentifique la mesa en la que el cliente esta sentado.
Estructura endpoint a sistema externo de reservas
curl --location 'https://www.{externalreservsmanager}.com/api/reserv/sit_client' \ --header 'Content-Type: application/json' \ --header 'apikey: apikey' \ --data '{ "id_reserv": "9F4G4t" }'
- id_reserv: reserva a abrir
- apikey
Ejemplo respuesta del sistema externo de reservas
{ "resp": 1, "message": "Ok" }
Set Ticket
Descripción
Se envía a la plataforma de reserva en el momento de cerrar la venta de una mesa con identificador de reserva indicando que la mesa queda libre e informando de los productos vendidos.
Estructura endpoint a sistema externo de reservas
curl --location 'https://www.{externalreservsmanager}.com/api/reserv/set_ticket' \ --header 'Content-Type: application/json' \ --header 'apikey: apikey' \ --data '{ "id_reserv": "9F4G4t", "id_mesa": "123", "id_terminal": "1", "id_ticket": "2163540", "printDate": "11-06-2024 11:29:03", "status": "PAID", "total": "4.20", "items": [ { "productName": "FANTA LIMON", "amount": "1.00", "unitPrice": "1.40", "totalPrice": "1.40" }, { "productName": "FANTA LIMON", "amount": "1.00", "unitPrice": "1.40", "totalPrice": "1.40" }, { "productName": "FANTA LIMON", "amount": "1.00", "unitPrice": "1.40", "totalPrice": "1.40" } ], "payments": [ { "type": "CONTADO", "amount": "4.20" } ] }'
TBD—————
- JSON con ticket, e items cobrados
Recordar: Si el array items está vacío la mesa se liberará SIN cobro, se cancela reserva
Ejemplo respuesta del sistema externo de reservas
{ "resp": 1, "message": "Inserted" }
Listado localizaciones
Estructura endpoint a sistema externo de reservas
curl --location 'https://www.{externalreservsmanager}.com/api/restaurant/list/{apikey}'
- apikey: apiKey genérico para obtener todos los restaurantes que nosotros tenemos con el servicio externo
Ejemplo respuesta del sistema externo de reservas
[ { "id":"96f8adc9-c1dd-42a8-94a1-6b6d669bcce6", "nombre":"Nombre Localización 1" }, { "id":"96f0d827-8b28-4f65-a874-89f67e76a9b4", "nombre":"Nombre Localización 2" } ]
Resumen:
Este documento proporciona información detallada sobre la integración con GLOP para la gestión de reservas y pedidos.
- Se requiere una licencia Cloud o Business y la configuración del módulo de integración en el apartado API Rest.
- Es necesario obtener localizaciones para el envío de pedidos y asignar mesas a través de un endpoint creado por la plataforma integradora.
- Se describen casos de uso desde la realización de reservas hasta el cierre de la mesa con el cobro de un ticket.
- Se presentan varios endpoints necesarios para la integración con GLOP, como obtener reservas, crear reservas adhoc, asignar mesas, abrir reservas, y enviar tickets.
- Se detalla la estructura de los endpoints, ejemplos de respuestas y la importancia de ciertos parámetros como el apikey.