Cómo implementar un chatbot básico de Facebook Messenger

how-to-implement-a-basic-facebook-messenger-chatbot

Hoy en día, los canales de comunicación son fundamentales para un negocio. Si su cliente tiene una pregunta o un requisito, debe resolverse rápidamente. Internet y la vida en general se mueven tan rápido en estos días que el correo electrónico clásico no es lo suficientemente rápido. Por esta razón, existen varias herramientas que pueden ayudarlo a aumentar sus tiempos de respuesta. Por ejemplo, agregue una sección clásica de Preguntas Frecuentes en su sitio, para evitar responder las mismas preguntas una y otra vez, o algo más sofisticado como un soporte de chat 24/7.

Una de estas nuevas herramientas son los chatbots. Gracias a ellos, es posible que tenga respuestas automáticas a preguntas comunes sobre su negocio, lo que le permite a su usuario consultar información sobre su cuenta e incluso actualizarla a través de un asistente. Lo mejor de esto es que no necesita que una persona responda al chat, pero su usuario sentirá que está hablando con uno; facilitando el proceso y generando proximidad y fiabilidad.

En este artículo vamos a explorar cómo implementar un chatbot básico que funcione en Facebook Messenger. El Framework Django se usará para implementar los ejemplos, pero puede extrapolarlos a cualquier otro framework. Además, cómo configurar una aplicación Django no va a ser discutido Entonces, ¡comencemos!

Primero lo primero, configura tu aplicación de Facebook

Para poder usar el chatbot en Facebook Messenger, debe crear una aplicación de facebook, que mantendrá todas las configuraciones de chatbot y una página de facebook, esa será la cara de su negocio y el destinatario de los mensajes que enviarían sus clientes potenciales.

Una vez que haya creado la aplicación y la página, vaya a la aplicación y agregue Messenger como uno de los productos. Después de configurarlo, vaya a la configuración de messenger y cree un token para su página.

Guarde este token porque lo usaremos más tarde. Ahora, necesitamos configurar el webhook, pero para esto necesitamos un servidor que lo reciba y lo procese. ¡Así que vamos a crearlo!

Creando y configurando nuestra aplicación

Para esta sección, supondré que ya tiene una instancia de Django configurada y ejecutándose. Por esta razón, solo daré ejemplos de la vista que manejará el webhook de Facebook; la configuración que falta, como la url, depende de usted. Para simplificar el código, usaré un APIView de Django Rest Framework; pero siéntase libre de adaptar el ejemplo a sus preferencias.

Además, Facebook requiere que el webhook sea una url pública, así que usaré ngrok para crear uno que apunte a mi instancia local para permitir que Facebook envíe solicitudes a mi aplicación sin implementarla en producción.

Teniendo esto en cuenta, comencemos.

Primero, configuramos el webhook. Vaya a la sección Webhooks y haga clic en configurar webhooks. Aparecerá un modal como el siguiente. Allí, debe configurar la url, el token de verificación, que explicaremos más adelante, y las suscripciones que necesita para activar el webhook. Para una implementación básica, la opción de mensajes debería ser suficiente.

Una vez que hacemos clic en Verificar y Guardar, Facebook enviará una solicitud GET a la URL de devolución de llamada con dos parámetros: hub.verify_token, que coincide con el valor que estableció en la entrada de token de verificación (1234 en el ejemplo) y hub.challenge, que es un código único que Facebook enviará. Su aplicación debe validar que el token de verificación recibido coincide con el que utilizó y, si coincide, debe devolver el código de desafío único. Por este motivo, es muy recomendable que guarde su token de verificación de forma segura, como en una variable de entorno. Considerando esto, una vista como la siguiente debería hacer el truco.

from rest_framework import status
from rest_framework.views import APIView
class HandleFacebookPostView(APIView):
    def get(self, request, *args, **kwargs):
        if request.GET.get('hub.verify_token', '') == settings.FACEBOOK_VERIFY_TOKEN:
                return Response(request.GET.get('hub.challenge'))
        return Response(
            {'error': 'bad parameter'},
            status=status.HTTP_400_BAD_REQUEST)

Una vez que tengamos esta vista configurada, podemos hacer clic en «Verificar y Guardar«. Si Facebook obtiene lo que espera, la configuración se guardará y el modal se ocultará. Ahora, cada vez que se activa un evento que coincide con una de las suscripciones que seleccionó, Facebook enviará una solicitud de publicación. Entonces, veamos cómo administrar esas solicitudes de publicación.

Usando la misma Vista, defina su método de publicación de la siguiente manera

    def post(self, request, *args, **kwargs):
    	# facebook may send you several entries in one
    	# request. That is why we need several loops
    	# to correctly manage their post
        for entry in request.data['entry']:
            for message in entry['messaging']:
                # if the entry is from a message you received
                # it will contain a "message" key
                if 'message' in message:
                    # received message
                    self.answer_message(
                    	message['sender']['id'],
                    	message['message']['text'])
                    return Response({'success': True})
                # if the entry is from a message you sent
                # it will contain a "delivery" key
                if 'delivery' in message:
                    # sent message
                    return Response({'success': True})
                return Response({'success': True})

Como puede ver, simplemente verificamos cada una de las entradas que Facebook envía en el webhook y enviamos una respuesta si la entrada es de un mensaje. Ahora veamos cómo enviar este mensaje.

Para enviar un mensaje, necesitaremos enviar una solicitud POST al endpoint de facebook utilizando el token de la aplicación que creamos antes como autenticación. Para manejar esto más fácilmente, encapsularemos todo en un método.

    def answer_message(self, fb_id, message):
    	url = settings.FACEBOOK_SEND_MESSAGE_URL # https://graph.facebook.com/v2.6/me/messages
	    message_data = {
	        "recipient": {
	            "user_ref": fb_id
	        },
	        "message": {
	            "text": "Hello!"
	        }
	    }
	    response = requests.post(
	        url,
	        params={"access_token": settings.FACEBOOK_PAGE_ACCESS_TOKEN},
	        json=message_data)
	    return response, message_data

¡Y eso es todo! Ahora, cada vez que su página recibe un mensaje de un usuario, su página responderá «¡Hola!».

A partir de aquí, tiene un mundo de posibilidades. Puede usar un procesador de lenguaje natural, como wit.ai Facebook lo proporciona directamente para capacitar a su bot y responder a su cliente según sus necesidades o requisitos. Además, podría crear una red neuronal que aprender de ellos y mejora sus respuestas todos los días. ¡Es su decision!

Según mi experiencia, la documentación de Facebook puede ser difícil de entender, especialmente porque no está centralizada y tiende a ser abrumadora, pero una vez que comienzas a trabajar con ella y una vez que recibes tu primera respuesta automatizada, realmente ves cuán poderosa esta herramienta puede ser y cuántas oportunidades ofrece.

¡Espero que este tutorial te ayude a dar tus primeros pasos en el mundo de los chatbots!