Automatizar procesos con Mybooking y Make
Make es una herramienta no code para la automatización de procesos con la que puedes conectar Mybooking y Google Sheet para guardar los datos cuando se recibe una nueva reserva
Make es una herramienta para automatizar procesos que no requiere saber programación y que tiene una cuenta gratuita que podemos usar para mejorar nuestra operativa de reservas conectándola con un proceso automatizado.
Algunos de nuestros clientes llegan a través de agencias de marketing, freelances o estudios de diseño. Estos profesionales están acostumbrados a automatizar ciertas tareas para poder añadir los correos electrónicos a una newsletter, a una plataforma de marketing o a un CRM y evitar tener que estar extrayendo la información de forma manual de nuestra plataforma para cargarla en otras. Mybooking proporciona un sistema de webhooks, que puedes activarlo por petición, que te permite conectarlo con Make.
El objetivo de este tutorial es mostrarte cómo añadir una fila a un Google Sheet cada vez que se crea una reserva en Mybooking.
Crear el escenario
El escenario es un área de trabajo dentro de Make donde añadimos los componentes necesarios para la automatización que queremos desarrollar.
Es necesario crear un escenario, añadir una serie de componentes y conectarlos.
- Creamos un escenario
- Creamos un webhook que conectaremos desde Mybooking para notificar la creación/actualización de una reserva a Make
- Añadiremos un router que evalúa los datos del webhook y determina si ha de crear o actualizar la fila en un Google Sheet
- Añadimos el componente Google Sheet -> Add Row
- Añadimos Google Sheet -> Search Rows y Google Sheets -> Update Row para buscar y actualizar las filas
Conectar Mybooking con Make
El primer paso es conectar Mybooking con Make para que cada vez que se reciba una nueva reserva se actualicen los datos que queremos guardar en nuestro documento de Google Sheets. Para poderlo llevar a cabo vamos a necesitar:
- Añadir un componente webhook en Make.
- Crear un punto de conexión en Mybooking
Una vez añadido el webhook debemos copiar la dirección para conectarlo con Mybooking:
A continuación, accederemos a Mybooking y nos dirigimos a Desarrolladores -> Webhooks, añadimos un nuevo punto de conexión y pegamos la dirección que copiamos previamente desde Make.
De esta forma, cada vez que se cree una nueva reserva o contrato en Mybooking se notificará a Make a través de este webhook.
Conectar Google Sheet
El siguiente paso es un documento en Google Sheet donde crear una nueva fila cada vez que recibimos una notificación de nueva reserva. Los pasos que seguiremos son los siguientes:
- Crear un documento Google Sheet en tu cuenta de Google Drive
- Determinar cuando se trata de una nueva reserva
- Conectar Make con Google Sheet
- Replicar los campos del webhook a las columnas del Google Sheet
1- Crear un documento de Google Sheet
Entra en tu cuenta de Google Drive y crea un nuevo documento de Google Sheets, este será el documento con el que se conectará Make para añadir las nuevas filas.
2- Discriminar si se trata de una nueva reserva o una actualización
Volveremos a Make y en el Scenario añadiremos un nuevo router. De esta forma podremos bifurcar el siguiente paso en función de si se trata de una nueva reserva o la actualización de una reserva existente.
3- Añadir una nueva fila a Google Sheet
Para añadir una fila a un Google Sheet se ha de utilizar el componente Google Sheet -> Add Row:
- Primero añadir Google Sheet a favoritos, si no lo tenemos añadido todavía
- Hacer un click para añadir el componente específico. Una vez insertado lo conectaremos con el router (ver las líneas entre los componentes)
Una vez tenemos los componentes insertados lo siguiente a hacer es configurar el componente:
- Conectar con la cuenta de Google
- Hacer un mapping de los datos del webhook y las columnas del Google Sheet
Al hacer un click sobre el componente Google Sheets podremos seleccionar una conexión existente o crear una nueva conexión con Google. Una vez conectado, podremos escoger el Spreadsheet (hoja de cálculo), el Sheet name (nombre de la página) y los Values (valores). En nuestro caso, la hoja de cálculo que hemos utilizado no tiene una fila con las cabeceras y lo indicaremos.
El último paso es hacer un mapping de los campos de la reserva a las columnas del Google Sheet. Para el ejemplo queremos generar un hoja con la siguiente información :
Columna | Información | Campo Webhook |
---|---|---|
A | Número de reserva | data: object: id |
B | Fecha de inicio | data: object: date_from |
C | Hora de inicio | data: object: time_from |
D | Fecha de fin | data: object: date_to |
E | Hora de fin | data: object: time_to |
F | Lugar de entrega | data: object: pickup_place |
G | Lugar de devolución | data: object: return_place |
H | Importe total | data: object: total_cost |
I | Categoría – Código | data: object: reservation_lines[] : item_id |
J | Categoría – Descripción | data: object: reservation_lines[] : item_description |
K | Código de cliente | data: object: customer_id |
L | Nombre del cliente | data: object: customer_fullname |
M | Correo electrónico del cliente | data: object: customer_email |
N | Teléfono del cliente | data: object: customer_phone |
Por último aplicaremos un filtro en la conexión entre el router y Google Sheet -> Add Row de forma que procese aquellos mensajes cuyo atributo sea type: reservation.created
Actualizar una fila a un Google Sheet al actualizar la información de una reserva en Mybooking
El último paso es poder actualizar una fila de Google Sheet cuando se actualiza una reserva.
- Obtener la fila a actualizar a partir del identificador de la reserva de Mybooking
- Actualizar la fila a partir de los datos del Webhook.
1- Buscar la fila a actualizar en Google Sheet
El objetivo es poder localizar la fila del excel por el id de la reserva de Mybooking. En el Google Sheet esta información se encuentra en la columna A.
Para esto añadiremos un componente Google Sheets > Search Rows y configuraremos los siguientes campos:
- Filter: Seleccionaremos la columna A e indicaremos que el valor sea igual al campo data: object: id del Webhook.
- Maximum number of returned rows: 1 ya que sólo habrá una fila por cada reserva
2- Actualizar la fila en Google Sheet
El objetivo es poder actualizar las filas de Google Sheet filtradas por el componente de búsqueda.
Para llevarlo a cabo, añadiremos un componente Google Sheet > Update Row, lo conectaremos con el componente de búsqueda y configuraremos los siguiente campos:
- Row Number: Este campo es importante ya que determina la fila a actualizar. Seleccionaremos el Row number de la Google Sheet > Search Rows.
- Table contains headers: En el ejemplo no ya que no tenemos una columna con los nombre de los campos.
- Values: Volver a aplicar los mismos campos que en la creación de una fila
Por último aplicaremos un filtro en la conexión con Router y Google Sheet > Search Rows de forma que procese aquellos mensajes cuyo atributo type reservation.updated
Formato de los datos notificados desde Mybooking
A continuación mostramos un ejemplo completo de los datos que se envía Mybooking a través del Webhook. Son todos los campos que pueden utilizarse.
{ "id": 1230, "object": "event", "type": "reservation.created", "data": { "object": { "id": 2197, "object": "reservation", "status": "pending_confirmation", "date_from": "2022-08-30", "time_from": "10:00", "pickup_place": "Aeropuerto de Mahón", "date_to": "2022-08-31", "time_to": "18:00", "return_place": "Aeropuerto de Mahón", "customer_id": 172, "customer_fullname": "Brad Stark", "customer_email": "info@mybooking.es", "customer_phone": "666101010", "rental_location_code": "MAHON", "sales_channel_code": null, "agency_id": null, "agency_reservation_id": null, "customer_language": "es", "days": 2, "hours": 0, "item_cost": "100.0", "extras_cost": "10.0", "time_from_cost": "0.0", "time_to_cost": "0.0", "pickup_place_cost": "10.0", "return_place_cost": "10.0", "driver_age_cost": "0.0", "category_supplement_1_cost": "0.0", "category_supplement_2_cost": "0.0", "category_supplement_3_cost": "0.0", "supplement_1_cost": "0.0", "supplement_2_cost": "0.0", "supplement_3_cost": "0.0", "total_cost": "130.0", "product_deposit_cost": "0.0", "driver_age_deposit": "0.0", "total_deposit": "0.0", "total_paid": "0.0", "total_pending": "130.0", "reservation_lines": [ { "id": 3119, "object": "reservation_line", "item_id": "B", "item_description": "Grupo B", "item_unit_cost_base": "100.0", "item_unit_cost": "100.0", "item_cost": "100.0", "quantity": 1, "product_deposit_unit_cost": "0.0", "product_deposit_cost": "0.0", "category_supplement_1_unit_cost": "0.0", "category_supplement_1_cost": "0.0", "category_supplement_2_unit_cost": "0.0", "category_supplement_2_cost": "0.0", "category_supplement_3_unit_cost": "0.0", "category_supplement_3_cost": "0.0", "reservation_line_resources": [ { "id": 3125, "object": "reservation_line_resource", "reference": null, "stock_plate": null } ] } ], "reservation_extras": [ { "id": 618, "object": "reservation_extra", "extra_id": "SEGURO-EXTRA", "extra_description": "Seguro Extra", "extra_unit_cost": "10.0", "quantity": 1, "extra_cost": "10.0" } ], "charges": [] } } }
Otros modelos de datos
Este ejemplo está adaptado al módulo de alquiler/alojamiento. Además, se notifican las reservas y mensajes de contacto recibidos:
Tipo de información | Type |
---|---|
Nueva reserva actividades | order.created |
Actualización reserva actividades | order.updated |
Mensaje de contacto | request_information.created |