Ալեքսանդր Կորյուկինն ինձ մղեց այս իրականացմանը
Եվ Կիրիլ Կազակովի մեկնաբանություն VK խմբերից մեկում.
Այո, դա բոլորովին ապահով չէ: Ես կգերադասեի գրել հեռագրային բոտ, որը ընդունում է միայն իմ հաշվից ակտիվացման հրամանները։
Որոշեցի այսպիսի բոտ գրել։
Այսպիսով, առաջին բանը, որ պետք է անել, Telegram-ում բոտ ստեղծելն է:
- Որոնման մեջ մենք գտնում ենք @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
Chat ID-ն, որտեղ նա պետք է գրի. 631290
Ստուգելու համար մենք կարող ենք անցնել բրաուզերի միջոցով.
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Արդյունքը պետք է ստանա.
Մեր հարմարության համար մենք անմիջապես կավելացնենք հրամաններ բոտի համար.
Անունով հաշիվ գտնելը @botfather
Այնուհետև մենք նրան հրաման ենք գրում / setcommands
- Նա կհարցնի, թե որ բոտը
Մենք գրում ենք:
@MikrotikROuter_bot
Ավելացնել հրամաններ.
- helloworld< — Փորձնական հաղորդագրություն չաթում 1
- իր աշխատանքային-Թեստային հաղորդագրություն չաթում 2
- wolmypc-wake up my 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-ում:
Արդյունքը պետք է ստանա.
Հիմա եկեք անցնենք սցենարներին.
Բարեւ աշխարհ
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-ի և ինտերֆեյսի ճիշտ անունը, ինչպես նաև բոտ-token-ը և chat_id-ը:
Հիմա մի փոքր կբացատրեմ, թե ինչ են անում.
«Helloworld» սցենարը հաղորդագրություն է ուղարկում. «Բարև, աշխարհ»: բոտի հետ մեր զրույցին:
«itsworking» սկրիպտը հաղորդագրություն է ուղարկում. «Test OK, it's Working»: բոտի հետ մեր զրույցին:
Այս սցենարները ցուցադրական նպատակներով են:
Որպես հնարավոր իրագործումներից մեկը ավելացրի «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") ;
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;
}
Ինչպես է այն աշխատում
Ներբեռնեք մեր «getUpdates» հաղորդագրությունները յուրաքանչյուր 30 վայրկյանը մեկ, այնուհետև վերլուծեք՝ պարզելու համար update_id (հաղորդագրության համարը) և տեքստ (մեր թիմերը) և chat_id . Լռելյայնորեն, getUpdates-ը ցուցադրում է 1-ից 100 հաղորդագրություն, հարմարության համար հրամանը կարդալուց հետո մենք ջնջում ենք հաղորդագրությունը։ Telegram api-ն ասում է, որ հաղորդագրություն կարդալու համար անհրաժեշտ է հաղորդագրության համարը + 1
/getUpdates?offset=update_id + 1
Բոլորը փորձարկված են Mikrotik rb915 RouterOS 6.37.1-ի վրա
Եթե դուք միանգամից բազմաթիվ հրամաններ ուղարկեք, դրանք բոլորը կկատարվեն հերթով 30 վայրկյան ընդմիջումով:
Հ.Գ.Շատ շնորհակալ եմ Կիրիլ Կազակովին գաղափարի համար և ընկեր Ալեքսանդրին` սցենարների հարցում օգնության համար:
Սայլակ
թարմացում:
03:11:16
Բարելավված սցենարներ.
Ավելացվեց ստուգում chat_id-ի համար
Հիմարի համար ստուգելով, եթե մեկը գրի մեր բոտին, նա կպատասխանի նրան. «Ես չեմ կարող քեզ հետ խոսել: «, նմանապես կպատասխանի մեզ, եթե այն չի ճանաչում հրամանը:
Հրամանը կատարելուց հետո բոտը դուրս է գալիս չաթի բաժանորդագրությունից (տես wolmypc script)
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] ;
Source: www.habr.com