Aktivasina jauh tina skrip Mikrotik ti Telegram

Alexander Koryukin ngadorong kuring pikeun palaksanaan ieu GeXoGeN kalawan publikasi naJauh ngahurungkeun komputer haratis, tanpa SMS sarta tanpa awan, ngagunakeun Mikrotik".

Sareng koméntar dina salah sahiji grup VK ku Kirill Kazakov:

Hehehehe, éta teu aman pisan. Abdi langkung resep nyerat bot telegram anu ngan ukur nampi paréntah aktivasina tina akun kuring.

Kuring mutuskeun nulis bot saperti.

Janten, hal anu munggaran dilakukeun nyaéta nyiptakeun bot dina telegram.

  • Urang manggihan dina pilarian hiji akun ngaranna @botfather
  • Pencét kana tombol Mimitian di handapeun layar
  • Teras we nyerat anjeunna paréntah / newbot

Teras we ngajawab 2 patarosan basajan:

  • Patarosan kahiji nyaeta nami bot nu bakal dijieun. MyMikrotikROuter
  • Patarosan kadua nyaéta nickname tina bot nu keur dijieun (kedah ditungtungan ku bot) MikrotikROuter_bot

Salaku réspon, kami bakal nampi token bot kami, bisi kuring nyaéta:

Anggo token ieu pikeun ngaksés HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Aktivasina jauh tina skrip Mikrotik ti Telegram
Teras, anjeun kedah milarian bot kami dina milarian ku nami @MikrotikROuter_bot terus pencét tombol Mimitian.

Saatos éta, anjeun kedah muka browser sareng lebetkeun garis ieu:

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

Dimana XXXXXXXXXXXXXXXXXX mangrupa token bot anjeun.

Halaman anu sami sareng ieu bakal dibuka:

Aktivasina jauh tina skrip Mikrotik ti Telegram

Kami mendakan téks di handap ieu dina éta:

"chat":{"id":631290,

Janten, urang gaduh sadayana inpormasi anu dipikabutuh pikeun nyerat skrip pikeun Mikrotik, nyaéta:

Token bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Chat ID dimana anjeunna kedah nyerat: 631290

Pikeun pariksa, urang tiasa ngalangkungan browser:

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

Kudu meunang hasilna:

Aktivasina jauh tina skrip Mikrotik ti Telegram

Pikeun genah kami, kami bakal langsung nambihan paréntah pikeun bot:

Neangan hiji akun kalawan ngaran @bapa
Teras we nyerat anjeunna paréntah / setcommands

  • Anjeunna bakal naroskeun bot mana

Urang nulis:
@MikrotikROuter_bot

Tambahkeun paréntah:

  • helloworld< — Test pesen dina obrolan 1
  • itsworking-Test Pesen dina obrolan 2
  • wolmypc-hudang PC abdi

Ayeuna upami anjeun ngetik "/" dina obrolan, anjeun kedah nampi:

Aktivasina jauh tina skrip Mikrotik ti Telegram

Ayeuna urang ngaléngkah ka MikroTik.

RouterOS gaduh utilitas konsol pikeun nyalin file via ftp atanapi http / https, utilitasna disebut fetch, anu bakal kami anggo.

Dibuka Terminal sareng lebetkeun:

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

Punten dicatet yén MikroTik peryogi ""pikeun kabur tanda"?' dina URL.

Kudu meunang hasilna:

Aktivasina jauh tina skrip Mikrotik ti Telegram

Ayeuna hayu urang ngalih ka skrip:

Halo Dunya

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}

jalanna

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"

Tong hilap sebutkeun nami Mac sareng antarmuka anu leres, kitu ogé bot-token sareng chat_id.

Ayeuna kuring bakal ngajelaskeun sakedik naon anu aranjeunna lakukeun:

Skrip "helloworld" ngirim pesen: "Halo, dunya!" kana obrolan urang jeung bot.
Skrip "nyaéta dianggo" ngirim pesen: "Test OK, éta Gawé!" kana obrolan urang jeung bot.
Naskah ieu kanggo tujuan démo.
Kuring ditambahkeun "wolmypc" Aksara salaku salah sahiji palaksanaan mungkin.
Saatos palaksanaan naskah, bot bakal nyerat "wol OK" kana obrolan.
Nyatana, anjeun tiasa ngajalankeun skrip naon waé.

Jieun tugas:

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

Kabaca Témbongkeunteu jelas naha, tapi ti naskah digawé teu nyingkab data global, ditambahkeun naskah nalika sistem boot.
Telegram ngamimitian

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

Kumaha teu karya ieu

Unduh pesen "getUpdates" kami unggal 30 detik, teras parse kanggo milarian update_id (nomer talatah) jeung naskah (tim kami) jeung chat_id . Sacara standar, getUpdates nampilkeun tina 1 dugi ka 100 pesen, pikeun genah, saatos maca paréntah, urang ngahapus pesen éta. Telegram api nyarios maca pesen anjeun peryogi nomer pesen + 1

/getUpdates?offset=update_id + 1

Kabéh diuji dina Mikrotik rb915 RouterOS 6.37.1
Upami anjeun ngirim seueur paréntah sakaligus, éta sadayana bakal dieksekusi dina waktosna sareng interval 30 detik.

PS Loba hatur nuhun kana Kirill Kazakov pikeun gagasan jeung sobat Alexander pikeun pitulung kalayan naskah.

rujukan

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

upd:

03:11:16

Aksara ningkat:

Ditambahkeun cek pikeun chat_id
Mariksa bodo, upami aya anu nyerat ka bot urang, anjeunna bakal ngajawab anjeunna: "Kuring henteu tiasa ngobrol sareng anjeun. ", Sarua bakal ngajawab kami lamun teu ngakuan paréntah.
Saatos ngalaksanakeun paréntah, bot ngabatalkeun kana obrolan (tingali skrip wolmypc)

UPDAT

Kapanggih jeung 7Stuntman7 yén hiji file kalawan luhur ~ 14 pesen geus euweuh diolah ku paréntah manggihan (watesan Mikrotik). Ku kituna, ka hareup, kuring bakal ngarobah naskah jadi lua, nuhun 7Stuntman7 pikeun ieu, Kuring henteu weruh ngeunaan lua.

UPD 08.12.2016

dina Telegram, katingalina, aranjeunna rada robah "knalpot" getUpdate. Ayeuna dina naskah utama anjeun kedah ngabenerkeun pesen offset ti 2 ka 1

parobahan

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

заменить на :

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

sumber: www.habr.com