Cómo construir un bot de WhatsApp desde cero

Code
Por: Mateo Lewinzon / Publicado el 27 jul. 2023
- visitas5 min de lectura

Activar tarjetas, sacar un turno para estudios médicos, averiguar sobre trámites en la municipalidad, y pedir un presupuesto de cortinas. Estos son solo algunos chats automatizados que me encontré durante este 2023. Siendo un formato de atención al cliente que vemos cada vez más, personalmente me atrapó la simpleza, velocidad y comodidad de esas interacciones.

Todos usamos WhatsApp. En muchos países es el medio universal de comunicación no solo entre invividuos, sino que también para contactar con empresas. Todo lo que necesitás consultar acerca de un producto está al alcance de tu bolsillo y dos toques.

Desde 2021 Facebook comenzó a abrir al público la API de WhatsApp. Esto creó un nuevo mundo de posibilidades de automatización y programación encima de chats, aunque inicialmente los accesos eran limitados solo a grandes empresas. Recién el 19 de mayo de 2022 la WhatsApp Cloud API pasó a estar disponible al público general.

Pero esto no es un artículo acerca la manera en que WhatsApp genera ingresos (igual ahora masomenos te imaginás cómo). Vamos a ponernos a indagar cómo se usa esta API, qué cosas podemos hacer con ella, y cómo hacer una integración completa y prácticamente contruir nuestro mini framework de WhatsApp Bots desde cero.

Cabe aclarar que existen proveedores de soluciones para negocios (BSPs) que ofrecen herramientas para crear este tipo de funcionalidades, que si bien usan esta misma API en su núcleo, tienen interfaces y están totalmente abstraídas del código. Obviamente todo por un costo mayor.

¿Cómo funciona?

Voy a comenzar explicando el flujo básico y algunos conceptos clave, y más adelante nos sumergiremos en cosas más técnicas.

Whatsapp Cloud API diagram

Las partes clave

El diagrama muestra las 3 partes del sistema y cómo se comunican entre sí.

  • Business/BSP's servers: El servidor de quien está automatizando sus chat(s). Este puede ser un negocio que esté haciendo un desarrollo propio, o un proveedor de servicios para terceros (BSP).
  • Cloud Service: La API manejada por Facebook/Meta, que permite a los negocios conectarse e interactuar con los servicios de WhatsApp internos.
  • Whatsapp Message Routing Service: Los servicios internos de WhatsApp. De acá se crean y se obtienen todos los mensajes e interacciones. Es el backend de sus aplicaciones.

La comunicación entre la Cloud API y la API interna de WhatsApp no nos incumbe. Solo cabe mencionar que nosotros vamos a comunicarnos con esa capa adicional, diferenciada de la que usa la aplicación de WhatApp. En otras palabras, entre nosotros y el servicio de WhatsApp, está el Cloud API que maneja su acceso al público.

El Panel de Desarrolladores en Facebook es la interfaz por la cual uno obtiene acceso a esta API, su documentación, las herramientas para desarrolladores (como números de testing) y finalmente por donde se agregan los números de teléfono para producción (el número real de la empresa para ya disponibilizar el chat). Además, el panel nos mide e informa acerca de nuestro uso de la API, para luego cobrarnos su precio.

Por otro lado, la comunicación entre la Cloud API y nuestro servidor sí requiere de nuestra atención. Para empezar, la información fluye en ambas direcciones ya que necesitamos leer los mensajes recibidos y enviarle mensajes al usuario.

Obtener mensajes recibidos por medio de un Webhook

¿Cómo hace nuestro servicio para saber si entró un nuevo mensaje de algún usuario? ¿Cómo hace Cloud API para avisarnos?

Los Webhooks son un mecanismo en el cual un servicio envía información cuando ocurre algo en una aplicación. Es un patrón muy común para "escuchar" eventos que se estén esperando.

Un ejemplo típico donde se usan Webhooks es con los proveedores de pagos: Suponete que estás por realizar una compra por una tienda que usa MercadoPago. Si observamos en la tienda el estado del pedido, inicialmente el pago va a figurar algo como "pago pendiente", porque así se inicia en la base de datos de la tienda. Ahora, una ves que completemos el pago, volviendo a la tienda ya nos va a decir que el pago fue exitoso.

En ese proceso existió una comunicación entre tienda y proveedor de pagos. La tienda tiene que estar al tanto del estado del pago, ¿cómo hace?. No puede estar consultándo al proveedor de pagos constantemente, sino que se hace lo inverso: el proveedor le avisa a la tienda cuando cambia el estado de un pago.

En el panel de configuración para desarrollo en MercadoPago, se puede asignar tu API endpoint para que notifique los cambios en el estado de un pago a donde uno quiera. Una vez configurado esto y preparado el servicio de nuestro lado, el flujo del cambio de estado de un pago se maneja así:

  1. Nuestro servicio: Se inicia un pago como pendiente en nuestra base de datos.
  2. En MercadoPago: El usuario completa el pago con éxito.
  3. En MercadoPago: Se dispara el evento de cambio de estado de pago.
  4. En MercadoPago: Se envía una notificación al servicio/backend que especificamos.
  5. Nuestro servicio: Recibimos y manejamos esa información para actualizar la base de datos con el pago completado.

Ahora, el mecanismo de Webhook con con la WhatsApp Cloud API esto es muy simple: cada vez que se envía un mensaje en una conversación, se dispara un evento y se envía por Webhook a nuestro servicio.

- Blog en construccíon -