Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram

Giduso ako ni Alexander Koryukin niini nga pagpatuman GeXoGeN uban sa iyang publikasyon "I-on sa layo ang imong computer nga libre, walay SMS ug walay mga panganod, gamit ang Mikrotik".

Ug usa ka komento sa usa sa mga grupo sa VK ni Kirill Kazakov:

Oo, dili gyud kini sigurado. Mas gusto nako nga mosulat ug telegram bot nga modawat lang sa mga activation commands gikan sa akong account.

Nakahukom ko sa pagsulat sa ingon nga bot.

Busa, ang unang butang nga kinahanglan nimong buhaton mao ang paghimo og bot sa telegrama.

  • Among nakit-an sa pagpangita ang usa ka account nga adunay ngalan nga @botfather
  • I-klik ang Start button sa ubos sa screen
  • Unya gisulatan namo siya sa sugo /newbot

Unya tubagon namo ang 2 ka yanong pangutana:

  • Ang unang pangutana mao ang ngalan sa bot nga gibuhat MyMikrotikROuter
  • Ang ikaduhang pangutana mao ang angga sa bot nga gihimo (kinahanglan matapos sa bot) MikrotikROuter_bot

Agig tubag, makadawat kami sa timaan sa among bot, sa akong kaso kini:

Gamita kini nga timaan aron ma-access ang HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram
Unya, kinahanglan nimo pangitaon ang among bot sa pagpangita pinaagi sa ngalan @MikrotikROuter_bot ug i-klik ang Start button.

Human niini, kinahanglan nimong ablihan ang imong browser ug isulod ang mosunod nga linya:

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

Diin ang XXXXXXXXXXXXXXXXXX mao ang timaan sa imong bot.

Usa ka panid nga susama sa mosunod ang moabli:

Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram

Atong makita ang mosunod nga teksto niini:

"chat":{"id":631290,

Busa, kita adunay tanan nga gikinahanglan nga impormasyon sa pagsulat sa mga script alang sa Mikrotik, nga mao:

Token sa bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Chat ID kung asa niya isulat: 631290

Aron masusi, makaadto kami sa browser:

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

Kinahanglan nimo makuha ang resulta:

Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram

Para sa atong kasayon, idugang dayon nato ang mga sugo para sa bot:

Pagpangita usa ka account nga adunay ngalan @botfather
Unya gisulatan namo siya ug sugo / setcommands

  • Mangutana siya kung unsang bot

Gisulat namo:
@MikrotikROuter_bot

Pagdugang mga sugo:

  • helloworld< β€” Test message sa chat 1
  • kini nagtrabaho - Test Message sa chat 2
  • wolmypc - pagmata sa akong PC

Karon kung imong gi-type ang "/" sa chat, kinahanglan nimo makuha:

Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram

Karon magpadayon kita sa MikroTik.

Ang RouterOS adunay console utility para sa pagkopya sa mga file pinaagi sa ftp o http/https, ang utility gitawag ug fetch, nga maoy atong gamiton.

Bukas terminal ug pagsulod:

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

Palihug timan-i nga ang MikroTik nagkinahanglan ""aron makalingkawas sa timaan"?"sa URL.

Kinahanglan nimo makuha ang resulta:

Hilit nga pagpaandar sa mga script sa Mikrotik gikan sa Telegram

Karon magpadayon kita 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}

pagtrabaho niini

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"

Ayaw kalimti nga ipiho ang husto nga ngalan sa mac ug interface, ingon man ang bot-token ug chat_id.

Karon ipasabut nako gamay kung unsa ang ilang gibuhat:

Ang "helloworld" nga script nagpadala sa mensahe: "Hello, kalibutan!" sa among chat sa bot.
Ang "nagtrabaho" nga script nagpadala sa mensahe: "Sulayi ang OK, Nagtrabaho kini!" sa among chat sa bot.
Kini nga mga script alang sa pagpakita sa trabaho.
Gidugang nako ang script nga "wolmypc" isip usa sa mga posible nga pagpatuman.
Kung nahuman na ang script, isulat sa bot ang "wol OK" sa chat.
Sa tinuud, mahimo nimong ipadagan ang bisan unsang script.

Paghimo og buluhaton:

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

Makita nga mabasaDili klaro kung ngano, apan wala kini nagpahibalo sa global nga datos gikan sa nagtrabaho nga script, ang script gidugang kung ang sistema nag-boot.
Telegram-pagsugod

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

Unsa nga paagi nga kini nga buhat

Among gi-download ang among "getUpdates" nga mga mensahe matag 30 segundos, dayon i-parse kini aron mahibal-an update_id (numero sa mensahe) ug teksto (among mga team) ug chat_id . Sa kasagaran, ang getUpdates nagpakita gikan sa 1 ngadto sa 100 ka mga mensahe; alang sa kasayon, human sa pagbasa sa sugo, ang mensahe matangtang. ang Telegram api nag-ingon nga aron mabasa ang usa ka mensahe kinahanglan nimo ang numero sa mensahe + 1

/getUpdates?offset=update_id + 1

Ang tanan gisulayan sa Mikrotik rb915 RouterOS 6.37.1
Kung magpadala ka daghang mga sugo sa usa ka higayon, silang tanan ipatuman sa usag usa nga adunay gilay-on nga 30 segundos.

PS Daghang salamat kang Kirill Kazakov sa ideya ug sa akong higala nga si Alexander sa iyang tabang sa mga script.

mga pakisayran

habrahabr.ru/post/313794
1spla.ru/index.php/blog/telegram_bot_for_mikrotik
core.telegram.org/bots/api
wiki.mikrotik.com/wiki/Manual: Pagsulat

upd:

03:11:16

Gipauswag nga mga script:

Gidugang nga tseke alang sa chat_id
Buang nga pagsulay, kung adunay magsulat sa among bot, kini motubag kaniya: "Dili ko makigsulti kanimo." β€œ, motubag kanato sa samang paagi kon kini dili makaila sa sugo.
Sa pagpatuman sa sugo, ang bot nag-unsubscribe sa chat (tan-awa ang wolmypc script)

DUP

Nakaplagan uban sa 7 Stuntman7 nga ang usa ka file nga adunay labaw sa ~14 nga mga mensahe wala na giproseso sa command sa pagpangita (mga limitasyon sa Microtik). Busa, sa umaabot akong pag-usab ang script sa lua, salamat 7 Stuntman7 tungod niini, wala ko kahibalo bahin sa lua.

UPD 08.12.2016/XNUMX/XNUMX

Ang Telegram dayag nga nagbag-o sa getUpdate nga "tambutso" gamay. Karon sa panguna nga script kinahanglan nimo nga itul-id ang mensahe nga offset gikan sa 2 hangtod 1

mga pagbag-o

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

Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° :

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

Source: www.habr.com