Cómo automatizar procesos con Mybooking y Make (Integromat)

Make, anteriormente Integromat, es una herramienta no code para la automatización de procesos. Con ella puedes conectar diversas aplicaciones, como Mybooking con Google Sheet, Mailchimp o un contacto a Hubspot para llevar determinadas acciones cuando se recibe una nueva reserva en Mybooking. En este artículo te explicaremos cómo añadir o actualizar filas en un Google Sheet con las nuevas reservas recibidas.

Escenario Mybooking y Google Sheet

Algunos de nuestros clientes llegan a través de Agencias de marketing, freelances o estudios de diseño. En otras ocasiones, nuestros clientes quieren crecer y se ponen en contacto con estas empresas. 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. Así fue como conocimos Zapier o Integromat. Nos pedían poder extraer los datos de forma automática de Mybooking para cargarlos en un Google Sheet o para conectarlo con otros sistemas. En Mybooking hemos desarrollado un sistema de Webhooks, que puedes activarlo por petición, que convierte Mybooking en una herramienta más en la cadena de automatización.

1. El escenario (Scenario)

El objetivo de este tutorial es añadir una fila a un Google Sheet cada vez que se crea una reserva en Mybooking.

¿Cómo traducimos este requerimiento a Make?

Es necesario crear un escenario, añadir una serie de componentes y conectarlos.

  1. Crearemos un Webhook que conectaremos desde Mybooking para notificar la creación/actualización de una reserva a Make.
  2. 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.
  3. Para añadir una fila a Google Sheet añadiremos el componente Google Sheet > Add Row
  4. Para actualizar una fila a un Google Sheet añadiremos 2 componentes, el componente para localizar la fila, Google Sheet > Search Rows y el componente para actualizar la fila > Google Sheets > Update Row.

2. Conectando Mybooking con Make

El primer paso es poder conectar Mybooking con Make de forma que Mybooking pueda conectarse con Make cada vez que se reciba una nueva reserva o bien se actualicen sus datos. Para poderlo llevar a cabo vamos a necesitar:

  • Añadir un componente Webhook en Make.
  • Conectar Mybooking con Make a través de Webhooks.

Una vez tengamos añadido el Webhook necesitamos conectarlo con Mybooking. Para esto copiaremos la dirección del webhook para poder crear una conexión desde Mybooking

5-escenario-make-espera-webhook
Copiar la dirección para conectarlo para poder configurar el webhook en Mybooking

A continuación, accederemos a Mybooking y en el menú de desarrolladores abriremos Webhooks. Desde aquí podemos añadir un nuevo punto de conexión y pegar 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.

Añadir punto de conexión con un webhook en mybooking
Creando un punto de conexión en Mybooking para notificar a Make

3. Añadir una fila a un Google Sheet al recibir una nueva reserva

El objetivo de este paso es poder crear una nueva fila en un Google Sheet cada vez que recibimos una notificación de nueva reserva a través del Webhook. Para esto va a ser necesario:

  • Tener un Google Sheet creado en Google Drive
  • Determinar cuando se trata de una nueva reserva ya que sólo las nuevas reservas van a generar una nueva fila.
  • Conectar con Google Drive
  • Hacer un mapping de los campos del webhook a las columnas del Google Sheet. Para ésto vamos a necesitar conocer el formato de los datos que se envían a través de Mybooking. Make es una herramienta muy potente que te va a ayudar.

3.1 Disponer de un Google Sheet o crear uno nuevo

Si no tienes un Google Sheet en el que ya tienes información de las reservas o de los clientes ves a Google Drive y crea uno nuevo. Será el documento con el que se conectará Make para añadir las nuevas filas.

3.2 Discriminar si se trata de una nueva reserva o una actualización

Volveremos a Make y en el Scenario añadiremos una nuevo componente, un 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.

7-anadir-router-make
Añadir un Router para determinar si se trata de una nueva reserva o una actualización

3.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. Podemos hacerlo en dos pasos:

  • 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 Excel. Para el ejemplo queremos generar un hoja con la siguiente información :

14-formato-make-google-sheet-columnas
Google Sheet con los datos
ColumnaInformaciónCampo Webhook
ANúmero de reservadata: object: id
BFecha de iniciodata: object: date_from
CHora de iniciodata: object: time_from
DFecha de findata: object: date_to
EHora de findata: object: time_to
FLugar de entregadata: object: pickup_place
GLugar de devolucióndata: object: return_place
HImporte totaldata: object: total_cost
ICategoría – Códigodata: object: reservation_lines[] : item_id
JCategoría – Descripcióndata: object: reservation_lines[] : item_description
KCódigo de clientedata: object: customer_id
LNombre del clientedata: object: customer_fullname
MCorreo electrónico del clientedata: object: customer_email
NTeléfono del clientedata: object: customer_phone
Mapping de columnas con el Google Sheet
15-formato-make-google-sheet-columnas
Mapping de campos del Webhook con Google Sheet

Por último aplicaremos un filtro en la conexión con Router y Google Sheet > Add Row de forma que procese aquellos mensajes cuyo atributo type reservation.created

16-make-router-connection-filter
Aplicando el filtro en el Router para procesar sólo los mensajes de creación de reserva

4. 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.

4.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
17-make-google-sheet-search-rows
Google Sheet > Search Rows filtrando por el ID de la reserva

4.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
18-make-google-sheet-update-rows
Google Sheet > Actualizar filas resultantes de la búsqueda a partir de un Webhook

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

19-make-google-route-filter-webhook
Aplicando el filtro en el Router para procesar sólo los mensajes de creación de reserva

5. 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": []
    }
  }
}

6. 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ónType
Nueva reserva actividadesorder.created
Actualización reserva actividadesorder.updated
Mensaje de contactorequest_information.created

Arriba