Cómo diseñé, desarrollé e implementé un chatbot completamente en la nube

Todo comenzó con un video de YouTube que grabé hace unos meses. En él, hablé sobre la importancia de la revisión deliberada. Esto le ayuda a retener cosas en su mente durante un período de tiempo más largo y le brinda técnicas para revisar proyectos importantes. Si no lo has hecho, míralo aquí.

En el video, hablé sobre la frecuencia con la que debería revisar, qué diablos es la curva de olvido y por qué debería importarle.

Quería darles una herramienta adecuada, además del video, para que puedan revisar mejor. Como desarrollador, mi respuesta natural fue "¡Escribamos una aplicación!"

Pero si has leído mi otro artículo sobre por qué las aplicaciones nativas están condenadas, sabes que era un poco reacio a escribir una aplicación independiente para esto. Di un paso atrás y analicé la situación. Necesitaba un back-end para almacenar los datos de los usuarios y un front-end para recopilar y mostrar esos datos.

Quería que el usuario a bordo no tuviera la mayor fricción posible. Obligar a los usuarios a descargar una nueva aplicación es difícil. Si construyera un chatbot, serviría para ese propósito y no tendría que convencer a nadie de descargar nada. También ahorraría algo de tiempo, ya que no tendría que crear una aplicación cliente independiente y pasar por los procesos de las tiendas de aplicaciones.

Puedes probar el bot que construí aquí.

Vayamos al grano y hablemos sobre el proceso. Siga leyendo para ver cómo mi chatbot pasó de ser una idea a un producto totalmente funcional, utilizando completamente herramientas basadas en la nube.

Misión # 1: IA y PNL

El procesamiento del lenguaje natural (PNL) y la inteligencia artificial son partes integrales de cualquier chatbot inteligente. Entonces, desde el principio supe que necesitaría IA y PNL para hacer que mi bot sea "inteligente" y algo con lo que puedas hablar. También debe entender lo que le está pidiendo que haga. Vengo de un fondo de desarrollo de pila completa y no tengo experiencia con Machine Learning, AI o NLP. Pero para este bot, todas estas cosas eran necesidades.

Siendo un entusiasta de la tecnología, siempre controlo qué herramientas y bibliotecas están lanzando los Biggies. Era consciente de Wit.ai, una API en línea, lanzada por Facebook para habilitar PNL en sus aplicaciones y bots. Jugué un rato con él, pero lo encontré particularmente difícil.

Rápidamente busqué otras alternativas y encontré Api.ai. Jugué con él y lo encontré más amigable para el desarrollador, así que lo seguí.

Esto es exactamente lo que haces con estas API ai:

  1. Primero, escribe una conversación probable que puede ocurrir entre su bot y una persona.
  2. Basado en esa conversación, crea un diagrama de flujo exclusivo (o algo así) que maneja todos los resultados de la conversación.
  3. Usted programa el agente Api.ai para manejar todos los resultados predefinidos utilizando su panel de control. Es bastante simple, una vez que lo aprendes.

Nota: Puede recurrir a la lógica personalizada, que reside en su back-end seguro, si los controladores integrados de API.ai no pueden manejar su caso de uso. En el caso de Revisebot, estaba almacenando el historial de aprendizaje de cada usuario y calculando qué temas debería revisar a continuación. Esto requirió cálculos personalizados y mecanismos de persistencia.

Revise la PNL de Bot usando Api.ai

Api.ai también ofrece algunos agentes predefinidos, como las charlas y los agentes meteorológicos, que pueden responder a las preguntas de los usuarios sobre el clima y otros temas. Estas son cosas plug-n-play que puedes usar fácilmente en tus chatbots.

Como Revisebot necesitaba manejar casos de uso personalizados, tuve que escribir algo de código. Es hora de producir un código JavaScript / Node.js. ¡Hurra!

Misión # 2: Alojamiento en la nube

Soy usuario de Digital Ocean desde hace mucho tiempo, pero cuesta alrededor de $ 6 / mes como mínimo. Como no esperaba ganar dinero con Revisebot, alojarlo en Digital Ocean no tenía sentido. Perdería dinero mensualmente.

Necesitaba un host en la nube gratuito para este proyecto. Sabía que Firebase ofrecía alojamiento gratuito (como lo he usado en el pasado). También he usado Open Shift para otros proyectos (principalmente Laravel). Pero pensé que sería una gran idea buscar otras alternativas en Google, al menos por el bien de Node.js.

Fue entonces cuando me encontré con Heroku y su plan gratuito.

En poco tiempo, aprendí que la integración de Nodo.js de Heroku es increíble. Entonces leí sus documentos y rápidamente hice girar una aplicación Node.js en su dinamo gratis. Fue suficiente para mis necesidades. Su única limitación es que duerme después de un tiempo, por lo que la primera llamada API podría fallar mientras la dinamo se está despertando. Pero adapté mi chatbot para responder a tales escenarios.

Misión # 3: MongoDB en la nube

Había estado contemplando aprender algo de MongoDB. Entonces decidí usar MongoDB como la base de datos para mi chatbot. Una aplicación de chat es un buen caso de uso para el sistema de almacenamiento basado en documentos de MongoDB.

Mi plan se topó con un pequeño obstáculo cuando descubrí que Heroku no ofrece la integración de MongoDB de forma gratuita. No se preocupe: volví a mi amigo Google y busqué una "nube MongoDB gratuita".

Así es como llegué a saber sobre mLabs, que ofrece instancias gratuitas de MongoDB en la nube.

Su plan gratuito no se recomienda para aplicaciones listas para producción, pero está bien. Voy a ejecutar mi chatbot en el plan gratuito de todos modos.

Misión # 4: IDE en la nube

Mi plan era codificar todo en el tiempo libre que tenía después de mi trabajo a tiempo completo. Debido a esto, necesitaba la flexibilidad de la codificación desde cualquier lugar. Por lo tanto, mi espacio de trabajo de desarrollador necesitaba residir en la nube, que podía cargar desde cualquier lugar donde tuviera Internet.

He estado usando IDE basados ​​en la nube durante bastante tiempo y la experiencia es mixta. Nitrous.io fue increíble, pero lo cerraron. :( Después de probar algunos IDEs en línea como cloud9 y codeanywhere, el que encontré más estable y amigable para los desarrolladores fue Codenvy. Ofrece espacios de trabajo que puede crear o destruir a su gusto.

Así que creé un nuevo espacio de trabajo basado en Ubuntu en Codenvy e instalé el nodo, npm, git y curl de inmediato. Codenvy también ofrece un terminal, para que los usuarios de Linux se sientan como en casa. Mi espacio de trabajo de desarrollador en la nube estaba todo configurado.

Luego, cloné por git el repositorio de mi proyecto desde Heroku y configuré la integración de DB con la instancia de MongoDB de mLab usando archivos .env. Como puede ver en la captura de pantalla a continuación, blooming-escarpment-58368 fue mi proyecto Heroku Node.js.

Codificación revisebot en Codenvy.io

Misión # 5: Integrar el chatbot con las API de redes sociales

Se suponía que el chatbot debía funcionar con Facebook Messenger y Slack. Tendría que aprender las API de desarrollador para ambas plataformas y configurar mi máquina de desarrollo para probar las llamadas API. Afortunadamente, Api.ai también ofrece una fácil integración con un clic con la mayoría de las plataformas de redes sociales. Solo tiene que seguir su documentación para llevar su chatbot a la plataforma especificada.

Integración de redes sociales para Revisebot

Como puede ver en la captura de pantalla anterior, he integrado Revisebot con Facebook Messenger y Slack, a partir de ahora. Este paso no tomará mucho tiempo, créeme.

Utilizando estas herramientas, pude escribir, probar e implementar todo el ecosistema de mi chatbot (la base de datos, la capa de aplicación, el front-end y el agente de inteligencia artificial) para reaccionar a las consultas de los usuarios.

Pero todavía quedaban algunas piezas para hacer de Revisebot un producto completo y terminado.

Misión # 6: Gestión del código fuente

Aunque era el único desarrollador que trabajaba en este chatbot, necesitaba almacenar el código en un lugar seguro. Git era una opción obvia para el código fuente y la gestión del control de versiones, pero GitHub no ofrece un repositorio privado y gratuito. Se suponía que Revisebot no era una empresa de código abierto, por lo que no podía alojar el código fuente allí. Además, como no estaba usando una máquina de desarrollo local, no podía usar ningún repositorio git local para almacenar mi código.

De vuelta en el día, jugué con bitbucket.org. Tenía una idea de que ofrecían un repositorio privado gratuito, pero no estaba seguro de si todavía ofrecían dichos planes. Fui a su sitio y descubrí que lo hicieron. El resto se explica por sí mismo.

Misión # 7: Activos gráficos

El diseño y los gráficos son la base de cualquier producto digital. Necesitaba un logotipo, imágenes de fondo e imágenes de portada para la página de Facebook de mi chatbot, la lista de la tienda de aplicaciones Slack y la página de inicio.

No soy diseñador de ninguna manera, así que necesitaba algo de ayuda. Tuve que elegir la paleta de colores y los iconos, mezclar formas para crear un logotipo y más.

Afortunadamente, hay una herramienta útil para esto llamada Canva.

Ofrece plantillas de diseño listas para usar para redes sociales, YouTube y logotipos que puede personalizar según sus necesidades. Creé el logotipo de Revisebot, completamente en Canva, usando formas libres y algo de creatividad. Creo que lo hice bien.

Revisebot's Logo, creado con Canva.com

También utilicé algunas de sus plantillas gratuitas para crear otros recursos visuales para Revisebot, como una imagen de portada de Facebook.

Así es como codifiqué e implementé un chatbot totalmente funcional, que puede ayudarlo a programar su revisión, completamente en la nube.

Me cuesta exactamente $ 0 ejecutar este servicio.

Avíseme si tiene alguna pregunta sobre mi proyecto.

* No se involucraron máquinas locales en la fabricación de este chatbot.

Si te gustó esta publicación, amablemente dame un aplauso y sígueme para más publicaciones como esta. También debe suscribirse a mi canal de YouTube, si le gusta desarrollar cosas digitales.

Twitter | YouTube | Rayn Studios

Hasta la próxima ...