SaasCountries_bot: Creación de un bot para Telegram paso a paso

Telegram es una de las aplicaciones de mensajería instantánea más completas de la actualidad.

Creada por los hermanos Dúrov y lanzada al mercado en el año 2013, se ha caracterizado por la innovación, obligando a las aplicaciones de su tipo a introducir mejoras o quedarse en el olvido.

Con una proyección en contra de la venta de tus datos a terceros, tan común hoy en día en las redes sociales, se convierte en una aplicación ideal para mantener tu privacidad.

Entre sus funcionalidades más útiles se encuentran los canales, chats secretos, mensajes con autodestrucción programada, eliminación y modificación de mensajes, ajustes amigables con tu privacidad, chats de voz grupales y el uso de bots.

Precisamente sobre los bots estaremos conversando en el artículo de hoy en SaasRadar.

El objetivo que perseguimos es explicar un poco de teoría y que cuando termines seas capaz de programar tu primer bot y dejarlo en funcionamiento en Telegram.

Vamos a partir de lo básico, primeramente:

¿Qué es un bot de Telegram?

Un bot de Telegram es una aplicación desarrollada por un tercero con la que puedes interactuar mediante comandos.

Telegram apostó casi desde sus inicios por hacer pública su API para que personas e instituciones aportaran funcionalidades a través de los bots, creando un ecosistema que la convierte en mucho más que una simple aplicación de mensajería.

Han pasado 6 años desde la incorporación de estos amigos programados, y gracias a ellos, contamos hoy con funcionalidades para todo tipo de necesidad, desde moderar grupos, interactuar con otras redes sociales, enviar o recibir email, suscribirte a RSS de tus sitios preferidos o incluso jugar desde el chat.

Utilizando la API de Telegram y con algo de conocimiento de programación, puedes crear tu propia herramienta y compartirla con el mundo.

¿Te interesa?, pues síguenos, ya comenzamos.

Manos a la obra

  1. Crear el bot en Telegram con BotFather.

En el primer paso debemos registrar el bot en Telegram utilizando BotFather. Este, como su nombre indica, es el padre de todos los bots.

Permite crear nuevos bots, exponiendo el token que lo identifica para realizar consultas en nuestra programación con la finalidad de recibir los comandos provenientes de los usuarios y brindarles una respuesta.

Podemos acceder a BotFather en Telegram en la dirección https://t.me/BotFather. Al iniciarlo nos mostrará el siguiente mensaje.

Creación de bot para Telegram. BotFather paso 1

Utilizamos el comando /newbot para crear nuestro bot, al que llamaremos en este caso SaasCountries_bot.

El proceso de creación del bot nos pide el nombre y un usuario para que pueda ser encontrado.

La regla de Telegram es que todos estos usuarios terminen con el sufijo “bot”.

Una vez completado este paso, BotFather enviará un mensaje con el token de acceso al bot.

Este debe guardarse cuidadosamente ya que con esta información cualquier persona puede tomar el control del bot.

Creación de bot para Telegram. BotFather paso 2

Al terminar estos pasos ya tenemos un bot en Telegram accesible para todos los usuarios.

Tienes en tus manos muchas opciones como cambiar la imagen del bot, descripción y algunos modos para el trabajo en línea, pero no nos vamos a detener en estos detalles, se los dejo a tu creatividad.

A continuación, le incluiremos los comandos que estarán disponibles. Para esto usamos /setcommands, seleccionamos al bot con el que estamos trabajando y le pasamos los comandos en un mensaje como se muestra:

Creación de bot para Telegram. BotFather paso 3

De este modo creamos los comandos start, stop, info_pais y capital, los cuales ya se pueden ver en el bot.

Creación de bot para Telegram. Comandos

Hasta el momento tenemos el bot y los comandos, pero estos tienen implementada ninguna funcionalidad, por lo que si los utilizas no obtendrás resultado. Ahora nos toca programar la respuesta a cada comando.

  1. Programar las funcionalidades del bot.

Como te decía al inicio del artículo vamos a acceder ahora a la API de Telegram para recibir los mensajes que los usuarios le han mandado a nuestro bot.

Este proceso puede implementarse prácticamente en cualquier lenguaje siempre que tengamos una librería para hacer peticiones a API Rest.

En nuestro caso utilizaremos el lenguaje Python 3 y la librería pyTelegramBotAPI en su versión 3.7.2.

El primer paso sería instalar Python. Puedes descargarlo desde su web oficial:

https://www.python.org/downloads/

Luego instalamos las librerías que necesitemos haciendo uso de pip, sería escribir en la consola el siguiente comando:

pip install pyTelegramBotAPI==3.7.2

Al terminar este paso ya estamos listos para empezar a programar.

Creamos un fichero con extensión .py, en nuestro caso SaaSCountry.py donde pondremos todo el código. Comenzamos por las declaraciones iniciales:

import telebot
import requests

API_TOKEN = 'Aquí especificas el token de tu bot, el que nos dio BotFather antes'

bot = telebot.TeleBot(API_TOKEN)

De este modo ya tenemos las librerías necesarias importadas y le hemos dicho a la librería telebot cual es el token de nuestro bot para que le realice las peticiones.

Esta parte es siempre igual, solo cambian los módulos que se importan, a partir de aquí ya cambia según las funcionalidades que quieras agregar.

Comenzamos con las funcionalidades:

@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(
        message.chat.id,
        'Bienvenido a SaasCountries_bot \n' +
        '\n' +
        'Creado para complementar el artículo https://saasradar.net, que muestra el proceso de implementación de un Bot paso a paso \n' +
        '\n' +
        'Tienes a tu disposición los siguientes comandos: \n' +
        '/start : Iniciar bot \n' +
        '/stop : Detener bot \n' +
        '/info_pais <país>: Devuelve información de un país dado \n' +
        '/capital <capital>: Devuelve el país dada su capital \n'
    )

Utilizando el decorador @bot.message_handler() podemos suscribirnos a un determinado tipo de mensajes, en este caso al comando start.

A continuación, definimos la función que responderá a este comando, que recibe por parámetro el mensaje que envió el usuario.

El comando bot.sendmessage(id,message) recibe el id de un chat al cual mandarle el mensaje, el cual se especifica como segundo parámetro.

🔴 ¿Eres desarrollador? Mira nuestra selección de las mejores herramientas de prueba de software

En este caso utilizamos el id del chat desde el cual nos enviaron el mensaje y le devolvemos un mensaje de bienvenida.

Ahora vamos a implementar el comando capital, el cual recibirá una capital y devolverá el país al que pertenece utilizando la API RestCountries.

@bot.message_handler(commands=['capital'])
def capital(message):
    arr = message.text.split(' ')
    capital = ''
    for word in arr:
        if (word != arr[0]):
            capital += word
            if (word != arr[-1]):
                capital += ' '
    url = 'https://restcountries.eu/rest/v2/capital/' + capital
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        bot.send_message(
            message.chat.id, data[0]['name'])
    else:
        bot.reply_to(
            message, 'No se ha podido encontrar la capital, asegúrese de escribirla con su nombre en inglés')

En el código anterior dividimos el mensaje en 2 partes, el comando (/capital) y el parámetro del comando que sería la capital que buscaremos.

Luego buscamos la capital en la API de RestCountries y si devuelve un resultado satisfactorio (código 200) entonces convertimos la respuesta a formato json y enviamos un mensaje al chat con el nombre del país utilizando send_message.

En caso que no se encuentre en la API entonces devolvemos el mensaje correspondiente.

Pasamos ahora a la última funcionalidad que incluiremos en el bot, el comando /info_pais.

Este comando debe devolver la información de un país que se le especifique o de varios si el nombre es ambiguo. El código que proponemos es el siguiente:

@bot.message_handler(commands=['info_pais'])
def info_pais(message):
    arr = message.text.split(' ')
    country = ''
    for word in arr:
        if (word != arr[0]):
            country += word
            if (word != arr[-1]):
                country += ' '
    url = 'https://restcountries.eu/rest/v2/name/' + country
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        text = ''
        if (len(data) != 1):
            text += 'Se encontraron ' + \
                str(len(data))+'elementos en su búsqueda'
        for item in data:
            text += '\n \n'
            text += 'Información sobre ' + item['name'] + '\n'
            text += 'Población: ' + str(item['population']) + '\n'
            text += 'Región: ' + item['region'] + '\n'
            text += 'Subregión: ' + item['subregion'] + '\n'
            text += 'Capital: ' + item['capital'] + '\n'
            text += 'Idiomas: '
            for lang in item['languages']:
                text += lang['name']
                if (lang != data[0]['languages'][-1]):
                    text += ', '

        bot.send_message(
            message.chat.id, text)
    else:
        bot.reply_to(
            message, 'No se ha podido encontrar el país, asegúrese de escribirlo con su nombre en inglés')

En la primera parte igualmente separamos el comando del nombre del país como en el caso anterior y consultamos la API.

Convertimos el resultado a json y recorremos los resultados mostrando de cada país el nombre, su población, región, subregión, capital y sus idiomas.

Terminamos el script con:

bot.polling()

Para continuar la ejecución del script indefinidamente esperando mensajes de los usuarios que deseen interactuar.

De este modo queda terminado nuestro bot, lo podemos ejecutar en nuestra PC local o subirlo a algún hosting. El comando para ejecutarlo es:

python nombrefichero.py (En nuestro caso python SaaSCountries.py)

Puedes probar los comandos ahora desde Telegram y verás los resultados que programamos en nuestro script.

En el código del bot utilizamos send_message() y reply_to() para enviar y responder mensajes respectivamente.

Ahora te muestro otras funcionalidades que pueden servirte al desarrollar tu bot:

bot.edit_message_text(texto, chat_id, message_id)
bot.forward_message(to_chat_id, from_chat_id, message_id)
bot. send_audio(chat_id, audio)
bot.send_document(chat_id, doc)
bot.send_video(chat_id, video)
bot.send_location(chat_id, lat, lon)

Te recomiendo que visites la web https://pypi.org/project/pyTelegramBotAPI/ para obtener más información sobre la librería de Python con la que hemos trabajado en el día de hoy.

Te dejo además el bot en línea por un tiempo para que puedas probar las funcionalidades que hemos implementado paso a paso. Puedes localizarlo en https://t.me/SaaSCountries_bot

Por hoy me despido, espero que te haya resultado de utilidad el artículo y puedas llevar tus ideas a la práctica utilizando Telegram.

Déjanos saber tus impresiones o dudas en los comentarios.

🔴 También te puede interesar leer: Las mejores alternativas a Whatsapp con sus pro y sus contra

2 comentarios

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.