dissabte, 13 de gener de 2018

Bot Telegram 1: primers pasos

Avui canviarem de tema: farem un bot de telegram.
I que te a veure això amb el BI? Doncs a priori no massa, però com que estarà fet amb python podem posar-li una BBDD i uns gràfics i ja ho podem donar per bo.

Com funciona un bot de telegram?

Telegram fa d'intermediari entre el nostre mòbil i una aplicació que ha d'estar corrent en un servidor. En el nostre cas l'aplicació estarà feta en Python i el servidor serà una Raspberry Pi. Utilitzarem també una BBDD en SQLite ja que per aquesta prova de concepte no fa falta grans recursos, però el servidor en comptes d'una Raspberry pdria ser molt més gros i el SGBD també podrem triar el que més ens agradi.


Telegram només fa de cua de missatgeria entre dispositius. S'ha de tenir en compte que l'espai que ens dedica Telegram per guardar els missatges que s'envien és limitat i pot ser que es perdin missatges.



El primer que hem de fer per crear el nostre bot de Telegram es afegir al BotFather. Aquest bot ens permetrà obtenir les claus per poder crear el nostre bot.
Per crear un bot hem d'executar la comanda: /newbot i escollir un nom i el nom d'usuari.

Aquestes comandes en retornaran un token que és el que ens servirà per identificar la nostra aplicació.

Amb altres comandes com /setdescription o /setuserpic es poden configurar descipcions, imatge de perfil, etc per que quedi més bonic. Amb la comanda /help podeu veure les comandes disponibles.

Ara hem de definir comandes per al nostre bot. Per defecte està definit l'start, però està bé redefinir-lo per que surti com a opció disponible. Nosaltres només utiltzarem l'start, la resta ho farem a través de menus.



Si entrem en el nostre bot ja veiem que surt com a comanda disponible /start

Anem a fer l'aplicació per que es connecti al bot. Anirem a la Raspberry Pi. Utilitzarem Python 2, compte que amb Python 3 pot ser que hi hagi llibreries que no funcionin!
Instal·larem les següents llibreries. Pot ser que alguna no la fem servir en el primer moment, però ens serà útlil a la llarga:
    pip install telebot
    pip install pyTelegramBotAPI
    pip install python-telegram-bot
    #matplotlib: Per fer gràfics en python
    pip install matplotlib
    #per posar emoticones al text
    pip install emoji


Ara crearem un fitxer python dins de la nostra Raspberry Pi.



El codi ha de tenir els imports:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import text
import logging
import math
import matplotlib.pyplot as plt
import sqlite3 as lite
import telegram
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler, Filters



El TOKEN:

TOKEN = 'El token que ens ha retornat el BotFather'

Diverses funcions que ens serviran per interactuar i que després ja veurem com s'invocaran:
"""
Log Errors caused by Updates.
"""
def error(bot, update, error):
    logger.warning('Update "%s" caused error "%s"', update, error)

"""
Start
"""   
def start(bot, update):
    print("Ja som dins")
    keyboard = [[InlineKeyboardButton("El meu primer BOT", callback_data='IRES'),
                 InlineKeyboardButton("Un altre botó per pantalla", callback_data='CRES')],[InlineKeyboardButton("El tercer botó", callback_data='ICEN')]]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('Trieu una opció:',reply_markup=reply_markup)   

"""
Accions amb els inline buttons
"""
def button(bot, update):
    pass

"""
Accions amb el text escrit
"""   
def other(bot, update):
    pass
           

i un main:
def main():
    updater = Updater(TOKEN)
   
    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CallbackQueryHandler(button))
    updater.dispatcher.add_handler(MessageHandler(Filters.text, other))
    updater.dispatcher.add_error_handler(error)
    # inicia el Bot
    updater.start_polling()
    #manté el bot actiu mentre no el matem
    updater.idle()


if __name__ == '__main__':
    main()



En el main és on creem l'updater amb el token que ens permetrà interaccionar amb el bot.
Després afegim handlers. N'hi ha de 3 tipus:
  • CommandHandler:  funció quan executo una comanda de Telegram (les que comencen per /). En el nostre cas quan posem /start es cridarà a la funció start
  • CallbackQueryHandler: funció quan premo un botó dels menús interns de Telegram (els InlineKeyboardButton que hi ha a la funció start). Quan els premi aniré a la funció button. En un proper post ja veurem com identificar-los.
  • MessageHandler: funció quan escric a Telegram text pla. Quan enviï text pla es cridarà a la funció other.
També hem definit un error_handler per que ens caci els errors i ja podem invocar l'start_poolling per a iniciar el bot i l'idle per que no acabi el programa si no el matem.

A la funció start hem definit un keyboard per pantalla i també farem un print per línia de comandes.
Anem a veure com funciona:


En la imatge veiem com ens ha pintat el teclat a la pantalla de telegram i també ens ha fet un print per línia de comandes indicant que ha entrat a l'start.

En propers posts podrem veure com anar fent una app amb que puguem interaccionar amb els usuaris.





Cap comentari:

Publica un comentari a l'entrada