Ir al contenido principal

Mi primer chatbot con whatsapp

No voy a hacer "apología de whatsapp" pues es claro para todos que es una herramienta de comunicación que todo el mundo (al menos occidental) tiene y usa a diario.

Siendo así ¿que tal si mi aplicación pudiera responder por ese medio? ¿Qué skills necesitaría? ¿Qué otros recursos?

Revisé algunos contenidos al respecto, por cierto los recomiendo, especialmente los producidos en el GX29: https://meetings.genexus.com/2019/sessions/chatbots

Es tremendo lo que se puede hacer alrededor del tema. Sin embargo lo que yo quería era algo bien sencillo, no quería tanto la parte de NLP (PLN), IA, etc que es un camino muy interesante pero que implicaba más trabajo y lo mio era explorar, divertirme, hacer algo útil y aprender en el camino (algunos le llaman "procastinar":)).

Quería probar la utilidad de "dialogar" con mi aplicación vía Whatsapp, generar otras ideas a partir de ver y sentir algo funcionando, resolviendo un problema real, un prototipo de bajo costo.
Así que partí de un servicio que simplemente me contesta un dato (cantidad de usuarios registrados), el cual ya tengo y es cuestión de ponerle Whatsapp arriba.
Si funciona para ese primer servicio, podría implementarlo para otros servicios: ¿que tal que Whatsapp fuera la UI de esos servicios?

Algo así:

Whatsapp llama a mi "proxy" y mi "proxy" llama al servicio que se quiera consumir.
Ir directo con whatsapp me complicó un poco (cuenta certificada, etc) así que terminé incluyendo Twilio como un "broker" entre Whataspp y mi proxy (algo de esto habla Sebastián en su charla del GX29)

Así que el esquema quedó:


Es decir: Whatsapp "llama" a Twilio, Twilio a mi app, esta determina cuál es el servicio y lo llama, luego contesta a Twilio que contesta a Whatsapp.

¿A qué se resume hacer un chatbot como este?

1. Crearse una cuenta en Twilio (acá una guía)
2. Definir un "webhook" que atenderá las llamadas de Twilio.

Esto en GeneXus 16 U6 es un proc HTTP y con el módulo de GeneXusChannels que viene en GeneXus es simplemente:

&Value = Parameters.TwilioKey
&Query = &HttpRequest.ToString()
GeneXusChannels.Webhooks.Whatsapp.Twilio.WhatsappTwilioWebhook(&Query, &Message, &ChannelConfiguration)

&ChannelConfigurationProperty = new()
&ChannelConfigurationProperty.Key = WhatsappProperties.Token
&ChannelConfigurationProperty.Value = &Value
&ChannelConfiguration.Properties.Add(&ChannelConfigurationProperty)

// processing the message received
do case
    case &Message.Text.ToLower().Trim() = !"1"
        &Message.Text = str(GetGeneXusUsersTotal())
    case &Message.Text.ToLower().Trim() = !"2"
        &Message.Text = "another service"
    otherwise
        &Message.Text="Choose:"+newline()+"1. Total Registered Users (demo)"+newline()+"2. Another service"+Newline()
endcase

GeneXusChannels.Message.SendMessage(&ChannelConfiguration, &Message, &Messages)
Digamos que creando la cuenta y escribiendo 10 lineas de código tengo un chatbot funcional!
Es más, si no la quieren escribir pueden obtener la KB de acá y esta guía puede aportar.

Se ve así:



De acuerdo que no tiene NLP, la seguridad es básica (uso un token en el header del servicio que consumo), no mantiene estado de la conversación, etc pero funciona y me llevó 20 minutos dejarlo andando!!

A su vez, viendo la cantidad de servicios de datos que existen hoy, viendo las charlas del GX29 y lo que hay publicado en el wiki de GeneXus quisiera tener un par de horas para poder seguir explorando, aprendiendo, haciendo prototipos rápido y fácil porque se pueden hacer cosas muy útiles (y divertidas) con esto!

Comentarios

  1. It’s amazing in support of me to have a site, which is useful in support of my know-how. thanks admin, you surely come with remarkable articles. Cheers for sharing your website page.
    AI Chatbot
    Chatbot Development
    RPA Bot
    Bank Chatbot
    Artificial Intelligence Company in Dubai
    Artificial Intelligence Companies

    ResponderBorrar
  2. Hola que tal mi nombre es Andres. La empresa para la que trabajo quiere poder integrar su padron de socios y enviar recordatorio de citas o comunicados en general. Quisiera preguntarte si tienes la posibilidad de realizar algun desarrollo en genexus y hacernos ese trabajo?. Te agradezco si me puedes informar. Saludos!

    ResponderBorrar
    Respuestas
    1. Andrés,
      Personalmente no, sin embargo diría que la gente de Delfasoft te pueden dar una mano porque tienen aplicaciones para padrones de socios, etc. Sé que se especializan en deportes, gimnasios, boxes pero tienen otras aplicaciones que pueden servir.
      Te paso el contacto:

      Fabricio De los Santos
      https://www.delfasoft.com | https://www.delfasport.com
      Twitter: http://twitter.com/fabriciodls
      LinkedIn: http://www.linkedin.com/in/fabriciodelossantos

      Saludos,

      Borrar
  3. La idea del chatbot en Gx funciona en proyectos simples o demos como esta. Sin embargo cuando intentas agregar un mínimo de complejidad comienzan los problemas típicos de Genexus, la documentación dice una cosa pero la realidad es otra. Hay que terminar haciendo todo a prueba y error.
    Si van a comenzar un proyecto de chatbot, no lo recomiendo. Lo digo por experiencia.
    Estudien otras herramientas, lleva un poco más de esfuerzo pero al final vale la pena.

    ResponderBorrar
    Respuestas
    1. JY,

      Entiendo, lo mío era un "sample" nomás, no me ha tocado participar directamente en proyectos más "complejos" que seguro implican otros desafíos.
      Sí conozco varios que son más "divertidos" que el hello world que armé yo y andan bárbaro.
      Lamento que no te haya ido bien en tu caso, espero te vaya bien con esas otras herramientas (hay muchas y muy buenas por cierto!! todo depende de lo que se quiera hacer), si en algún momento le das otra oportunidad a hacerlo con Genexus contá conmigo que no soy especialista pero capaz alguna mano puedo dar.

      Gustavo

      Borrar
  4. Yo integre unas apis que elabore y las uso con genexus para el envio a whatsapp, tanto con el chatbot como tambien para el envio de recordatorios , alertas o notificaciones. pueden escribirme a juandarenas@gmail.com y les doy informacion

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Liberar una versión: el fin del principio

Quienes desarrollamos software buscamos afectar positivamente la vida de las personas a través de nuestras aplicaciones. Ese es nuestro objetivo final, ese es nuestro éxito. Quienes desarrollamos , que ayuda a nuestros colegas en esa misión, solo tenemos éxito cuando ellos tienen éxito, por eso solemos decir que cuando liberamos una versión es "el fin del principio". Es un escalón fundamental, pero solo el primero. Tuve el privilegio de formar parte del equipo de y de su pero a su vez no he podido dedicarle tanto tiempo   como quisiera, casi no he podido  , ni  he podido leer. El mundo siguió girando, hay  , hay que me perdí y . Casi de casualidad me enteré del encuentro del a partir del 16/marzo en Montevideo. En cualquier caso: ¡el esfuerzo valió la pena!. Ahora que está siendo liberada en el   , hay que celebrar porque aplica aquello de "release is a feature". Podría tirarme en mi casa y estrenar mi  con una buena peli o sino aprovechar ir al un poco má...

El miedo, ese asesino silencioso

Hace unas semanas compré por Mercado Libre un tejido de alambre (de esos electrosoldados que se usan para cercos, pérgolas, etc) para armar una pérgola en casa. Como me suele pasar: compré de más. Así que decidí vender el resto del alambre por el mismo medio (Mercado Libre). Lo publiqué un Miércoles a las 13:00 y 4 horas después recibo un aviso de Mercado Libre que lo había vendido. Perfecto! Incluso lo había puesto al mismo precio x metro que la compra original así que notable! Revisé la compra y me pagó mediante Mercado Pago usando una tarjeta VISA, en fin, todo normal. Un rato después del aviso me llaman de un teléfono fijo al celular un tal Juan Rodriguez que coincidía con el nombre del comprador que me había llegado. Capitulo 1: ¡para qué abrís la boca! No sé cómo decir esto de un modo "políticamente correcto" pero la manera de expresarse parecía de alguien que no tenía un gran nivel de educación. Demasiado "lunfardo" para hablar con alguien que no con...

Sobre plomeros y sanitarios

Hace unos días estaba en casa de mi madre, quien sigue viviendo en la ciudad donde yo nací (Florida-Uruguay), cuando sonó el timbre. Fui a atender y me encontré con Martín, un ex compañero de liceo que hacía años no veía. Luego de preguntarle cómo andaba y el saludo de rigor, le pregunté que estaba haciendo por allí y me dijo "estoy trabajando aquí", ahí noté que venía con baldes y herramientas y recordé que es hijo del plomero que toda la vida trabajó en mi casa. El baño de mi madre estaba con problemas en la presión de agua así que llamó al plomero "tradicional" y este le comentó que estaba retirado pero que enviaría a su hijo. Allí pues estaba Martín. Es interesante encontrarse con compañeros de escuela/liceo que uno no ve hace muchos años, da para otro post seguramente. La cuestión es que seguimos conversando mientras él trabajaba. Le pregunté por el padre y me dijo que estaba bien pero ya medio cansado del trabajo y que nunca se había podido adaptar a los cambi...