Даљинско активирање Микротик скрипти из Телеграма

Александар Корјукин ме је гурнуо на ову имплементацију ГеКсоГеН са својом публикацијомДаљинско укључивање рачунара бесплатно, без СМС-а и без облака, користећи Микротик".

И коментар у једној од ВК група Кирила Казакова:

Да, уопште није сигурно. Радије бих написао телеграм бота који прихвата само команде за активацију са мог налога.

Одлучио сам да напишем таквог бота.

Дакле, прва ствар коју треба да урадите је да направите бота у телеграму.

  • У претрази налазимо налог под називом @ботфатхер
  • Кликните на дугме Старт на дну екрана
  • Затим му напишемо команду / невбот

Затим одговарамо на 2 једноставна питања:

  • Прво питање је име бота који треба да се креира. МиМикротикРОутер
  • Друго питање је надимак бота који се креира (треба да се завршава са ботом) МикротикРОутер_бот

Као одговор, добићемо токен нашег бота, у мом случају то је:

Користите овај токен за приступ ХТТП АПИ-ју: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Даљинско активирање Микротик скрипти из Телеграма
Затим, потребно је да пронађете нашег бота у претрази по имену @МикротикРОутер_бот и притисните дугме Старт.

Након тога, потребно је да отворите претраживач и унесете следећи ред:

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

Где је КСКСКСКСКСКСКСКСКСКСКСКСКСКСКСКСКСКС токен вашег бота.

Отвориће се страница слична следећој:

Даљинско активирање Микротик скрипти из Телеграма

На њему налазимо следећи текст:

"цхат":{"ид":631290,

Дакле, имамо све потребне информације за писање скрипти за Микротик, и то:

Бот токен: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

ИД за ћаскање где треба да напише: 631290

Да бисмо проверили, можемо да прођемо кроз претраживач:

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

Требало би да добијете резултат:

Даљинско активирање Микротик скрипти из Телеграма

Ради наше погодности, одмах ћемо додати команде за бота:

Проналажење налога са именом @ботфатхер
Онда му напишемо команду / сетцоммандс

  • Питаће који бот

Пишемо:
@МикротикРОутер_бот

Додајте команде:

  • хелловорлд< — Тест порука на четовању 1
  • итсворкинг-Пробна порука на цхату 2
  • волмипц-пробуди мој рачунар

Сада ако унесете "/" у ћаскање, требало би да добијете:

Даљинско активирање Микротик скрипти из Телеграма

Сада пређимо на МикроТик.

РоутерОС има конзолни услужни програм за копирање датотека преко фтп или хттп / хттпс, услужни програм се зове фетцх, што ћемо користити.

Отвори терминал и унесите:

/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no

Имајте на уму да МикроТик треба "» побећи знак «?' у УРЛ-у.

Требало би да добијете резултат:

Даљинско активирање Микротик скрипти из Телеграма

Сада пређимо на скрипте:

Здраво Свете

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}

волмипц

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"

Не заборавите да наведете тачан назив за Мац и интерфејс, као и бот-токен и цхат_ид.

Сада ћу мало објаснити шта раде:

Скрипта "хелловорлд" шаље поруку: "Здраво, свет!" до нашег ћаскања са ботом.
Скрипта "итсворкинг" шаље поруку: "Тест ОК, ит'с Воркинг!" до нашег ћаскања са ботом.
Ове скрипте служе за демонстрацију.
Додао сам "волмипц" скрипту као једну од могућих имплементација.
Након извршења скрипте, бот ће написати „вол ОК“ у ћаскање.
У ствари, можете покренути апсолутно било коју скрипту.

Направите задатак:

Телеграм.срц

/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") ;

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

Како ово ради

Преузмите наше „гетУпдатес“ поруке сваких 30 секунди, а затим их анализирајте да бисте сазнали упдате_ид (број поруке) и текст (наши тимови) и цхат_ид . ГетУпдатес подразумевано приказује од 1 до 100 порука, ради погодности, након читања команде, бришемо поруку. Телеграм АПИ каже да бисте прочитали поруку потребан вам је број поруке + 1

/getUpdates?offset=update_id + 1

Све тестирано на Микротик рб915 РоутерОС 6.37.1
Ако пошаљете више команди одједном, све ће се извршавати редом у интервалу од 30 секунди.

ПС Велико хвала Кирилу Казакову на идеји и мом пријатељу Александру на помоћи око сценарија.

референце

хабрахабр.ру/пост/313794
1спла.ру/индек.пхп/блог/телеграм_бот_фор_микротик
цоре.телеграм.орг/ботс/апи
вики.микротик.цом/вики/Мануал:Сцриптинг

упд:

03:11:16

Побољшане скрипте:

Додата провера за цхат_ид
Проверавам будалу, ако неко напише нашем боту, он ће му одговорити: „Не могу да причам са тобом. “, слично ће нам одговорити ако не препозна команду.
Након извршења команде, бот отказује пријаву на ћаскање (погледајте волмипц скрипту)

УПД

Пронађено са 7Стунтман7 да се датотека са изнад ~14 порука више не обрађује командом финд (Микротик ограничења). Због тога ћу у будућности променити сценарио у луа, хвала 7Стунтман7 за ово, нисам знао за луа.

УПД 08.12.2016

у Телеграму су, очигледно, мало променили "ауспух" гетУпдате-а. сада у главној скрипти треба да исправите помак поруке са 2 на 1

Промене

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

заменить на :

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

Извор: ввв.хабр.цом