Александр Корюкин маро ба ин амалй тела дод
Ва шарҳ дар яке аз гурӯҳҳои ВК Кирилл Казаков:
Бале, он тамоман бехатар нест. Ман мехоҳам як боти телеграмма нависам, ки танҳо фармонҳои фаъолкуниро аз ҳисоби ман қабул мекунад.
Ман тасмим гирифтам, ки чунин бот нависам.
Ҳамин тавр, аввалин чизе, ки бояд кард, дар телеграмма сохтани бот аст.
- Мо дар ҷустуҷӯ ҳисоби @botfather пайдо мекунем
- Тугмаи Оғозро дар поёни экран пахш кунед
- Он гоҳ мо ба ӯ фармон / newbot менависем
Пас мо ба 2 саволи оддӣ ҷавоб медиҳем:
- Саволи аввал номи боти сохташаванда аст. MyMikrotikROuter
- Саволи дуюм лақаби боти сохташаванда аст (бояд бо бот хотима ёбад) MikrotikROuter_bot
Дар посух, мо аломати боти худро мегирем, дар ҳолати ман ин:
Барои дастрасӣ ба HTTP API ин нишонаро истифода баред: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Пас, шумо бояд боти моро дар ҷустуҷӯ бо ном пайдо кунед @MikrotikROuter_bot ва тугмаи Оғозро пахш кунед.
Пас аз он, шумо бояд браузерро кушоед ва сатри зеринро ворид кунед:
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
Бояд натиҷа гирад:
Барои роҳати мо, мо фавран фармонҳоро барои бот илова мекунем:
Ҷустуҷӯи ҳисоб бо ном @botpather
Сипас, мо ба ӯ фармон менависем / setcommands
- Вай мепурсад, ки кадом бот
Мо менависем:
@MikrotikROuter_bot
Илова кардани фармонҳо:
- helloworld< — Паёми санҷишӣ дар чат 1
- itsworking-Паёми санҷишӣ дар чат 2
- wolmypc-компютери маро бедор кунед
Ҳоло агар шумо дар чат "/" нависед, шумо бояд:
Акнун биёед ба 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.
Бояд натиҷа гирад:
Акнун биёед ба скриптҳо гузарем:
Салом Ҷаҳон
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 Ташаккури зиёд ба Кирилл Казаков барои идея ва дӯсти ман Александр барои кӯмак дар скрипт.
мурожиат
навсозӣ:
03:11:16
Скриптҳои такмилёфта:
Санҷиши chat_id илова карда шуд
Беақлро тафтиш карда, агар касе ба боти мо нависад, ба ӯ ҷавоб медиҳад: «Ман бо шумо сӯҳбат карда наметавонам. ", ба мо низ ҷавоб медиҳад, агар он фармонро эътироф накунад.
Пас аз иҷрои фармон, бот ба чат обунаро қатъ мекунад (ба скрипти wolmypc нигаред)
DUP
бо ёфт
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