له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول

الکساندر کوریوکین ما دې پلي کولو ته اړ کړ GeXoGeN د هغه د خپرولو سرهد مایکروټیک په کارولو سره د ریموټ کمپیوټر په وړیا توګه چالان کول ، پرته له SMS او بادونو پرته".

او د کریل کازاکوف لخوا د VK یوې ډلې کې یوه تبصره:

هو، دا په بشپړه توګه خوندي نه دی. زه به د ټیلیګرام بوټ ولیکم چې یوازې زما د حساب څخه د فعالولو امرونه مني.

ما پریکړه وکړه چې دا ډول بوټ ولیکم.

نو، لومړی کار دا دی چې په ټیلیګرام کې بوټ جوړ کړئ.

  • موږ په لټون کې د @botfather په نوم یو حساب پیدا کوو
  • د سکرین په ښکته کې د Start تڼۍ باندې کلیک وکړئ
  • بیا موږ هغه ته کمانډ / نوی بوټ لیکو

بیا موږ دوه ساده پوښتنو ته ځواب ورکوو:

  • لومړۍ پوښتنه د هغه بوټ نوم دی چې رامینځته کیږي. MyMikrotikROuter
  • دوهمه پوښتنه د بوټ جوړیدو مستعار نوم دی (باید د بوټ سره پای ته ورسیږي) MikrotikROuter_bot

په ځواب کې، موږ به زموږ د بوټ نښه ترلاسه کړو، زما په قضیه کې دا دی:

د HTTP API ته د لاسرسي لپاره دا نښه وکاروئ: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول
بیا، تاسو اړتیا لرئ چې زموږ بوټ د نوم په لټون کې ومومئ @MikrotikROuter_bot او د Start تڼۍ کېکاږئ.

له هغې وروسته ، تاسو اړتیا لرئ براوزر خلاص کړئ او لاندې کرښه دننه کړئ:

 https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates

چیرته چې XXXXXXXXXXXXXXXXXX ستاسو د بوټ نښه ده.

لاندې ته ورته یوه پاڼه به خلاص شي:

له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول

موږ په دې کې لاندې متن موندلی شو:

"chat":{"id":631290,

نو، موږ د مایکروټیک لپاره د سکریپټونو لیکلو لپاره ټول اړین معلومات لرو، یعنې:

د بوټ نښه: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

د چټ ID چیرې چې هغه باید ولیکئ: 631290

د چک کولو لپاره، موږ کولی شو د براوزر له لارې لاړ شو:

https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test

پایله باید ترلاسه شي:

له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول

زموږ د اسانتیا لپاره، موږ به سمدلاسه د بوټو لپاره کمانډونه اضافه کړو:

د نوم سره د حساب موندل @botfather
بیا موږ هغه ته یو حکم لیکو / setcommands

  • هغه به پوښتنه وکړي چې کوم بوټ

موږ لیکو:
@MikrotikROuter_bot

امرونه اضافه کړئ:

  • helloworld< — په چیٹ 1 کې د ازموینې پیغام
  • په چیټ 2 کې د دې کاري ازموینې پیغام
  • wolmypc- زما کمپیوټر راویښ کړئ

اوس که تاسو په چیٹ کې "/" ټایپ کړئ، تاسو باید ترلاسه کړئ:

له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول

اوس راځئ چې مایکرو ټیک ته لاړ شو.

RouterOS د ftp یا http / https له لارې د فایلونو کاپي کولو لپاره د کنسول افادیت لري، دا یوټیلیټ د fetch په نوم یادیږي، دا هغه څه دي چې موږ به یې وکاروو.

خلاص ترمینځ او داخل کړئ:

/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no

مهرباني وکړئ په MikroTik کې په یاد ولرئ چې تاسو ورته اړتیا لرئ ""د نښې څخه د تیښتې لپاره"?په URL کې.

پایله باید ترلاسه شي:

له ټیلیګرام څخه د مایکروټیک سکریپټونو لرې فعال کول

اوس راځئ چې سکریپټونو ته لاړ شو:

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}

کار کوي

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"

د سم میک او انٹرفیس نوم مشخص کول مه هیروئ، په بیله بیا د بوټ-ټوکن او chat_id.

اوس زه به لږ څه تشریح کړم چې دوی څه کوي:

د "helloworld" سکریپټ یو پیغام لیږي: "سلام، نړۍ!" د بوټ سره زموږ خبرو اترو ته.
د "خپل کار کولو" سکریپټ یو پیغام لیږي: "ټیسټ سم، دا کار کوي!" د بوټ سره زموږ خبرو اترو ته.
دا سکریپټونه د ښودلو موخو لپاره دي.
ما د "wolmypc" سکریپټ د یو احتمالي تطبیق په توګه اضافه کړ.
د سکریپټ په اجرا کولو سره، بوټ به چیٹ ته "ول اوک" ولیکي.
په حقیقت کې، تاسو کولی شئ په بشپړه توګه هر سکریپټ چل کړئ.

دنده جوړه کړئ:

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

د لوستلو وړ لیددا روښانه نده چې ولې، مګر د کاري سکریپټ څخه دا نړیوال معلومات نه افشا کوي، سکریپټ اضافه کړي کله چې سیسټم بوټ شي.
د ټیلیګرام پیل کول

: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; 
} 

دا څنګه کار کوي؟

زموږ "د ترلاسه کولو" پیغامونه په هر 30 ثانیو کې ډاونلوډ کړئ، بیا د موندلو لپاره پارس کړئ update_id (د پیغام شمیره) او متن (زموږ ټیمونه) او chat_id . په ډیفالټ ډول ، getUpdates له 1 څخه تر 100 پیغامونو پورې ښیې ، د اسانتیا لپاره ، د کمانډ لوستلو وروسته ، موږ پیغام حذف کوو. د ټیلیګرام api وايي چې د پیغام لوستلو لپاره تاسو د پیغام شمیره + 1 ته اړتیا لرئ

/getUpdates?offset=update_id + 1

ټول په Mikrotik rb915 RouterOS 6.37.1 کې ازمول شوي
که تاسو په یوځل کې ډیری کمانډونه واستوئ ، نو دا به ټول د 30 ثانیو وقفې سره په بدل کې اجرا شي.

PS د دې مفکورې لپاره کریل کازاکوف او زما ملګري الکساندر څخه د سکریپټونو سره د مرستې لپاره ډیره مننه.

مرجع

habrahabr.ru/post/313794
1spla.ru/index.php/blog/telegram_bot_for_mikrotik
core.telegram.org/bots/api
wiki.mikrotik.com/wiki/Manual: سکریپټ

تازه:

03:11:16

ښه شوي سکریپټونه:

د chat_id لپاره چک اضافه شوی
د احمق په لټه کې، که څوک زموږ بوټ ته لیکي، هغه به ورته ځواب ورکړي: "زه له تاسو سره خبرې نشم کولی. "، په ورته ډول به موږ ته ځواب ووايي که دا قومانده ونه پیژني.
د قوماندې اجرا کولو وروسته، بوټ د چیٹ غړیتوب لغوه کوي (د wolmypc سکریپټ وګورئ)

DUP

سره وموندل شو 7Stuntman7 دا چې د پورته ~ 14 پیغامونو سره فایل نور د موندلو کمانډ (Mikrotik محدودیتونه) لخوا نه پروسس کیږي. له همدې امله، په راتلونکي کې، زه به سکریپټ لوا ته بدل کړم، مننه 7Stuntman7 د دې لپاره، زه د لوا په اړه نه پوهیږم.

UPD 08.12.2016/XNUMX/XNUMX

په ټیلیګرام کې، په ښکاره ډول، دوی د getUpdate "اخراج" یو څه بدل کړی. اوس په اصلي سکریپټ کې تاسو اړتیا لرئ د پیغام آفسیټ له 2 څخه تر 1 پورې سم کړئ

بدل کړئ

:local message [:pick $content ($startLoc + 2) $endLoc] ;

заменить на :

:local message [:pick $content ($startLoc + 1) $endLoc] ;

سرچینه: www.habr.com