Telegram és una coneguda aplicació de missatgeria mòbil, en molts aspectes igual que WhatsApp, que va aparèixer abans. Tanmateix, aquesta aplicació té moltes altres funcionalitats que, juntament amb la gran quantitat d'usuaris que té, la converteixen en una aplicació de comunicació singular.
Una d'aquestes funcionalitats són els bots, que són robots – com el seu nom indica – o programes automàtics que poden interactuar amb l'usuari en una gran quantitat d'escenaris. Per exemple, @Pollbot et permet crear enquestes perquè els membres d'un grup votin a favor d'una opció o d'una altra. Un altre exemple diferent és @APODNASA_bot , que permet obtenir la imatge astronòmica del dia de la NASA, entre diverses funcionalitats més.
Primers passos amb BotFather
Per crear un bot, cal tenir un compte de Telegram i tenir-lo instal·lat en algun dispositiu. Aquest pas és obligatori perquè per crear bots cal fer servir un altre bot, concretament @BotFather que ens donarà l'identificador per afegir el nostre bot a la base de dades de bots de Telegram.
Per començar, hem d'obrir un xat nou amb @BotFather i escriure “/start”. Els bots poden tenir diferents ordres, que s'executen amb una barra inclinada (“/”) i l'ordre. Es pot obrir la llista d'ordres prement el botó del costat de les emoticones, la icona del qual també és la barra inclinada. En el nostre cas, per crear un bot nou escrivim “/newbot”.
Ens demanarà diverses dades per identificar el nostre bot. La primera és el nom del bot, no el que es mostra en pantalla sinó l'identificador, el que va després de “@”, com els usuaris de Twitter, per exemple. Aquest nom ha de tenir el sufix “bot”; si no l'escrivim seguint aquesta regla, ens donarà un missatge d'error fins que posem un nom vàlid.
IMPORTANT
Tot seguit de posar un nom vàlid, ens retornarà un missatge amb un testimoni, que és únic i necessari per accedir a l'API de Telegram i és molt important no compartir-lo amb ningú. Si el testimoni s'ha vist compromès, podem generar-ne un altre amb l'ordre /revoke, que invalidarà l'anterior.
Ara és útil canviar alguns paràmetres del nostre bot per fer-lo més “bonic” de cara a l'usuari, com ara donar-li un nom amb “/setname”, una descripció (“/setdescription”) o una imatge (“/setuserpic”).
Començar a programar
En aquest apunt farem servir Python en la versió 2, per la qual cosa es recomana un coneixement bàsic d'aquest llenguatge i de l'allotjament d'aplicacions en VPS.
Abans de començar hem d'instal·lar un paquet per poder-lo importar al nostre programa. S'instal·la amb pip. En sistemes basats en Debian o Ubuntu executa
# apt-get install python3 python3-pip python3-venv. Com que les versions recents de Debian i Ubuntu no permeten instal·lar paquets amb pip directament al sistema, es recomana fer servir un entorn virtual:
# python3 -m venv venv # source venv/bin/activate # pip install pyTelegramBotAPI
Creem un fitxer nou, per exemple main.py, i hi afegim les línies següents:
import telebot # Afegir les biblioteques necessàries
token = "" # Substituir pel que s'ha obtingut a l'apartat anterior
bot = telebot.TeleBot(token) # Inicialitzar el bot
@bot.message_handler(commands=["start"])
def handle_start(message):
bot.reply_to(message, "Hola mundo")
bot.infinity_polling()Com es pot observar en el codi anterior, s'ha creat un bot que, quan es faci servir l'ordre /start (la predeterminada per iniciar el bot), respongui a l'usuari __Hola mundo__. Per provar que funciona de manera local, cal executar el fitxer (`python3 main.py`) i accedir al bot des de Telegram.
Les ordres (que s'envien al bot amb la sintaxi “/” + ordre) poden ser la paraula que vulguem. Per exemple, una funció per enviar un vídeo de YouTube seria la següent quan s'executa l'ordre /video:
@bot.message_handler(commands=["video"])
def handle_video(message):
bot.reply_to(message, "https://www.youtube.com/watch?v=wjU8j2bj3RY")Hi ha infinitat de funcions més predefinides per fer servir; les més habituals als xats són:
- send_message(chatid, text): en lloc de respondre a un missatge anterior com en els exemples anteriors, només envia un missatge a l'usuari.
- send_photo(chatid, photo): envia una foto a l'usuari, que s'ha d'haver processat en python amb l'ordre `photo = open(‘/tmp/photo.png’, ‘rb’)`, tot i que també és possible fer servir biblioteques com Pillow.
- send_audio(chatid, audio): envia un àudio, que s'ha d'haver obert de la mateixa manera que la foto.
- send_location(chatid, lat, lng): envia un mapa de Google Maps amb un marcador al punt indicat mitjançant la latitud i la longitud.
Les altres funcions es poden consultar a la documentació de pyTelegramAPI o directament a la documentació de Telegram.
Com es veu a la barra d'enviament de missatges de Telegram, és possible mostrar les ordres disponibles prement el botó “/”. Per fer-ho, hem de crear una llista d'ordres, ja que el bot no les agafa automàticament del nostre codi. Per fer-ho, ho hem d'activar amb BotFather i l'ordre /setcommands.
Servidor
Els bots de Telegram s'executen a la banda del servidor, no als dispositius de l'usuari. Els hem d'allotjar en una plataforma web com ara un VPS (a https://clouding.io/ per exemple). No cal reservar-los gaire CPU, RAM ni disc dur, ja que en general són lleugers, tot i que, si es reben moltes peticions alhora, pot ser aconsellable augmentar la CPU, sobretot si es connecten a altres servidors o han de processar moltes dades.
En un sistema GNU/Linux s'executen perfectament. Per fer-ho, hem de tenir instal·lats els paquets següents; executeu l’ordre pip dins de l’entorn virtual:
# apt-get update
# apt-get install python3 python3-pip python3-venv screen
# pip install pyTelegramBotAPI # dentro del entorno virtualDesprés d'haver instal·lat tots els paquets cal fer servir __screen__ per mantenir el bot esperant els usuaris:“`screen -S mybotpython main.py“`
I ja estaria tot configurat. Per aturar l'execució d'un bot, només cal executar `screen -r mybot`.