Tutoriales

Bot Telegram NodeJS – Cómo crear tu bot de Telegram

Telegram es una aplicación de mensajería instantánea, que permite realizar publicaciones en canales, y hablar con gente de otros países. Hay grupos de todo tipo que pueden ayudarte en cualquier materia, pero Telegram también tiene una parte, por no decir toda, del lado de la programación, tanto las apps como los bots.

Ésta aplicación es de código libre por lo que cualquiera con conocimientos básicos en programación es capaz de crear su propia aplicación, como puede ser Plus Messenger o Telegram X, pero también es posible crear bot, los cuales nos permiten realizar acciones de manera automatizada dentro de la aplicación.

Índice

Descargando herramientas necesarias

En ésta ocasión y como anuncia la imagen de cabecera, crearemos nuestro bot desde 0 en NodeJS. Dándole funciones básicas, a la vez que útiles para nuestros grupos. Para ello, primero deberemos descargar e instalar ciertas herramientas, estas son con las que yo trabajo.

Bajo mi criterio, Visual Studio Code es una herramienta bastante versátil. Cuenta con extensiones que permiten y ayudan al programador a escribir de manera correcta la sintaxis de cualquier lenguaje. Existe otra alternativa como Sublime Text.

Si no hemos instalado con anterioridad Git, lo más probable es que al abrir Visual Studio Code te genere un error y te pida descargarlo. Hazlo, utilizaremos bash. La actual terminal de Linux.

NodeJS es un entorno en vivo que nos permite mantener de manera constante la comunicación con el servidor. Éste paquete es un instalador para Windows y es necesaria su instalación para poder trabajar con él.

La API que utilizaremos está basada en NodeJS, en otras palabras, en Javascript.

Si haces clic encima del título de este apartado, te enviará a un apartado de la documentación de ésta API para que la puedas instalar.
Si ya conoces el procedimiento, puedes saltarte este paso. No obstante, lo explicaré para principiantes.

Instalando la API node-telegram-bot-api
  • En primer lugar debemos crear una carpeta, en este caso en el escritorio.
  • Abre Visual Studio, en la barra de herramientas y pulsa “Archivo” .
  • Presiona sobre “Abrir carpeta…” y selecciona la carpeta que creaste. Ahí empezaremos a crear nuestro entorno de trabajo.

A continuación, en el terminal de bash que previamente hemos instalado con Git, buscaremos la carpeta mediante el uso de “cd” para moverte hacia dentro de las carpetas y “cd ..” para salir hacia fuera de las carpetas. Una vez que nos encontremos en nuestra carpeta, ejecutaremos la siguiente línea de comando:

npm install --save node-telegram-bot-api

Automáticamente, empezará a descargar datos. El tiempo de demora de la descarga dependerá de tu conexión de red.

Instalación de API node-telegram-bot
Descargando API node-telegram-bot-api

Una vez instalada la API de node-telegram-bot, mostrará un mensaje como éste, obteniendo como resultado la instalación de la API en la carpeta que hemos creado y accedido previamente:

Ya tenemos la API instalada.

Generando nuestro Token con @Botfather

Para crear y obtener nuestro Token, el cual nos permitirá tener una comunicación con la API de Telegram debemos hablar al padre de los bots, BotFather.

Una vez que presionemos sobre “Iniciar”, debemos escribir /newbot. Ahora, nos pedirá un nombre y un @alias para el bot. Esto es totalmente libre de elección, puedes poner el que te venga en gana.

Generando Token API

He tapado parte del Token por seguridad. Te recomiendo que jamás lo muestres a terceras personas. El token vendría a ser como el DNI de tu bot.

No obstante, en el caso de que una tercera persona obtuviese tu token e hiciese uso de él, tienes la posibilidad de revocar y generar otro distinto.

Creando paquete de información de nuestro bot

Una vez que haya terminado de descargar los datos y hayamos creado nuestro token, procederemos a crear el paquete que mostrará información de nuestro archivo, en este caso, del bot.

No obstante, también puede ser de una aplicación o un simple script. Para ello, ejecutamos la siguiente línea de comando:

npm init

En la terminal, nos comenzará a preguntar que nombre le queremos dar, que versión queremos añadirle, entre otras muchas cosas más.

Una vez creado nuestro archivo de información, necesitaremos tener a mano la documentación de la API node-telegram-bot y la documentación de API Bot Telegram. Resultan muy útiles cuando llegas a entender los tipos y métodos que existen actualmente para poder aplicarlos.

Creando funciones básicas

Ahora, procederemos a crear nuestro archivo para poder empezar a trabajar con nuestro bot y darle algunas funciones básicas.

Para abrir desde Visual Studio Code la carpeta donde hemos almacenado nuestro paquete de información del bot y la API, nos deslizamos hacia la barra de herramientas y nos situamos sobre “Abrir carpeta”.

Seleccionamos nuestra carpeta y automáticamente se refrescará Visual Studio Code. Volvemos a deslizarnos hacia la barra de herramientas y nos situamos sobre “Nuevo archivo”, hacemos clic.

Pulsamos ‘Ctrl + S’ para guardar el archivo. Cabe recalcar, que es estrictamente necesario guardarlo dentro de la carpeta que hemos abierto y con la extensión ‘ .js ‘. Por ejemplo: ‘bot.js’.

Token y Polling

Una vez hecho este paso, haremos el requerimiento de la API para poder utilizar los tipos y métodos. Dentro de nuestro archivo bot.js, escribiremos la siguiente línea de código:

const TelegramBot = require('node-telegram-bot-api');

Ahora, fijamos el Token de nuestro bot y la “actividad constante”. Con actividad constante me refiero, a que el bot esté en constante proceso de escucha y procesamiento de datos respecto al token de la API de Telegram.

const token = 'TU TOKEN DENTRO DE LAS COMILLAS SIMPLES';
const bot = new TelegramBot(token, {polling: true});

A partir de estas tres líneas de código, ya podríamos empezar a crear comandos y eventos para darle funcionalidad a nuestro bot.

Para terminar este post, dejaremos creados un comando y un evento para aprender a diferenciar entre ambos, en este caso será cambiar el mensaje que se muestra al escribir ‘/start’ y que el bot responda al escuchar una palabra, en concreto: ‘Hola bot’.

  • Diferencias entre comandos y eventos.

Un comando: Solo realiza una acción cuando se le llama. Un ejemplo claro y entendible; si nosotros llamamos a pepito y le decimos que nos diga ‘buen día’, pepito dice ‘buen día’. Para crear estos comandos se utiliza:

bot.onText(/^\/comando, funcion(){

Un evento: Se mantiene en constante escucha para percibir si se llama al evento o no y dependiendo de si se lo añadimos o no, nos mostrará el evento en la terminal. Un ejemplo, cuando un usuario se une a un grupo, el chat genera el evento: ‘Pepito se unió al grupo mediante enlace de invitación’ y éste puede ser recogido para dar la bienvenida a nuevos usuarios. Para crear estos eventos se utiliza:

bot.on('evento a escuchar', funcion(){

Estructurando el código.

Creando un comando.

Conociendo las diferencias entre comando y evento, pasaremos a crear el comando ‘/start’ para ello, escribiremos el siguiente fragmento de código:

bot.onText(/^\/start, function(msg){

Como hemos comentado anteriormente, estamos haciendo uso de un comando y por ello utilizamos ‘bot.onText’. /^\/ son caracteres estrictamente necesarios, el nombre que le quieras dar al comando es indiferente, pero esos caracteres son obligatorios, de no establecerlos, tendríamos constantes errores en la terminal.

Posteriormente creamos una función que recoja el mensaje.

A continuación, fijaremos unas cuantas variables para escribir un poco de código y adaptarnos al entorno ejecutando una acción y explicando un poco más a fondo todo el código.

var chatId = msg.chat.id;
var username = msg.from.username;

bot.sendMessage(chatId, "Hola, " + username + " soy un bot y mi nombre es Review4IU")

Fijamos las variables ‘chatId’ y ‘username’ para, de alguna manera, simplificar un poco el código.

msg.chat.id se encarga de recoger el id del chat donde se está realizando la petición.
msg.from.username se encarga de recoger el @alias del usuario.

Posteriormente, ejecutamos una acción, que es enviar un mensaje, especificando el msg.chat.id para recoger hacia donde se envia la petición + "texto."

El texto siempre va dentro de las comillas. Para concatenar variables y texto se utiliza el símbolo ‘+’. Para realizar un salto de línea, deberás utilizar “\n”

Cómo somos los creadores del bot, tenemos el “privilegio” de ver quien utiliza los comandos y obtener información acerca de los usuarios.

Para ello, entre medias de la declaración del comando y antes de fijar las variables, fijamos un console.log();, que se encargará de recoger y mostrar en la terminal el dato que se le indique dentro de los paréntesis, quedando como resultado:

bot.onText(/^\/start/, function(msg){
console.log(msg);
var chatId = msg.chat.id;
var username = msg.from.username;

bot.sendMessage(chatId, "Hola, " + username + " soy un bot y mi nombre es Review4IU");
});

Creando un evento.

Ahora procederemos a crear el evento, el cual reaccionará al detectar una palabra determinada y posteriormente realizará una acción, en este caso enviar un mensaje. Para ello, crearemos el llamamiento al evento:

bot.on('message', function(msg){

En este caso, el evento es un mensaje, se crea también la función (msg).

Posteriormente, fijamos tres variable, una con el mensaje que queramos que contenga el bot para que reaccione al llamamiento del evento, otra para el nombre del usuario y una última para mantener el código limpio.

var Hola = "hola bot";
var firstnameuser = msg.from.first_name;
var chatId = msg.chat.id;

Utilizaremos una condición para que no ponga distinciones a la hora de sí se escribe la frase en minúsculas o mayúscula, en pseudocódigo sería así:

Si (el texto es minuscula o mayuscula e incluye lo que contiene la variable Hola) realiza una acción.

En este caso, se realiza de la siguiente manera:

if (msg.text.toString().toLowerCase().includes(Hola)){

Como en la variable hemos fijado ‘hola bot’, ahora el bot solo responderá siempre y cuando el usuario envíe la frase ‘hola bot’.

A continuación, enviaremos un mensaje sencillo a modo de respuesta:

bot.sendMessage(chatId, "Hola " + firstnameuser + ", cómo estás?");

Como en el ejemplo anterior, hemos ejecutado la acción de enviar un mensaje bot.sendMessage, especificando el msg.chat.id de donde ha sido requerido el evento.

Hemos fijado texto, recuerda que el texto siempre va dentro de las comillas y para concatenar utiliza ‘+’ entre texto y variables.

También hemos fijado la variable firstnameuser, la cual se encarga de recoger el nombre del usuario para posteriormente enviarlo en el mensaje. Obteniendo como resultado final:

bot.on('message', function(msg) {
var Hola = "hola bot";
var firstnameuser = msg.from.first_name;
if (msg.text.toString().toLowerCase().includes(Hola)) {
bot.sendMessage(msg.chat.id, "Hola " + firstnameuser + ", como estás?");
}
});

Iniciando nuestro bot

Para iniciar nuestro bot, escribiremos en la terminal de bash:
node bot.js o el nombre que le hayamos dado a nuestro archivo ‘bot.js’
En proximos tutoriales, crearemos el comando ID y el comando !Ping – Pong!

El primero para que nos devuelva información de nuestro ID ya sea en un grupo o de manera privada y el segundo para que los usuarios sepan si tu bot está activo.

¿Te gustó este artículo?

Únete a nuestro canal de Telegram para estar al tanto de todo nuestro contenido oficial y exclusivo .

Publicaciones relacionadas

Cerrar
Cerrar

Bloqueador de anuncios detectado

Por favor, considere ayudarnos desactivando su bloqueador de anuncios