ٽيليگرام کان ميڪروٽڪ اسڪرپٽس جي ريموٽ چالو

اليگزينڊر ڪوريوڪن مون کي هن عمل تي زور ڏنو GeXoGeN هن جي اشاعت سانڪمپيوٽر تي ريموٽ موڙ مفت ۾، بغير ايس ايم ايس ۽ بغير بادل، Mikrotik استعمال ڪندي".

۽ وي ڪي گروپن مان هڪ ۾ هڪ تبصرو ڪريل ڪازاڪوف طرفان:

ها، اهو بلڪل محفوظ ناهي. مان بجاءِ هڪ ٽيليگرام بوٽ لکندس جيڪو صرف منهنجي اڪائونٽ مان ايڪٽيويشن ڪمانڊ قبول ڪري ٿو.

مون فيصلو ڪيو ته هڪ اهڙي بوٽ لکڻ.

تنهن ڪري، پهريون ڪم ڪرڻ آهي ٽيليگرام ۾ هڪ بوٽ ٺاهڻ.

  • اسان ڳولا ۾ هڪ اڪائونٽ ڳوليندا آهيون @botfather نالي
  • اسڪرين جي تري ۾ شروع بٽڻ تي ڪلڪ ڪريو
  • پوء اسان کيس حڪم / newbot لکندا

پوء اسان 2 سادي سوالن جا جواب ڏيون ٿا:

  • پهريون سوال اهو آهي ته بوٽ جو نالو ٺاهيو وڃي. MyMikrotikROuter
  • ٻيو سوال آھي بوٽ جو عرف نالو ٺاھيو پيو وڃي (بٽ سان ختم ٿيڻ گھرجي) MikrotikROuter_bot

جواب ۾، اسان کي اسان جي بوٽ جو ٽوڪن حاصل ڪنداسين، منهنجي صورت ۾ اهو آهي:

HTTP API تائين رسائي حاصل ڪرڻ لاءِ هي ٽوڪن استعمال ڪريو: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

ٽيليگرام کان ميڪروٽڪ اسڪرپٽس جي ريموٽ چالو
پوء، توهان کي اسان جي بوٽ کي ڳولڻ جي ضرورت آهي نالي جي ڳولا ۾ @MikrotikROuter_bot ۽ Start بٽڻ کي دٻايو.

ان کان پوء، توهان کي برائوزر کولڻ جي ضرورت آهي ۽ هيٺ ڏنل لائن داخل ڪريو:

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

جتي XXXXXXXXXXXXXXXXXX توهان جي بوٽ جو ٽوڪن آهي.

هيٺ ڏنل سان ملندڙ هڪ صفحو کلي ويندو:

ٽيليگرام کان ميڪروٽڪ اسڪرپٽس جي ريموٽ چالو

اسان کي ان تي هيٺيون متن ملن ٿا:

"chat":{"id":631290,

تنهن ڪري، اسان وٽ Mikrotik لاء اسڪرپٽ لکڻ لاء تمام ضروري معلومات آهي، يعني:

بوٽ ٽوڪن: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

چيٽ ID جتي هن کي لکڻ گهرجي: 631290

چيڪ ڪرڻ لاء، اسان برائوزر ذريعي وڃون ٿا:

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

نتيجو حاصل ڪرڻ گهرجي:

ٽيليگرام کان ميڪروٽڪ اسڪرپٽس جي ريموٽ چالو

اسان جي سهولت لاء، اسان فوري طور تي بوٽ لاء حڪم شامل ڪنداسين:

نالي سان هڪ اڪائونٽ ڳولڻ @botfather
پوء اسان کيس هڪ حڪم لکندا / سيٽ ڪامريڊ

  • هو پڇندو ته ڪهڙو بوٽ

اسين لکون ٿا:
@MikrotikROuter_bot

حڪم شامل ڪريو:

  • helloworld< - چيٽ 1 تي ٽيسٽ پيغام
  • چيٽ 2 تي ڪم ڪندڙ-ٽيسٽ پيغام
  • wolmypc- منهنجي PC کي جاڳايو

ھاڻي جيڪڏھن توھان ٽائپ ڪريو "/" چيٽ ۾، توھان کي حاصل ڪرڻ گھرجي:

ٽيليگرام کان ميڪروٽڪ اسڪرپٽس جي ريموٽ چالو

هاڻي اچو ته MikroTik ڏانهن وڃو.

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"

صحيح ميڪ ۽ انٽرفيس جو نالو بيان ڪرڻ نه وساريو، گڏوگڏ bot-token ۽ chat_id.

هاڻي مان ٿورڙي وضاحت ڪندس ته اهي ڇا ڪندا آهن:

"helloworld" اسڪرپٽ هڪ پيغام موڪلي ٿو: "هيلو، دنيا!" بوٽ سان اسان جي چيٽ تي.
"itworking" اسڪرپٽ هڪ پيغام موڪلي ٿو: "ٺيڪ ٽيسٽ، اهو ڪم ڪري رهيو آهي!" بوٽ سان اسان جي چيٽ تي.
اهي رسم الخط نمائش جي مقصدن لاءِ آهن.
مون "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") ;

تار

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

ڪيئن هن ڪم ڪندو

اسان جا "getUpdates" پيغام هر 30 سيڪنڊن ۾ ڊائون لوڊ ڪريو، پوء ڳولڻ لاء پارس ڪريو update_id (پيغام نمبر) ۽ متن (اسان جون ٽيمون) ۽ chat_id . ڊفالٽ طور، GetUpdates ڏيکاري ٿو 1 کان 100 پيغامن تائين، سهولت لاءِ، حڪم پڙهڻ کان پوءِ، اسان پيغام کي حذف ڪريون ٿا. Telegram api چوي ٿو ھڪڙو پيغام پڙھڻ لاءِ توھان کي ضرورت آھي پيغام نمبر + 1

/getUpdates?offset=update_id + 1

Mikrotik rb915 RouterOS 6.37.1 تي سڀ آزمائشي
جيڪڏهن توهان هڪ ئي وقت ڪيترائي حڪم موڪليندا، اهي سڀئي 30 سيڪنڊن جي وقفي سان بدلي ۾ عمل ڪيا ويندا.

پي ايس ان خيال لاءِ ڪريل ڪازاڪوف ۽ منهنجي دوست اليگزينڊر جي لکت ۾ مدد لاءِ تمام گهڻيون مهربانيون.

حوالن

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

upd:

03:11:16

سڌريل اسڪرپٽ:

chat_id لاءِ چيڪ شامل ڪيو ويو
بيوقوف جي چڪاس ڪندي، جيڪڏهن ڪو اسان جي بوٽن ڏانهن لکي ٿو، ته هو کيس جواب ڏيندو: "مان توهان سان ڳالهائي نٿو سگهان. "، ساڳئي طرح اسان کي جواب ڏيندو جيڪڏهن اهو حڪم نه سڃاڻي.
حڪم تي عمل ڪرڻ کان پوء، بوٽ چيٽ جي رڪنيت ختم ڪري ٿو (ڏسو wolmypc اسڪرپٽ)

يو ايس ڊي

سان مليو 7 اسٽنٽ مين7 مٿي ڏنل ~ 14 پيغامن سان گڏ هڪ فائل هاڻي ڳولا ڪمانڊ (Mikrotik limitations) جي ذريعي پروسيس نه ڪئي وئي آهي. تنهن ڪري، مستقبل ۾، مان لکت کي لوا ۾ تبديل ڪندس، مهرباني 7 اسٽنٽ مين7 ان لاءِ مون کي لوا جي خبر نه هئي.

اپ ڊي ڊي 08.12.2016

ٽيليگرام ۾، ظاهري طور تي، انهن کي ٿورڙي تبديل ڪيو ويو "اخراج" جي getUpdate. ھاڻي مين اسڪرپٽ ۾ توھان کي 2 کان 1 تائين پيغام آفسيٽ کي درست ڪرڻ جي ضرورت آھي

تبديل ڪريو

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

заменить на :

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

جو ذريعو: www.habr.com