Alexander Koryukin imbuttatni għal din l-implimentazzjoni
U kumment f'wieħed mill-gruppi VK minn Kirill Kazakov:
Iva, mhu sigur xejn. Nippreferi nikteb bot telegramma li jaċċetta biss kmandi ta 'attivazzjoni mill-kont tiegħi.
Iddeċidejt li nikteb tali bot.
Għalhekk, l-ewwel ħaġa li għandek tagħmel hija li toħloq bot fit-telegramma.
- Fit-tfittxija nsibu kont bl-isem @botfather
- Ikklikkja fuq il-buttuna Start fil-qiegħ tal-iskrin
- Imbagħad niktbuh il-kmand / newbot
Imbagħad inwieġbu 2 mistoqsijiet sempliċi:
- L-ewwel mistoqsija hija l-isem tal-bot li għandu jinħoloq. MyMikrotikROuter
- It-tieni mistoqsija hija l-laqam tal-bot li qed jinħoloq (għandu jispiċċa bil-bot) MikrotikROuter_bot
Bi tweġiba, se nirċievu t-token tal-bot tagħna, fil-każ tiegħi huwa:
Uża dan it-token biex taċċessa l-API HTTP: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Imbagħad, trid issib il-bot tagħna fit-tfittxija bl-isem @MikrotikROuter_bot u agħfas il-buttuna Start.
Wara dan, trid tiftaħ il-browser u daħħal il-linja li ġejja:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Fejn XXXXXXXXXXXXXXXXXX huwa t-token tal-bot tiegħek.
Se tiftaħ paġna simili għal din li ġejja:
Insibu t-test li ġej fuqu:
"chat":{"id":631290,
Għalhekk, għandna l-informazzjoni kollha meħtieġa biex niktbu skripts għal Mikrotik, jiġifieri:
Token tal-bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID fejn għandu jikteb: 631290
Biex niċċekkjaw, nistgħu ngħaddu mill-browser:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Għandu jikseb ir-riżultat:
Għall-konvenjenza tagħna, aħna se nżidu immedjatament kmandi għall-bot:
Sib kont b'isem @botfather
Imbagħad niktbulu kmand / setcommands
- Huwa se jistaqsi liema bot
Aħna niktbu:
@MikrotikROuter_bot
Żid il-kmandi:
- helloworld< — Test messaġġ fuq chat 1
- itsworking-Messaġġ tat-test fuq iċ-chat 2
- wolmypc-tqum il-PC tiegħi
Issa jekk ittajpja "/" fiċ-chat, għandek tikseb:
Issa ejja ngħaddu għal MikroTik.
RouterOS għandu utilità console għall-ikkupjar ta 'fajls permezz ta' ftp jew http / https, l-utilità tissejjaħ fetch, li huwa dak li se nużaw.
Miftuħ terminal u daħħal:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Jekk jogħġbok innota li MikroTik jeħtieġ "» biex taħrab is-sinjal «?' fil-URL.
Għandu jikseb ir-riżultat:
Issa ejja ngħaddu għall-iskripts:
Hello dinja
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}
il-ħidma tiegħu
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"
Tinsiex tispeċifika l-isem korrett tal-mac u l-interface, kif ukoll bot-token u chat_id.
Issa se nispjega ftit x'jagħmlu:
L-iskrittura "helloworld" tibgħat messaġġ: "Hello, world!" għaċ-chat tagħna mal-bot.
L-iskritt "itsworking" jibgħat messaġġ: "Test OK, qed jaħdem!" għaċ-chat tagħna mal-bot.
Dawn l-iskripts huma għal skopijiet ta’ dimostrazzjoni.
Żidt l-iskrittura "wolmypc" bħala waħda mill-implimentazzjonijiet possibbli.
Mal-eżekuzzjoni tal-iskrittura, il-bot se jikteb "wol OK" fiċ-chat.
Fil-fatt, tista 'tmexxi assolutament kwalunkwe skript.
Oħloq kompitu:
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
Veduta li tista' tinqaramhuwiex ċar għaliex, iżda mill-iskrittura tax-xogħol ma tiżvelax dejta globali, żiedet l-iskrittura meta s-sistema boots.
Istartjar Telegram
: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") ;
Telegramma
: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;
}
Kif taħdem din
Niżżel il-messaġġi tagħna "getUpdates" kull 30 sekonda, imbagħad analizza biex issir taf update_id (numru tal-messaġġ) u test (it-timijiet tagħna) u chat_id . B'mod awtomatiku, getUpdates juri minn 1 sa 100 messaġġ, għall-konvenjenza, wara li taqra l-kmand, aħna nħassru l-messaġġ. Telegram api jgħid biex taqra messaġġ għandek bżonn in-numru tal-messaġġ + 1
/getUpdates?offset=update_id + 1
Kollha ttestjati fuq Mikrotik rb915 RouterOS 6.37.1
Jekk tibgħat ħafna kmandi f'daqqa, dawn kollha jiġu esegwiti wara xulxin b'intervall ta '30 sekonda.
PS Grazzi ħafna lil Kirill Kazakov għall-idea u lil ħabib tiegħi Alexander għall-għajnuna fl-iskripts.
referenzi
upd:
03:11:16
Skripts imtejba:
Miżjud kontroll għal chat_id
Iċċekkja għal iblah, jekk xi ħadd jikteb lill-bot tagħna, huwa jwieġbu: "Ma nistax nitkellem miegħek. “, bl-istess mod iwieġbuna jekk ma jagħrafx il-kmand.
Wara li tesegwixxi l-kmand, il-bot ineħħi l-abbonament għaċ-chat (ara l-iskrittura wolmypc)
DUP
Misjuba ma
UPD 08.12.2016/XNUMX/XNUMX
f'Telegram, apparentement, biddlu kemmxejn l-"egżost" ta 'getUpdate. issa fl-iskrittura prinċipali trid tikkoreġi l-offset tal-messaġġ minn 2 għal 1
bidliet
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Sors: www.habr.com