Фаъолсозии фосилавии скриптҳои Микротик аз Telegram

Александр Корюкин маро ба ин амалй тела дод GeXoGeN бо нашри худФурӯзони дурдасти компютер ройгон, бе SMS ва бе абрҳо, бо истифода аз Mikrotik".

Ва шарҳ дар яке аз гурӯҳҳои ВК Кирилл Казаков:

Бале, он тамоман бехатар нест. Ман мехоҳам як боти телеграмма нависам, ки танҳо фармонҳои фаъолкуниро аз ҳисоби ман қабул мекунад.

Ман тасмим гирифтам, ки чунин бот нависам.

Ҳамин тавр, аввалин чизе, ки бояд кард, дар телеграмма сохтани бот аст.

  • Мо дар ҷустуҷӯ ҳисоби @botfather пайдо мекунем
  • Тугмаи Оғозро дар поёни экран пахш кунед
  • Он гоҳ мо ба ӯ фармон / newbot менависем

Пас мо ба 2 саволи оддӣ ҷавоб медиҳем:

  • Саволи аввал номи боти сохташаванда аст. MyMikrotikROuter
  • Саволи дуюм лақаби боти сохташаванда аст (бояд бо бот хотима ёбад) MikrotikROuter_bot

Дар посух, мо аломати боти худро мегирем, дар ҳолати ман ин:

Барои дастрасӣ ба HTTP API ин нишонаро истифода баред: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Фаъолсозии фосилавии скриптҳои Микротик аз Telegram
Пас, шумо бояд боти моро дар ҷустуҷӯ бо ном пайдо кунед @MikrotikROuter_bot ва тугмаи Оғозро пахш кунед.

Пас аз он, шумо бояд браузерро кушоед ва сатри зеринро ворид кунед:

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

Дар куҷо XXXXXXXXXXXXXXXXXX нишонаи боти шумост.

Саҳифаи шабеҳи зерин кушода мешавад:

Фаъолсозии фосилавии скриптҳои Микротик аз Telegram

Мо дар он матни зеринро пайдо мекунем:

"chat":{"id":631290,

Ҳамин тавр, мо ҳама маълумоти заруриро барои навиштани скриптҳо барои Mikrotik дорем, яъне:

Токени бот: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

ID чат дар куҷо бояд нависад: 631290

Барои тафтиш, мо метавонем тавассути браузер гузаред:

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

Бояд натиҷа гирад:

Фаъолсозии фосилавии скриптҳои Микротик аз Telegram

Барои роҳати мо, мо фавран фармонҳоро барои бот илова мекунем:

Ҷустуҷӯи ҳисоб бо ном @botpather
Сипас, мо ба ӯ фармон менависем / setcommands

  • Вай мепурсад, ки кадом бот

Мо менависем:
@MikrotikROuter_bot

Илова кардани фармонҳо:

  • helloworld< — Паёми санҷишӣ дар чат 1
  • itsworking-Паёми санҷишӣ дар чат 2
  • wolmypc-компютери маро бедор кунед

Ҳоло агар шумо дар чат "/" нависед, шумо бояд:

Фаъолсозии фосилавии скриптҳои Микротик аз Telegram

Акнун биёед ба 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.

Бояд натиҷа гирад:

Фаъолсозии фосилавии скриптҳои Микротик аз Telegram

Акнун биёед ба скриптҳо гузарем:

Салом Ҷаҳон

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"

Фаромӯш накунед, ки номи дурусти Mac ва интерфейс, инчунин bot-token ва chat_id-ро муайян кунед.

Ҳоло ман каме шарҳ медиҳам, ки онҳо чӣ кор мекунанд:

Скрипти "helloworld" паём мефиристад: "Салом, ҷаҳон!" ба сӯҳбати мо бо бот.
Скрипти "он кор мекунад" паём мефиристад: "Санҷиши хуб, он кор мекунад!" ба сӯҳбати мо бо бот.
Ин скриптҳо барои мақсадҳои намоишӣ мебошанд.
Ман скрипти "wolmypc" -ро ҳамчун яке аз татбиқҳои имконпазир илова кардам.
Пас аз иҷрои скрипт, бот ба чат "wol OK" менависад.
Дар асл, шумо метавонед комилан ҳама гуна скриптро иҷро кунед.

Эҷоди вазифа:

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

Намоиши хонишмаълум нест, ки чаро, аммо аз скрипти корӣ он маълумоти глобалиро ошкор намекунад, илова скрипт вақте ки система пурбор мешавад.
Оғози 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") ;

телеграмма

: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 паёмро нишон медиҳад, барои роҳат пас аз хондани фармон мо паёмро нест мекунем. Api Telegram мегӯяд, ки барои хондани паём рақами паём + 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

бо ёфт 7 Каскадёр 7 ки файле, ки зиёда аз 14 паём дорад, дигар бо фармони дарёфт коркард намешавад (Маҳдудиятҳои Microtik). Аз ин рӯ, дар оянда ман скриптро ба lua иваз мекунам, ташаккур 7 Каскадёр 7 барои ин, ман дар бораи Луа намедонистам.

UPD 08.12.2016/XNUMX/XNUMX

Дар Telegram, аз афташ, онҳо каме "харҷ"-и getUpdate-ро тағир доданд. акнун дар скрипти асосӣ шумо бояд ҷуброни паёмро аз 2 то 1 ислоҳ кунед

тағйирдиҳӣ

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

заменить на :

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

Манбаъ: will.com