Александар Корјукин ме је гурнуо на ову имплементацију
И коментар у једној од ВК група Кирила Казакова:
Да, уопште није сигурно. Радије бих написао телеграм бота који прихвата само команде за активацију са мог налога.
Одлучио сам да напишем таквог бота.
Дакле, прва ствар коју треба да урадите је да направите бота у телеграму.
- У претрази налазимо налог под називом @ботфатхер
- Кликните на дугме Старт на дну екрана
- Затим му напишемо команду / невбот
Затим одговарамо на 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 секунди.
ПС Велико хвала Кирилу Казакову на идеји и мом пријатељу Александру на помоћи око сценарија.
референце
упд:
03:11:16
Побољшане скрипте:
Додата провера за цхат_ид
Проверавам будалу, ако неко напише нашем боту, он ће му одговорити: „Не могу да причам са тобом. “, слично ће нам одговорити ако не препозна команду.
Након извршења команде, бот отказује пријаву на ћаскање (погледајте волмипц скрипту)
УПД
Пронађено са
УПД 08.12.2016
у Телеграму су, очигледно, мало променили "ауспух" гетУпдате-а. сада у главној скрипти треба да исправите помак поруке са 2 на 1
Промене
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Извор: ввв.хабр.цом