Bots de Telegram des del shell de linux/mac i powershell
Tocatejant un codi fet amb C# he vist que al acabar enviava un missatge per un bot de telegram. He trobat ridiculament senzill així que he dicidit buscar els diversos modes per poder fer-ho des de batch scripts.
Bàsicament el que fem és cridar una URL adjuntant uns POST, aquests post enviarem el text del missatge, enviarem per formatar el text (negreta, cursiva) i l’identificador de chat.
Si no sabeu com trobar l’identificador dedueixo que encara no heu creat el vostre Bot i, per tant, tampoc teniu el token per poder comunicar amb ell. Així doncs passem a explicar com aconseguir-los:
Gran part d’aquesta documentació la trobeu al lloc oficial: https://core.telegram.org/bots#botfather
En aquest lloc que acabo de mencionar tenim un link al botfather (un acudit amb “El padrino” “The Godfather”) en la que ens diuen que li obrim un xat per tal d’obtenir mes informació: https://telegram.me/botfather
Un cop obert, presionem start (com solen funcionar els bots a telegram) i utilitzem o fem click a /newbot per tal de comenar el procés i obtenir el nostre bot. Primer ens preguntarà quin nom volem que tingui el nostre Bot, el que sortirà representat ens els xats i llavors, ens demanarà quin nom d’usuari tindrà. Com que tots som molt espavilats i segurament creem elmeunickbot, suggereix que el nom d’usuari sigui elmeunick_bot però, en el meu cas ha fallat però això són figues d’un altre paner.
Un cop li hem donat els noms, ens assigna un token i ens recorda la importància d’aquests, que el guardem ben guardat i que no el perdem. Falta rès? Clar que sí, falta l’identificador de xat i per això abans hem d’iniciar un xat amb el nostre bot. En l’últim missatge de @botfather ens facilita també el link per obrir el xat t.me/elmeunick_bot (o el que us hagi acceptat…), al igual que amb els altres bots, prenem start (o enviem /start) i ja tindrem un xat obert amb ell. Ara toca obtenir l’odentificador i tindrem que anar al navegador i posar la següent direcció:
https://api.telegram.org/botelvostretoken/getUpdates
ULL! Si sou vius no cal que us aviso, però per si a un cas aneu amb embranzida i ja ewsteu fent copia i enganxa, heu de substituir elvostretoken per el token que us ha donat @botfather!
Un cop fet, us retorna una cadena de text Json (utilitzeu el visualitzador que mes us agradi) i localitzem l’entrada “chat” i el seu valor “id”:
"chat": {
"id": 123456789,
"first_name": "Pere Porter",
"username": "perebotero",
"type": "private"
}
En l’exemple que us poso, serà “123456789”, un cop ja tenim el token i l’identificador, sols caldà modificar els scripts per tal que funcionin al vostre gust. En tot cas, fem una dissecció del que hem de fer per tal d’enviar un missatge.
Com us he dit enviarem un POST DATA junt a la crida de la URL i podem fer-ho de diverses maneres, la més senzilla i ràpida, és en la mateixa adreça:
http://www.kamencesc.com/test?post1=valor&post2=23
Les dades que enviem son:
- post1 amb un valor de text “valor”
- post2 amb un valor numèric de 23
L’altre forma és identificant a part aquests valors, us presento els dos casos en tres scripts diferents.
Powershell
$MyToken = "987654321:AAFYBL1Q9vNBceeAJNDLNkRaFUaq5pVnqkc"
$chatID = 123456789
$Message = "Missatge des de ***Powershell***"
$Parse_mode = "Markdown"
$Response = Invoke-RestMethod -Uri "https://api.telegram.org/bot$($MyToken)/sendMessage?chat_id=$($chatID)&parse_mode=$($Parse_mode)&text=$($Message)"
Executem l’script canviant les nostres dades al gust i ja tindrem el nostre missatge en el xat. Així de puntetes, passem pel parse_mode que és el que ens permet fer servir negreta (amb el *** [tres estariscos] al principi i final del que volem posar en negreta) o en cursiva (amb ___ [tres guions baixos] al principi i final). Us deixo un enllaç a la documentació ja que hi ha més opcions per poder utilitzar fins i tot codi html.
https://core.telegram.org/bots/api#formatting-options
Linux – wget
chat_id="123456789"
token="987654321:AAFYBL1Q9vNBceeAJNDLNkRaFUaq5pVnqkc"
bot_text="Missatge des de linux amb ***wget***"
wget --post-data="chat_id=$chat_id&parse_mode=Markdown&text=$bot_text" https://api.telegram.org/bot$token/sendMessage
Com podeu veure, aqui indiquem la POST DATA amb anterioritat i no enganxat amb la URL com el cas del Powershell, però el resultat és el mateix.
Linux – curl
chat_id="123456789"
token="987654321:AAFYBL1Q9vNBceeAJNDLNkRaFUaq5pVnqkc"
bot_text="Missatge des de linux amb ***wget***"
curl -s -X POST https://api.telegram.org/bot$token/sendMessage -d chat_id=$chat_id -d pase_mode="Markdown" -d text="$bot_text" > /dev/null
En el cas de curl, indicarem cada POST DATA amb -d nom=valor totes per separat. Finalment, per tal de no obtenir un valor de resposta, posetm direccionem la sortida cap a /dev/null (recordeu treure això si esteu testejant i no us arriba el missatge).
Aquests són les tres formes que podem trobar per enviar missatges al nostre bot des batch scripting amb shell i powershell, per tant Linux (necesitem wget o curl), Mac (necessitem wget o curl)i Windows.
Espero que us serveixi, és ideal per fer crides des de crontab cada x temps amb valors de lectura amb una raspberry pi per exemple, o al finalitzar scripts rutinaris i rebre un petit informe al final d’aquests.
En un altre post mirarem com enviar documents! Estigueu al cas!