Giduso ako ni Alexander Koryukin niini nga pagpatuman
Ug usa ka komento sa usa sa mga grupo sa VK ni Kirill Kazakov:
Oo, dili gyud kini sigurado. Mas gusto nako nga mosulat ug telegram bot nga modawat lang sa mga activation commands gikan sa akong account.
Nakahukom ko sa pagsulat sa ingon nga bot.
Busa, ang unang butang nga kinahanglan nimong buhaton mao ang paghimo og bot sa telegrama.
- Among nakit-an sa pagpangita ang usa ka account nga adunay ngalan nga @botfather
- I-klik ang Start button sa ubos sa screen
- Unya gisulatan namo siya sa sugo /newbot
Unya tubagon namo ang 2 ka yanong pangutana:
- Ang unang pangutana mao ang ngalan sa bot nga gibuhat MyMikrotikROuter
- Ang ikaduhang pangutana mao ang angga sa bot nga gihimo (kinahanglan matapos sa bot) MikrotikROuter_bot
Agig tubag, makadawat kami sa timaan sa among bot, sa akong kaso kini:
Gamita kini nga timaan aron ma-access ang HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Unya, kinahanglan nimo pangitaon ang among bot sa pagpangita pinaagi sa ngalan @MikrotikROuter_bot ug i-klik ang Start button.
Human niini, kinahanglan nimong ablihan ang imong browser ug isulod ang mosunod nga linya:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Diin ang XXXXXXXXXXXXXXXXXX mao ang timaan sa imong bot.
Usa ka panid nga susama sa mosunod ang moabli:
Atong makita ang mosunod nga teksto niini:
"chat":{"id":631290,
Busa, kita adunay tanan nga gikinahanglan nga impormasyon sa pagsulat sa mga script alang sa Mikrotik, nga mao:
Token sa bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID kung asa niya isulat: 631290
Aron masusi, makaadto kami sa browser:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Kinahanglan nimo makuha ang resulta:
Para sa atong kasayon, idugang dayon nato ang mga sugo para sa bot:
Pagpangita usa ka account nga adunay ngalan @botfather
Unya gisulatan namo siya ug sugo / setcommands
- Mangutana siya kung unsang bot
Gisulat namo:
@MikrotikROuter_bot
Pagdugang mga sugo:
- helloworld< β Test message sa chat 1
- kini nagtrabaho - Test Message sa chat 2
- wolmypc - pagmata sa akong PC
Karon kung imong gi-type ang "/" sa chat, kinahanglan nimo makuha:
Karon magpadayon kita sa MikroTik.
Ang RouterOS adunay console utility para sa pagkopya sa mga file pinaagi sa ftp o http/https, ang utility gitawag ug fetch, nga maoy atong gamiton.
Bukas terminal ug pagsulod:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Palihug timan-i nga ang MikroTik nagkinahanglan ""aron makalingkawas sa timaan"?"sa URL.
Kinahanglan nimo makuha ang resulta:
Karon magpadayon kita sa mga script:
helloworld
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}
pagtrabaho niini
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"
Ayaw kalimti nga ipiho ang husto nga ngalan sa mac ug interface, ingon man ang bot-token ug chat_id.
Karon ipasabut nako gamay kung unsa ang ilang gibuhat:
Ang "helloworld" nga script nagpadala sa mensahe: "Hello, kalibutan!" sa among chat sa bot.
Ang "nagtrabaho" nga script nagpadala sa mensahe: "Sulayi ang OK, Nagtrabaho kini!" sa among chat sa bot.
Kini nga mga script alang sa pagpakita sa trabaho.
Gidugang nako ang script nga "wolmypc" isip usa sa mga posible nga pagpatuman.
Kung nahuman na ang script, isulat sa bot ang "wol OK" sa chat.
Sa tinuud, mahimo nimong ipadagan ang bisan unsang script.
Paghimo og buluhaton:
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
Makita nga mabasaDili klaro kung ngano, apan wala kini nagpahibalo sa global nga datos gikan sa nagtrabaho nga script, ang script gidugang kung ang sistema nag-boot.
Telegram-pagsugod
: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") ;
telegrama
: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;
}
Unsa nga paagi nga kini nga buhat
Among gi-download ang among "getUpdates" nga mga mensahe matag 30 segundos, dayon i-parse kini aron mahibal-an update_id (numero sa mensahe) ug teksto (among mga team) ug chat_id . Sa kasagaran, ang getUpdates nagpakita gikan sa 1 ngadto sa 100 ka mga mensahe; alang sa kasayon, human sa pagbasa sa sugo, ang mensahe matangtang. ang Telegram api nag-ingon nga aron mabasa ang usa ka mensahe kinahanglan nimo ang numero sa mensahe + 1
/getUpdates?offset=update_id + 1
Ang tanan gisulayan sa Mikrotik rb915 RouterOS 6.37.1
Kung magpadala ka daghang mga sugo sa usa ka higayon, silang tanan ipatuman sa usag usa nga adunay gilay-on nga 30 segundos.
PS Daghang salamat kang Kirill Kazakov sa ideya ug sa akong higala nga si Alexander sa iyang tabang sa mga script.
mga pakisayran
upd:
03:11:16
Gipauswag nga mga script:
Gidugang nga tseke alang sa chat_id
Buang nga pagsulay, kung adunay magsulat sa among bot, kini motubag kaniya: "Dili ko makigsulti kanimo." β, motubag kanato sa samang paagi kon kini dili makaila sa sugo.
Sa pagpatuman sa sugo, ang bot nag-unsubscribe sa chat (tan-awa ang wolmypc script)
DUP
Nakaplagan uban sa
UPD 08.12.2016/XNUMX/XNUMX
Ang Telegram dayag nga nagbag-o sa getUpdate nga "tambutso" gamay. Karon sa panguna nga script kinahanglan nimo nga itul-id ang mensahe nga offset gikan sa 2 hangtod 1
mga pagbag-o
:local message [:pick $content ($startLoc + 2) $endLoc] ;
Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Source: www.habr.com