Itinulak ako ni Alexander Koryukin sa pagpapatupad na ito
At isang komento sa isa sa mga pangkat ng VK ni Kirill Kazakov:
Oo, hindi ito ligtas. Mas gugustuhin kong magsulat ng telegram bot na tumatanggap lamang ng mga utos sa pag-activate mula sa aking account.
Nagpasya akong magsulat ng ganoong bot.
Kaya, ang unang bagay na dapat gawin ay lumikha ng isang bot sa telegrama.
- Nakita namin sa paghahanap ang isang account na pinangalanang @botfather
- Mag-click sa Start button sa ibaba ng screen
- Pagkatapos ay isusulat namin sa kanya ang utos / newbot
Pagkatapos ay sasagutin namin ang 2 simpleng tanong:
- Ang unang tanong ay ang pangalan ng bot na gagawin. MyMikrotikROuter
- Ang pangalawang tanong ay ang palayaw ng bot na nilikha (dapat magtapos sa bot) MikrotikROuter_bot
Bilang tugon, matatanggap namin ang token ng aming bot, sa aking kaso ito ay:
Gamitin ang token na ito para ma-access ang HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Pagkatapos, kailangan mong hanapin ang aming bot sa paghahanap ayon sa pangalan @MikrotikROuter_bot at pindutin ang Start button.
Pagkatapos nito, kailangan mong buksan ang browser at ipasok ang sumusunod na linya:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Kung saan ang XXXXXXXXXXXXXXXXXX ay token ng iyong bot.
Magbubukas ang isang pahinang katulad ng sumusunod:
Nakita namin ang sumusunod na teksto dito:
"chat":{"id":631290,
Kaya, mayroon kaming lahat ng kinakailangang impormasyon para sa pagsulat ng mga script para sa Mikrotik, lalo na:
Bot token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat ID kung saan siya dapat sumulat: 631290
Upang suriin, maaari tayong dumaan sa browser:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Dapat makuha ang resulta:
Para sa aming kaginhawaan, agad kaming magdaragdag ng mga utos para sa bot:
Paghahanap ng account na may pangalan @botfather
Pagkatapos ay sumulat kami sa kanya ng isang utos / setcommands
- Tatanungin niya kung aling bot
Sumulat kami:
@MikrotikROuter_bot
Magdagdag ng mga utos:
- helloworld< β Test message sa chat 1
- gumagana nito-Test Message sa chat 2
- wolmypc-wake up my PC
Ngayon kung nag-type ka ng "/" sa chat, dapat mong makuha ang:
Ngayon ay lumipat tayo sa MikroTik.
Ang RouterOS ay may console utility para sa pagkopya ng mga file sa pamamagitan ng ftp o http / https, ang utility ay tinatawag na fetch, na kung ano ang gagamitin namin.
Buksan pandulo at ipasok ang:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Pakitandaan na kailangan ng MikroTik ""para makatakas sa tanda"?' sa URL.
Dapat makuha ang resulta:
Ngayon ay lumipat tayo sa mga script:
helloworld
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}
gumagana nito
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"
Huwag kalimutang tukuyin ang tamang mac at pangalan ng interface, pati na rin ang bot-token at chat_id.
Ngayon ay ipapaliwanag ko nang kaunti kung ano ang ginagawa nila:
Ang script na "helloworld" ay nagpapadala ng mensahe: "Hello, world!" sa aming pakikipag-chat sa bot.
Ang "itsworking" script ay nagpapadala ng mensahe: "Test OK, it's Working!" sa aming pakikipag-chat sa bot.
Ang mga script na ito ay para sa mga layunin ng pagpapakita.
Idinagdag ko ang script na "wolmypc" bilang isa sa mga posibleng pagpapatupad.
Sa pagpapatupad ng script, isusulat ng bot ang "wol OK" sa chat.
Sa katunayan, maaari kang magpatakbo ng ganap na anumang script.
Lumikha ng isang gawain:
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
Nababasang Viewhindi malinaw kung bakit, ngunit mula sa gumaganang script ay hindi ito nagbubunyag ng pandaigdigang data, idinagdag ang script kapag nag-boot ang system.
Pagsisimula ng telegrama
: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") ;
Telegrama
: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;
}
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
I-download ang aming "getUpdates" na mga mensahe tuwing 30 segundo, pagkatapos ay i-parse para malaman update_id (numero ng mensahe) at teksto (ang aming mga koponan) at chat_id . Bilang default, ang getUpdates ay nagpapakita mula 1 hanggang 100 na mensahe, para sa kaginhawahan, pagkatapos basahin ang command, tatanggalin namin ang mensahe. Sinasabi ng Telegram api na magbasa ng isang mensahe kailangan mo ang numero ng mensahe + 1
/getUpdates?offset=update_id + 1
Lahat ay nasubok sa Mikrotik rb915 RouterOS 6.37.1
Kung magpadala ka ng maraming utos nang sabay-sabay, lahat ng mga ito ay isasagawa nang magkakasunod na may pagitan na 30 segundo.
PS Maraming salamat kay Kirill Kazakov para sa ideya at sa aking kaibigang si Alexander para sa tulong sa mga script.
sanggunian
upd:
03:11:16
Mga pinahusay na script:
Nagdagdag ng tseke para sa chat_id
Sinusuri kung may tanga, kung may sumulat sa aming bot, sasagutin niya siya: "Hindi kita makausap. β, ay katulad din ang sasagot sa amin kung hindi nito nakikilala ang utos.
Pagkatapos isagawa ang utos, mag-unsubscribe ang bot sa chat (tingnan ang script ng wolmypc)
DUP
Natagpuan na may
UPD 08.12.2016/XNUMX/XNUMX
sa Telegram, tila, bahagyang binago nila ang "tambutso" ng getUpdate. ngayon sa pangunahing script kailangan mong iwasto ang offset ng mensahe mula 2 hanggang 1
pagbabago
:local message [:pick $content ($startLoc + 2) $endLoc] ;
Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Pinagmulan: www.habr.com