Мени бул ишке Александр Корюкин түрттү
Кирилл Казаковдун ВК топторунун бириндеги комментарийи:
Ооба, бул такыр коопсуз эмес. Менин аккаунтумдан активдештирүү буйруктарын гана кабыл алган телеграмма ботун жазгым келет.
Мен ушундай бот жазууну чечтим.
Ошентип, биринчи нерсе - телеграммада бот түзүү.
- Издөөдө @botfather аттуу аккаунтту табабыз
- Экрандын ылдый жагындагы Start баскычын басыңыз
- Андан кийин биз ага буйрук / 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
Чат идентификатору ал жазышы керек: 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
МикроТикке керек экенин эске алыңыз "» белгисин качуу үчүн?' 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гө чейин билдирүүлөрдү көрсөтөт, ыңгайлуулук үчүн, буйрукту окугандан кийин биз билдирүүнү жок кылабыз. Telegram api билдирүүнү окуу үчүн сизге билдирүү номери + 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
Телеграмда, сыягы, алар getUpdate'тин "чыгышын" бир аз өзгөртүштү. азыр негизги скриптте сиз 2ден 1ге чейин билдирүүнү тууралашыңыз керек
өзгөрүүлөр
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Source: www.habr.com