chatbot-basico

Tabla de contenidos

¿Te interesan los ChatBots? ¿No sabes por dónde empezar?

A veces la mejor forma de empezar es intentándolo, algo simple y funcional que en el mismo desarrollo te vaya enseñando y a la vez dando ideas sobre lo que podrías conseguir después.

Asi que aquí vamos!

Para este tutorial vamos a utilizar Telegram como plataforma para nuestro chatbot y Python como lenguaje de desarrollo para poder lograr nuestro objetivo rápido y sin tanto esfuerzo.

Ok primero necesitamos un Token para utilizar nuestro bot, para eso nos vamos a Telegram y buscamo al “BotFather”, le enviamos el comando /newbot

Entonces preguntará cuál es el nombre del Bot y cual es el ID (hay que tomar en cuenta que el ID/Username del bot no se puede repetir, por lo que hay que escoger un ID único, usualmente al final lleva la palabra Bot), en la última pregunta nos respondera con el Token y un Url para ir a la conversación con nuestro bot.

El Token se mira algo asi como esto: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11, de ahora en adelante simplemente usaremos <token> para referirnos a ello.

Ahora copia el Token y págalo en algún lugar seguro, próximamente vamos a utilizarlo.

Si aún no tienes Python instalado puedes ir a https://www.python.org/ para descargarlo e instalarlo.

En el medio hay una gran cantidad de APIs útiles para Python y Telegram-Bots, si quieres saber un poco mas sobre ello puedes ir a:

https://github.com/python-telegram-bot/python-telegram-bot

En esta ocasión vamos a utilizar este API que es bastante completo y fácil de usar:

https://github.com/datamachine/twx.botapi

Primero lo instalamos por medio de pip.

pip install twx.botapi

Ahora, Necesitamos un API que nos diga el clima en la ubicación que solicitaremos, para ello utilizaremos Open Weather Map:

https://github.com/csparpa/pyowm

pip install pyowm

Y para utilizarlo es necesario un API KEY que puedes obtener aquí:

http://openweathermap.org/appid

De ahora en adelante nos referiremos al api key como <OWMKEY>
Este API nos proporciona datos como nubosidad, viento, temperatura y algunos otros detalles acerca del clima en la ubicación que le enviemos.

Perfecto! estamos listos para desarrollarlo!

# -*- coding: utf-8 -*-  import sys  from time import sleep  from twx.botapi import TelegramBot, ReplyKeyboardMarkup #Telegram Bot API  import traceback  from pyowm import OWM #API del Clima"""  Inicializamos nuestro Bot y el API del Clima  """  TOKEN = <token>  OWMKEY = <OWMKEY>bot = TelegramBot(TOKEN)   bot.update_bot_info().wait() #Esperamos por un mensaje entrante  print bot.username   last_update_id = 0   def process_message(bot, u): #Este es el procedimiento que se ejecuta al llegar un mensaje    #Vamos a utilizar un Teclado customizado    keyboard = [['Get Weather']] #Al teclado le agregaremos un Boton de Obtener el clima    reply_markup = ReplyKeyboardMarkup.create(keyboard) #Aqui creamos el teclado    if u.message.sender and u.message.text and u.message.chat: #Si el mensaje tiene un chatID y un contenido de texto entonces lo identificamos como texto   chat_id = u.message.chat.id    user = u.message.sender.username   message = u.message.text    print chat_id    print message    if message == 'Get Weather': #Si el usuario esta enviando el comando correcto para obtener el clima entonces preguntamos su ubicación    bot.send_message(chat_id, 'please send me your location')    else:    bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() #Si no contiene el comando entonces mostramos las opciones de nuevo     elif u.message.location: #Si el mensaje contiene una ubicación entonces generamos el clima en ese sitio    print u.message.location    chat_id = u.message.chat.id    owm = OWM(OWMKEY) #inicializamos el API del clima   obs = owm.weather_at_coords(u.message.location.latitude, u.message.location.longitude) #creamos un observation    w = obs.get_weather() #creamos un objeto Weather como w    print(w) # <Weather - reference time=2013-12-18 09:20, status=Clouds>    l = obs.get_location() # creamos una ubicacion respecto al objeto weather    status = str(w.get_detailed_status())    placename = str(l.get_name())    wtime = str(w.get_reference_time(timeformat='iso'))    temperature = str(w.get_temperature('celsius').get('temp'))   bot.send_message(chat_id, 'Weather Status: ' +status +' At '+placename+' ' +wtime+' Temperature: '+ temperature+ 'C') #Enviamos la respuesta con el clima   bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() #enviamos de nuevo el teclado para que lo muestre en pantalla   else:    print u bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() while True: #Este loop sirve para esperar por los mensajes entrantes   updates = bot.get_updates(offset = last_update_id).wait() #esperamos y obtenemos el mensaje   try:    for update in updates: #obtenemos los datos del mensaje   if int(update.update_id) > int(last_update_id): #si el mensaje que estamos recibiendo es nuevo entonces, procesarlo   last_update_id = update.update_id    process_message(bot, update) #lo enviamos a la función que lo procesa    continue    continue    except Exception:    ex = None    print traceback.format_exc()    continue

Ahora podemos guardarlo y ejecutarlo

Si todo fue correctamente entonces obtendrás algo como esto:

Genial! ahora es momento de que leas un poco mas y agregues algunas imágenes e interacción al bot, pero por ahora tenemos nuestro nuevo y reluciente BOT funcionando y siendo útil!

Si quieres saber un poco más sobre este API para bots de telegram puedes ir a la página de la documentación en:

https://pythonhosted.org/twx/twx/botapi/botapi.html

También aquí puedes encontrar algunos ejemplos del API del clima:

https://github.com/csparpa/pyowm/blob/master/pyowm/docs/usage-examples.md

Espero te sea útil!

Por Valery Calderon Briz

Data Team Lead at Fairplay.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *