En la actualidad existen muchas herramientas para crear chatbots, sin la necesidad de programarlos.
Algunas herramientas son buenas y otras no lo son tanto. Esto se determina principalmente por la facilidad de uso, y los distintos escenarios que cubren.
¿Pero qué pasa si queremos desarrollar nuestro propio chatbot desde cero, sin depender de herramientas de terceros?
¿Es acaso eso posible? ¿Realmente podemos construir un chatbot que nos resulte útil?
La respuesta es sí. Es posible, y hoy veremos cómo hacerlo.
En resumen:
- Vamos a crear un bot para Facebook Messenger
- Este bot lo vamos a desarrollar usando Python
- Y lo vamos a tener alojado de forma gratuita gracias al servicio Google App Engine
¿Por qué desarrollar nuestro propio chatbot en vez de usar una herramienta?
Existen aplicaciones, que cuentan con una interfaz gráfica de usuario, y que nos permiten crear nuestros propios bots. ¿Por qué hemos de desarrollar uno desde cero?
Tenemos 3 razones principales:
- Es gratis. La capa gratuita de App Engine es muy generosa, por lo que es muy poco probable que excedamos el límite. Esto ocurriría sólo si tenemos varios miles de usuarios comunicándose con nuestro bot continuamente. De ser el caso, nuestro éxito superaría con creces nuestra inversión en hosting.
- Para aprender. ¿Realmente no sientes curiosidad por ver cómo se desarrolla un chatbot desde cero?
- Ir más lejos. Las herramientas para crear chatbots pueden ser muy interesantes, pero realmente estamos limitados a lo que ofrecen. Desarrollar nuestro propio chatbot, nos permitirá ser originales, y desarrollar lo que deseemos. Inclusive, hasta podríamos desarrollar nuestra propia plataforma para creación de chatbots.
Escogiendo un canal para nuestro chatbot
Podemos construir un bot para distintos canales. Entre los canales más populares tenemos Facebook Messenger, Slack, Twitter y Telegram.
En este artículo vamos a hablar de forma específica acerca del desarrollo de chatbots para Facebook Messenger.
¿Por qué? Principalmente porque Messenger es la plataforma más popular para chatbots. Casi todas las herramientas para construir chatbots se centran en Messenger, y algunas incluso sólo soportan Messenger. Y existe una buena razón para ello: presenta 2.167 millones de usuarios activos al mes (dato correspondiente a inicios del 2018).
Otra razón por la que se tiende a priorizar Messenger: botones de respuesta rápida.
Hay botones que nuestro chatbot puede ofrecer a los usuarios como un atajo y ahorrar que ellos lo tengan que escribir. Esto no sólo hace que el bot sea más atractivo (¿a quién le gusta tener que escribir desde un móvil?), también hace que nuestro trabajo como desarrolladores de chatbots sea mucho más sencillo.
Si ofrecemos botones a los usuarios, entonces ellos los usarán. Esto significa que no debemos preocuparnos por «parsear» consultas arbitrarias, que un usuario podría escribir (en lenguaje natural y probablemente fuera de contexto).
Guiar a nuestros usuarios es bueno para ellos, pero lo es también para nosotros.
El mágico árbol de nodos
Vamos a diseñar nuestro bot basados en un árbol de nodos.
Los posibles estados del bot se determinan en función a este árbol.
Los nodos representan:
- Los mensajes que envía el bot
- Las posibles respuestas que puede dar el usuario
El siguiente árbol representa entonces cada flujo de conversación posible.
Dedica unos segundos para analizarlo.
say: "Hola! Por favor selecciona una opción para poder ayudarte."
answers:
Cursos disponibles:
say: Tenemos varios cursos! Todos ellos son muy interesantes y totalmente prácticos
. Por favor selecciona la opción que te resulte más interesante.
answers:
Dominar Javascript:
say: https://www.tecgurus.com/javascript-curso-practico-y-completo/?couponCode
=INVITACION
Aprender Laravel:
say: https://www.tecgurus.com/curso-laravel-5-5-desde-cero-desarrolla-publica-
una-app-pedidos/?couponCode=INVITACION https://www.udemy.com/laravel-y-oauth-2-facebook
-twitter-google/?couponCode=INVITACION
Integrar Laravel+Vue:
say: https://www.tecgurus.com/realtime-messenger-usando-laravel-vue-bootstrap-
pusher/?couponCode=PROMOCION
Tengo una duda:
say: ¿Es una duda sobre un video que viste en el canal de Youtube? ¿O necesitas
ayuda personalizada?
answers:
Es sobre un video:
say: Gracias por visitar el canal. Por favor escribe tu duda en un comentario,
y te responderé por allí tan pronto como pueda.
Busco asesoría:
say: Gracias por tu interés. Por favor visita este enlace, donde verás cómo
puedo ayudarte https://programacionymas.com/asesoria
Solicitar desarrollo:
say: ¿Tienes definido formalmente el proyecto y estás dispuesto a invertir en él?
answers:
Aún no está definido:
say: Por favor cuéntame más y entonces te diré cómo puedo ayudarte.
No tengo presupuesto:
say: Entiendo. En tal caso te recomiendo inscribirte a mis cursos sobre
programación. Puedes aprender mucho con los tutoriales, y además siempre atiendo
todas las dudas.
Sí y sí:
say: Genial. Por favor envíame un documento con los requerimientos y te
contactaré tan pronto como tenga una propuesta.
Como ves, el árbol de conversación es bastante sencillo. Está escrito en formato YAML (Yet Another Markup Language), lo que facilita su lectura.
El nodo raíz especifica el primer mensaje que el bot envía al usuario. En este caso el mensaje inicial es «Hola. ¿En qué te puedo ayudar?», y según la respuesta del usuario, la conversación con el bot fluye.
¿Qué necesitamos para empezar a desarrollar nuestro bot?
Para desarrollar nuestro bot, tenemos primero que configurar un par de cosas en Facebook.
Las instrucciones, vamos a necesitar:
- Una página en Facebook — cada bot necesita una página diferente.
- Una cuenta de desarrollador, que nos permitirá registrar nuestra app en Facebook.
- Una app en Facebook para obtener acceso a un
secret access token
(lo necesitaremos posteriormente).
Los bots para Facebook funcionan a través de webhooks, que son URLs que nosotros definimos y que Facebook Messenger usará para interactuar con nuestro bot.
Para publicar nuestro webhook usaremos Google App Engine. La ventaja de esto es que resulta gratuito para bajos volúmenes de tráfico, y escala automáticamente si necesitamos más. Así mismo usaremos Python como lenguaje de programación, pero en realidad se puede lograr también con cualquier otro lenguaje.
Vamos a necesitar descargar el Python SDK y crear un proyecto de Google Cloud si aún no tenemos uno.
Creando nuestro Webhook
La primera misión de nuestro webhook es permitirle a Facebook verificar que realmente se trata de un webhook auténtico. Para ello simplemente tenemos que gestionar una petición GET, que contiene un token de verificación (es una cadena secreta y aleatoria, que debemos definir en Facebook).
La verificación es posible usando el siguiente código:
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
mode = self.request.get("hub.mode")
if mode == "subscribe":
challenge = self.request.get("hub.challenge")
verify_token = self.request.get("hub.verify_token")
if verify_token == VERIFY_TOKEN:
self.response.write(challenge)
else:
self.response.write("Ok")
Es así como definimos una clase para gestionar peticiones (usando el framework webapp2
).
Aunque no se muestra en el fragmento anterior, esta clase presenta también un constructor que se encarga de inicializar nuestra clase bot.
Te esperamos en la segujnda parte del artículo en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.