Alexander Koryukin nyurung aku kanggo implementasine iki
Lan komentar ing salah sawijining grup VK dening Kirill Kazakov:
Ya, ora aman. Aku luwih seneng nulis bot telegram sing mung nampa perintah aktivasi saka akunku.
Aku mutusaké kanggo nulis bot kuwi.
Dadi, sing kudu ditindakake yaiku nggawe bot ing telegram.
- Kita nemokake ing panelusuran akun sing jenenge @botfather
- Klik ing tombol Start ing sisih ngisor layar
- Banjur kita nulis marang printah / newbot
Banjur kita mangsuli 2 pitakonan prasaja:
- Pitakonan pisanan yaiku jeneng bot sing bakal digawe. MyMikrotikROuter
- Pitakonan kapindho yaiku jeneng julukan bot sing digawe (kudu dipungkasi karo bot) MikrotikROuter_bot
Kanggo nanggepi, kita bakal nampa token bot kita, ing kasusku yaiku:
Gunakake token iki kanggo ngakses HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Banjur, sampeyan kudu nemokake bot kita ing panelusuran kanthi jeneng @MikrotikROuter_bot banjur pencet tombol Mulai.
Sawise iku, sampeyan kudu mbukak browser lan ketik baris ing ngisor iki:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Ngendi XXXXXXXXXXXXXXXXXX minangka token bot sampeyan.
Kaca sing padha karo ing ngisor iki bakal mbukak:
Kita nemokake teks ing ngisor iki:
"chat":{"id":631290,
Dadi, kita duwe kabeh informasi sing dibutuhake kanggo nulis skrip Mikrotik, yaiku:
Token bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
ID chat ing ngendi dheweke kudu nulis: 631290
Kanggo mriksa, kita bisa mbukak browser:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Mesthi entuk asil:
Kanggo penak, kita bakal langsung nambah perintah kanggo bot:
Nemokake akun kanthi jeneng @bapak
Banjur kita nulis dhawuh marang dheweke / setcommands
- Dheweke bakal takon bot apa
Kita nulis:
@MikrotikROuter_bot
Tambah perintah:
- helloworld< — Pesen tes ing obrolan 1
- sing bisa digunakake-Pesen Tes ing obrolan 2
- wolmypc-tangi PCku
Saiki yen sampeyan ngetik "/" ing obrolan, sampeyan kudu entuk:
Saiki ayo pindhah menyang MikroTik.
RouterOS nduweni sarana konsol kanggo nyalin file liwat ftp utawa http / https, sarana kasebut diarani fetch, yaiku sing bakal digunakake.
Mbukak terminal lan ketik:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Elinga yen MikroTik butuh ""kanggo uwal saka tandha"?'ing URL.
Mesthi entuk asil:
Saiki ayo pindhah menyang skrip:
jancok
system script add name="helloworld" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Hello,world! " keep-result=no}
kerjane
system script add name="itsworking" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Test OK, it's Working " keep-result=no}
wolmypc
system script add name="wolmypc" policy=read source="/tool wol mac=XX:XX:XX:XX:XX:XX interface=ifnamer
n/tool fetch url="https://api.telegram.org/boXXXXXXXXXXXXXXXXXXX?chat_id=631290&text=wol OK" keep-resul
t=no"
Aja lali kanggo nemtokake jeneng mac lan antarmuka sing bener, uga bot-token lan chat_id.
Saiki aku bakal nerangake sethithik apa sing ditindakake:
Skrip "helloworld" ngirim pesen: "Halo, donya!" menyang obrolan kita karo bot.
Skrip "berfungsi" ngirim pesen: "Tes OK, Kerjane!" menyang obrolan kita karo bot.
Skrip iki kanggo tujuan demonstrasi.
Aku nambahake "wolmypc" script minangka salah siji saka implementasine bisa.
Sawise eksekusi skrip, bot bakal nulis "wol OK" ing obrolan.
Nyatane, sampeyan bisa mbukak script apa wae.
Nggawe tugas:
Telegram.src
/system scheduler
add interval=30s name=Telegram on-event=":tool fetch url=("https://api.telegr
am.org/".$botID."/getUpdates") ;r
n:global content [/file get [/file find name=getUpdates] contents] ;r
n:global startLoc 0;r
n:global endLoc 0;r
nr
n:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={r
nr
n:set startLoc [:find $content "update_id" $lastEnd ] ;r
n:set startLoc ( $startLoc + 11 ) ;r
n:local endLoc [:find $content "," $startLoc] ;r
n:local messageId ([:pick $content $startLoc $endLoc] + (1));r
n:put [$messageId] ;r
n:#log info message="updateID $messageId" ;r
nr
n:set startLoc [:find $content "text" $lastEnd ] ;r
n:set startLoc ( $startLoc + 7 ) ;r
n:local endLoc [:find $content "," ($startLoc)] ;r
n:set endLoc ( $endLoc - 1 ) ;r
n:local message [:pick $content ($startLoc + 2) $endLoc] ;r
n:put [$message] ;r
n:#log info message="message $message ";r
nr
n:set startLoc [:find $content "chat" $lastEnd ] ;r
n:set startLoc ( $startLoc + 12 ) ;r
n:local endLoc [:find $content "," $startLoc] ;r
n:local chatId ([:pick $content $startLoc $endLoc]);r
n:put [$chatId] ;r
n:#log info message="chatID $chatId ";r
nr
n:if (($chatId = $myChatID) and (:put [/system script find name=$messa
ge] != "")) do={r
n:system script run $message} else={:tool fetch url=("https://api.teleg
ram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't t
alk with you. ") keep-result=no} ;r
n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?
offset=$messageId") keep-result=no; r
n} r
n" policy=
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
start-date=nov/02/2010 start-time=00:00:00
add name=Telegram-startup on-event=":delay 5r
n:global botID "botXXXXXXXXXXXXXXXXXX" ;r
n:global myChatID "631290" ;r
n:global startLoc 0;r
n:global endLoc 0;r
n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates")
;" policy=
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon
start-time=startup
Tampilan sing bisa diwacaiku ora cetha kok, nanging saka script digunakake ora mbukak data global, ditambahaké script nalika sistem boots.
Telegram wiwitan
:delay 5
:global botID "botXXXXXXXXXXXXXXXXXX" ; token bot
:global myChatID "xxxxxx" ; chat_id
:global startLoc 0;
:global endLoc 0;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;
Telegram
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;
:global content [/file get [/file find name=getUpdates] contents] ;
:global startLoc 0;
:global endLoc 0;
:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={
:set startLoc [:find $content "update_id" $lastEnd ] ;
:set startLoc ( $startLoc + 11 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local messageId ([:pick $content $startLoc $endLoc] + (1));
:put [$messageId] ;
#:log info message="updateID $messageId" ;
:set startLoc [:find $content "text" $lastEnd ] ;
:set startLoc ( $startLoc + 7 ) ;
:local endLoc [:find $content "," ($startLoc)] ;
:set endLoc ( $endLoc - 1 ) ;
:local message [:pick $content ($startLoc + 2) $endLoc] ;
:put [$message] ;
#:log info message="message $message ";
:set startLoc [:find $content "chat" $lastEnd ] ;
:set startLoc ( $startLoc + 12 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local chatId ([:pick $content $startLoc $endLoc]);
:put [$chatId] ;
#:log info message="chatID $chatId ";
:if (($chatId = $myChatID) and (:put [/system script find name=$message] != "")) do={
:system script run $message} else={:tool fetch url=("https://api.telegram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't talk with you. ") keep-result=no} ;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?offset=$messageId") keep-result=no;
}
Carane ora karya iki
Download pesen "getUpdates" saben 30 detik, banjur parse kanggo ngerteni nganyari_id (nomer pesen) lan teks (tim kita) lan chat_id . Kanthi gawan, getUpdates nampilake saka 1 nganti 100 pesen, kanggo penak, sawise maca printah kasebut, kita mbusak pesen kasebut. Telegram api ujar manawa maca pesen sampeyan butuh nomer pesen + 1
/getUpdates?offset=update_id + 1
Kabeh dites ing Mikrotik rb915 RouterOS 6.37.1
Yen sampeyan ngirim akeh prentah bebarengan, kabeh bakal dieksekusi kanthi interval 30 detik.
PS Many thanks kanggo Kirill Kazakov kanggo idea lan kanca Alexander kanggo bantuan karo Tulisan.
referensi
upd:
03:11:16
Skrip sing luwih apik:
Ditambahake mriksa kanggo chat_id
Priksa wong bodho, yen ana sing nulis ing bot kita, dheweke bakal mangsuli: "Aku ora bisa ngomong karo sampeyan. ", padha bakal mangsuli kita yen ora ngenali printah.
Sawise nglakokake perintah kasebut, bot kasebut mandheg langganan obrolan (pirsani skrip wolmypc)
DUP
Ditemokake karo
UPD 08.12.2016/XNUMX/XNUMX
ing Telegram, ketoke, padha rada ngganti "knalpot" getUpdate. saiki ing skrip utama sampeyan kudu mbenerake offset pesen saka 2 dadi 1
ganti
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Source: www.habr.com