Alexander Koryukin het my tot hierdie implementering gedryf
En 'n opmerking in een van die VK-groepe deur Kirill Kazakov:
Ja, dit is glad nie veilig nie. Ek sal eerder 'n telegram-bot skryf wat slegs aktiveringsopdragte vanaf my rekening aanvaar.
Ek het besluit om so 'n bot te skryf.
Dus, die eerste ding om te doen is om 'n bot in telegram te skep.
- Ons vind in die soektog 'n rekening met die naam @botfather
- Klik op die Start-knoppie onderaan die skerm
- Dan skryf ons vir hom die opdrag / newbot
Dan beantwoord ons 2 eenvoudige vrae:
- Die eerste vraag is die naam van die bot wat geskep moet word. MyMikrotikROuter
- Die tweede vraag is die bynaam van die bot wat geskep word (moet eindig met bot) MikrotikROuter_bot
In reaksie sal ons die teken van ons bot ontvang, in my geval is dit:
Gebruik hierdie teken om toegang tot die HTTP API te verkry: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Dan moet jy ons bot in die soektog op naam vind @MikrotikROuter_bot en druk die Start-knoppie.
Daarna moet u die blaaier oopmaak en die volgende reΓ«l invoer:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Waar XXXXXXXXXXXXXXXXXX jou bot se teken is.
'n Bladsy soortgelyk aan die volgende sal oopmaak:
Ons vind die volgende teks daarop:
"chat":{"id":631290,
Dus, ons het al die nodige inligting om skrifte vir Mikrotik te skryf, naamlik:
Bot token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID waar hy moet skryf: 631290
Om na te gaan, kan ons deur die blaaier gaan:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Behoort die resultaat te kry:
Vir ons gerief sal ons onmiddellik opdragte vir die bot byvoeg:
Soek 'n rekening met 'n naam @botpa
Dan skryf ons vir hom 'n opdrag / setcommands
- Hy sal vra watter bot
Ons skryf:
@MikrotikROuter_bot
Voeg opdragte by:
- helloworld< β Toetsboodskap op klets 1
- itsworking-toetsboodskap op klets 2
- wolmypc-maak my rekenaar wakker
As jy nou "/" in die klets tik, behoort jy te kry:
Kom ons gaan nou aan na MikroTik.
RouterOS het 'n konsole-hulpmiddel vir die kopiΓ«ring van lΓͺers via ftp of http / https, die hulpprogram word haal genoem, en dit is wat ons sal gebruik.
Maak oop terminale en voer in:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Neem asseblief kennis dat MikroTik ""om die teken te ontsnap"?' in die URL.
Behoort die resultaat te kry:
Kom ons gaan nou aan na skrifte:
Hello WΓͺreld
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}
dit werk
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"
Moenie vergeet om die korrekte Mac- en koppelvlaknaam, sowel as bot-token en chat_id, te spesifiseer nie.
Nou sal ek 'n bietjie verduidelik wat hulle doen:
Die "helloworld"-skrif stuur 'n boodskap: "Hallo, wΓͺreld!" na ons geselsie met die bot.
Die "itsworking"-skrif stuur 'n boodskap: "Toets OK, dit werk!" na ons geselsie met die bot.
Hierdie skrifte is vir demonstrasiedoeleindes.
Ek het die "wolmypc" skrif bygevoeg as een van die moontlike implementerings.
By die uitvoering van die skrif, sal die bot "wol OK" vir die klets skryf.
Trouens, jy kan absoluut enige skrif uitvoer.
Skep 'n taak:
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
Leesbare aansigdit is nie duidelik hoekom nie, maar uit die werkende skrif maak dit nie globale data bekend nie, het die skrif bygevoeg wanneer die stelsel begin.
Telegram begin
: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;
}
Hoe werk dit
Laai ons "getUpdates"-boodskappe elke 30 sekondes af en ontleed dan om uit te vind update_id (boodskapnommer) en teks (ons spanne) en chat_id . By verstek vertoon getUpdates van 1 tot 100 boodskappe, vir gerief, nadat ons die opdrag gelees het, vee ons die boodskap uit. Telegram api sΓͺ om 'n boodskap te lees, benodig jy die boodskapnommer + 1
/getUpdates?offset=update_id + 1
Alles getoets op Mikrotik rb915 RouterOS 6.37.1
As jy baie opdragte gelyktydig stuur, sal hulle almal om die beurt met 'n interval van 30 sekondes uitgevoer word.
NS Baie dankie aan Kirill Kazakov vir die idee en my vriend Alexander vir hulp met die draaiboeke.
verwysings
upd:
03:11:16
Verbeterde skrifte:
Bygevoeg tjek vir chat_id
Kyk vir 'n dwaas, as iemand aan ons bot skryf, sal hy hom antwoord: "Ek kan nie met jou praat nie. β, sal ons insgelyks antwoord as dit nie die opdrag herken nie.
Nadat die opdrag uitgevoer is, teken die bot uit by die klets (sien wolmypc-skrif)
DUP
Gevind met
UPD 08.12.2016/XNUMX/XNUMX
in Telegram het hulle blykbaar die "uitlaat" van getUpdate effens verander. nou in die hoofskrif moet jy die boodskapverskuiwing van 2 na 1 regstel
veranderinge
:local message [:pick $content ($startLoc + 2) $endLoc] ;
Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Bron: will.com