DEV Community

Martin Lubo
Martin Lubo

Posted on • Originally published at blog.martinlubo.dev

Como conectar Facebook messenger con AWS Connect

Hoy día los clientes están buscando reducir costos de contact center mediante la automatización de procesos y resolución de consultas de sus clientes. En ese contexto Amazon Connect se presenta como una alternativa que permite la integración con los servicios de AWS como Lex o Bedrock para la generación de bots conversacionales que resuelvan esta necesidad y permitiendo escalar los casos que no se pueden resolver a un agente humano.

Dentro de esta necesidad, uno de los puntos críticos es el manejo de la omnicanalidad, es decir que independientemente de la plataforma desde donde los clientes se contactan (WhatsApp, Facebook Messenger, Instagram, etc.) debemos tener una plataforma unificada donde recibir y responder a esos mensajes.

Omnicanalidad en Amazon Connect

Si bien en la documentación lo presentan como una solución omnicanal, la experiencia en la integración de los distintos canales puede variar muchísimo, desde ser nativa, utilizar otros servicios o requerir la conexión mediante APIs y desarrollos propios.

En el caso los mensajes mediante WhatsApp, Amazon cuenta con el servicio de End User Messaging que permite la integración directa con Amazon Connect. Para esto necesitamos vincular nuestra cuenta de AWS con el servicio WhatsApp Business Account (WABA)

Para el caso de Facebook o Instagram la conexión se debe realizar mediante APIs y el uso de Webhooks que debemos crear de manera manual.

Como conectar Facebook Messenger a Amazon Connect

Como base para la implementación se utilizo este repositorio: https://github.com/amazon-connect/amazon-connect-message-streaming-examples/, actualizando algunos de los componentes para ser compatibles con la API v23.0 de Facebook.

Para poder hacer la conexión vamos a tener que realizar una serie de configuraciones y despliegues tanto en AWS como en la plataforma de Facebook Developers. Para este escenario vamos a asumir que ya se tiene una pagina existente en facebook y que es desde donde los usuarios nos van a enviar mensajes y que ya realizamos la creación de una App dentro del panel de apps de Meta. Respecto a la parte en AWS debemos tener ya creada una instancia de connect, un flujo de atencion que derive a una cola y al menos un agente asignado a esa cola y por ultimo un secreto en Secret Manager ya que es necesario el ARN del recurso para desplegar el repositorio.

Configuración de webhook

Para realizar la configuración del webhook vamos a tener que levantar un endpoint donde nuestra aplicación de Facebook va a enviar un mensaje para “registrarse” y dar por valido el endpoint. Esta validación se hace mediante el envió de una clave que nosotros definimos para la aplicación y un token numérico que debemos devolver en respuesta a modo de confirmación.

Dentro de la app de Meta, en el menú de webhooks vamos a ver la siguiente pantalla:

Pantalla de configuracion de webhooks en plataforma de meta

Lo primero que debemos hacer es seleccionar a que producto u “objeto” nos vamos a subscribir, para el caso de los mensajes el producto es Page. Luego debemos configurar la URL de nuestro endpoint de registración y un token que definimos nosotros y que va a estar configurado en nuestro servicio.

En la sección de campos del webhook podemos seleccionar los campos a los cuales nos vamos a subscribir para recibir novedades. Para el caso de los mensajes el campo es messages. A su vez desde el botón de Probar podemos enviar un request con los campos correspondientes para verificar la recepción en nuestro servicio

Al momento de escribir este documento, por motivos que desconozco, el envió prueba de mensajes no estaría funcionando a pesar de recibir un mensaje de envió correcto por parte de la pagina. En internet hay algunos usuarios que reportan el mismo problema pero sin mucha claridad en como resolverlo.

Diagrama de registro del webhook

Diagrama de registro de webhooks

  1. La App hace un llamado GET al endpoint enviando por query los campos Mode, Token y Challenge.
  2. En nuestro servicio debemos verificar que Mode = “subscribe” y que el Token sea el que definimos para nuestro servicio. Por ultimo debemos devolver el contenido del campo Challenge sin modificaciones (el body es directamente el código numérico recibido, sin ningún formato)

Tokens de acceso

Luego de configurar el webhook, debemos ir al menú de Messenger donde podremos conectar la pagina desde donde los usuarios se van a estar contactando y generar el token de acceso correspondiente. Este secreto lo vamos a almacenar en Secret Manager con la key PAGE_TOKEN.

En el repositorio hay referencias al campo APP_SECRET que es un campo que se puede obtener desde la web de Meta y se usaba para generar una firma en la request de envio de mensajes. En la version V23.0 de la API parece no ser necesaria.

Pantalla de configuracion de token de aplicacion en Meta

Permisos de la app

Para poder completar el proceso de revisión de la aplicación es necesario contar con un negocio validado en la plataforma de Meta. Es importante que al momento de solicitar permisos para la aplicación sean exclusivamente los necesarios para la función que queremos ejecutar, el exceso en la cantidad de permisos puede llevar al bloqueo de la aplicación.

Para el caso de los mensajes desde Facebook únicamente pasando la aplicación a modo activo fue suficiente para recibir mensajes. Es necesario validar esto para los escenarios productivos.

Camino completo de los mensajes

Diagrama del flujo para recibir y enviar mensajes

  1. El usuario se comunica mediante el chat de Facebook en la pagina de la empresa
  2. La app de meta envía el evento al endpoint configurado
  3. API Gateway revise la petición POST y la deriva a la lambda de inbound
  4. Se revisa la existencia de un chat previo abierto entre el usuario y un agente.
  5. Se envía el mensaje hacia la conversación de connect existente o bien se abre una nueva conversación para ser atendida por un agente.
  6. Las respuesta de los agentes y eventos de connect se envía mediante un tópico SNS el cual dispara la lambda de Outbound.
  7. Dependiendo el tipo de evento detectado se actualiza la base de datos
  8. Utilizando el token de la pagina almacenado en Secret Manager se envía un mensaje directamente a la pagina con los datos del usuario y el mensaje de respuesta

Top comments (0)