Den Alexander Koryukin huet mech op dës Ëmsetzung gedréckt
An e Kommentar an enger vun de VK Gruppen vum Kirill Kazakov:
Jo, et ass guer net sécher. Ech géif léiwer en Telegram Bot schreiwen, deen nëmmen Aktivéierungsbefehle vu mengem Kont akzeptéiert.
Ech hu beschloss esou e Bot ze schreiwen.
Also, déi éischt Saach ze maachen ass e Bot am Telegram ze kreéieren.
- Mir fannen an der Sich e Kont mam Numm @botfather
- Klickt op de Start Knäppchen um Enn vum Écran
- Da schreiwen mir him de Kommando / Newbot
Dann beäntweren mir 2 einfach Froen:
- Déi éischt Fro ass den Numm vum Bot deen erstallt gëtt. MyMikrotikROuter
- Déi zweet Fro ass de Spëtznumm vum Bot deen erstallt gëtt (soll mam Bot ophalen) MikrotikROuter_bot
Als Äntwert kréie mir den Token vun eisem Bot, a mengem Fall ass et:
Benotzt dësen Token fir Zougang zu den HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Da musst Dir eise Bot an der Sich nom Numm fannen @MikrotikROuter_bot an dréckt op de Start Knäppchen.
Duerno musst Dir de Browser opmaachen an déi folgend Linn aginn:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Wou XXXXXXXXXXXXXXXXXX Ärem Bot säin Token ass.
Eng Säit ähnlech wéi déi folgend wäert opmaachen:
Mir fanne folgenden Text drop:
"chat":{"id":631290,
Also, mir hunn all déi néideg Informatioune fir Skripte fir Mikrotik ze schreiwen, nämlech:
Bot Token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID wou hie soll schreiwen: 631290
Fir ze kontrolléieren, kënne mir duerch de Browser goen:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Sollt d'Resultat kréien:
Fir eis Kamoudheet wäerte mir direkt Kommandoe fir de Bot addéieren:
Fannt e Kont mat engem Numm @botpather
Da schreiwen mir him e Kommando / Setkommandoen
- Hie wäert froen wat Bot
Mir schreiwen:
@MikrotikROuter_bot
Füügt Kommandoen:
- helloworld< — Testmeldung am Chat 1
- itsworking-Test Message am Chat 2
- wolmypc-erwächen mäi PC
Elo wann Dir "/" am Chat schreift, sollt Dir kréien:
Loosst eis elo op MikroTik goen.
RouterOS huet e Konsol-Utility fir Dateien iwwer ftp oder http / https ze kopéieren, d'Utility gëtt fetch genannt, dat ass wat mir benotzen.
Mir maachen op Uschloss a gitt an:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Notéiert w.e.g. datt MikroTik brauch "» aus dem Schëld entkommen «?' an der URL.
Sollt d'Resultat kréien:
Loosst eis elo op Skripte weidergoen:
Moien Welt
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}
seng Aarbecht
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"
Vergiesst net de richtege Mac an den Interface Numm ze spezifizéieren, souwéi Bot-Token an Chat_id.
Elo wäert ech e bëssen erklären wat se maachen:
De Skript "Helloworld" schéckt e Message: "Hallo, Welt!" zu eisem Chat mam Bot.
De Skript "itsworking" schéckt e Message: "Test OK, et funktionnéiert!" zu eisem Chat mam Bot.
Dës Scripte si fir Demonstratiounszwecker.
Ech hunn de "wolmypc" Skript als eng vun de méiglechen Implementatiounen bäigefüügt.
Beim Ausféierung vum Skript schreift de Bot "wol OK" an den Chat.
Tatsächlech kënnt Dir absolut all Skript lafen.
Erstellt eng Aufgab:
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
Liesbar Vueet ass net kloer firwat, awer aus dem schaffende Skript gëtt et keng global Donnéeën, huet de Skript bäigefüügt wann de System boot.
Telegram 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") ;
Hëllefe profitéieren
: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;
}
Wéi heescht dat Aarbecht
Luet eis "getUpdates" Messagen all 30 Sekonnen erof, parse dann fir erauszefannen update_id (Message Zuel) an Text (eis Equipen) an chat_id . Par défaut gëtt getUpdates vun 1 bis 100 Messagen ugewisen, fir d'Bequemlechkeet, nodeems mir de Kommando gelies hunn, läschen mir de Message. Telegram API seet fir e Message ze liesen Dir braucht d'Botschaftsnummer + 1
/getUpdates?offset=update_id + 1
All getest op Mikrotik rb915 RouterOS 6.37.1
Wann Dir vill Befehle gläichzäiteg schéckt, ginn se all am Tour mat engem Intervall vun 30 Sekonnen ausgefouert.
PS Vill Merci un de Kirill Kazakov fir d'Iddi a mäi Frënd Alexander fir d'Hëllef mat de Skripten.
Referenze
upd:
03:11:16
Verbesserte Skripte:
Scheck fir chat_id bäigefüügt
Iwwerpréift no engem Narr, wann een un eise Bot schreift, äntwert hien him: "Ech kann net mat Iech schwätzen. ", wäert eis ähnlech äntweren wann et de Kommando net erkennt.
Nodeems de Kommando ausgefouert gouf, schreift de Bot de Chat of (kuckt wolmypc Skript)
DUP
Fonnt mat
UPD 08.12.2016/XNUMX/XNUMX
am Telegram, anscheinend, hu se den "Auspuff" vun getUpdate liicht geännert. elo am Haaptskript musst Dir de Message Offset vun 2 op 1 korrigéieren
änneren
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Source: will.com