Firfircoonida fog ee qoraalada Mikrotik ee Telegram

Alexander Koryukin ayaa igu riixay hirgelintan GeXoGen la daabacaadiisaKumbuyuutarka u daaran meel fog oo bilaash ah, SMS la'aan iyo daruur la'aan, adoo isticmaalaya MikrotikΒ«.

Iyo faallo ka mid ah kooxaha VK ee Kirill Kazakov:

Haa, gabi ahaanba ammaan maaha. Waxaan doorbidi lahaa in aan qoro bot telegram oo kaliya aqbala amarrada firfircoonida akoonkayga.

Waxaan go'aansaday inaan qoro bot noocan oo kale ah.

Marka, waxa ugu horreeya ee la sameeyo waa in la abuuro bot telegram.

  • Waxaan ka helnay raadinta akoon lagu magacaabo @botfather
  • Guji badhanka Start ee hoose ee shaashadda
  • Kadib waxaan u qornaa amarka / newbot

Kadib waxaan ka jawaabeynaa 2 su'aalood oo fudud:

  • Su'aasha ugu horeysa waa magaca bot la abuurayo. MyMikrotikROuter
  • Su'aasha labaad waa naaneyska bot-ka la abuuray (waa inay ku dhammaato bot) MikrotikROuter_bot

Jawaabta, waxaan heli doonaa calaamada bot-kayaga, xaaladdeyda waa:

Isticmaal calaamadan si aad u gasho HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Firfircoonida fog ee qoraalada Mikrotik ee Telegram
Kadib, waxaad u baahan tahay inaad ka hesho bot-kayaga raadinta magaca @MikrotikROuter_bot oo taabo badhanka Start.

Intaa ka dib, waxaad u baahan tahay inaad furto browserka oo geli khadka soo socda:

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

Meesha XXXXXXXXXXXXXXXXXX ay tahay astaanta bot-ka.

Bog la mid ah kuwan ayaa furmi doona:

Firfircoonida fog ee qoraalada Mikrotik ee Telegram

Waxaan ka helaynaa qoraalkan soo socda:

"chat":{"id":631290,

Markaa, waxaan haynaa dhammaan macluumaadka lagama maarmaanka u ah qorista qoraallada Mikrotik, kuwaas oo ah:

Bot token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Aqoonsiga wada sheekaysiga meesha uu ku qori karo: 631290

Si loo hubiyo, waxaan mari karnaa browserka:

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

Waa in la helaa natiijada:

Firfircoonida fog ee qoraalada Mikrotik ee Telegram

Si ay noogu fududaato, waxaanu isla markiiba ku dari doonaa amarada bot-ka:

Helitaanka akoon magac leh @botaabkii
Markaasaan u qornaa amar / amarro

  • Wuxuu weydiin doonaa botkee

Waxaan qoreynaa:
@MikrotikROuter_bot

Ku dar amarrada:

  • helloworld<- Fariinta tijaabada ee wada sheekaysiga 1
  • Farriinta tijaabada shaqadeeda ee chat 2
  • wolmypc-kac PC-gayga

Hadda haddii aad ku qorto "/" sheekeysiga, waa inaad heshaa:

Firfircoonida fog ee qoraalada Mikrotik ee Telegram

Hadda aan u gudubno MikroTik.

RouterOS waxay leedahay utility console ah oo loogu talagalay koobiyaynta faylasha iyada oo loo marayo ftp ama http / https, utility waxaa loo yaqaan fetch, taas oo ah waxa aan isticmaali doono.

Furo terminal oo geli:

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

Fadlan la soco in MikroTik uu u baahan yahay"Β» si looga baxsado calaamada?' URL-ka

Waa in la helaa natiijada:

Firfircoonida fog ee qoraalada Mikrotik ee Telegram

Hadda aan u gudubno qoraallada:

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}

shaqadeeda

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"

Ha iloobin inaad sheegto magaca saxda ah ee mac iyo interface, iyo sidoo kale bot-token iyo chat_id.

Hadda waxaan sharxi doonaa wax yar waxay qabtaan:

Qoraalka "helloworld" wuxuu soo dirayaa fariin: "Hello, adduunyo!" si aan ula sheekeysano bot-ka.
Qoraalka "shaqayntiisa" wuxuu soo dirayaa fariin: "Tijaabi OK, way shaqaynaysaa!" si aan ula sheekeysano bot-ka.
Qoraalladan waxaa loogu talagalay ujeeddooyin muujinaya.
Waxaan ku daray qoraalka "wolmypc" mid ka mid ah hirgelinta suurtagalka ah.
Marka la fuliyo qoraalka, bot-ku wuxuu ku qori doonaa "wol OK" sheekada.
Dhab ahaantii, waxaad gabi ahaanba wadi kartaa qoraal kasta.

Samee hawl:

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

Muuqaal la akhriyi karoMa cadda sababta, laakiin laga soo bilaabo qoraalka shaqada ma soo bandhigto xogta caalamiga ah, ayaa ku daray qoraalka marka nidaamka kabaha.
Bilowga Telegram

: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") ;

telegraam

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

Sidee tani u shaqaysaa

Soo deji fariimahayaga "getUpdates" 30kii ilbiriqsi kasta, ka dib baar si aad u ogaato update_id (lambarka fariinta) iyo text (Kooxahayada) iyo chat_id . Sida caadiga ah, getUpdates waxay soo bandhigaysaa 1 ilaa 100 farriimo, si ay ugu habboonaato, ka dib markaad akhrido amarka, waxaanu tirtirnaa fariinta. Telegram api wuxuu leeyahay si aad u akhrido fariin waxaad u baahan tahay lambarka fariinta + 1

/getUpdates?offset=update_id + 1

Dhammaan waxaa lagu tijaabiyay Mikrotik rb915 RouterOS 6.37.1
Haddii aad dirto amarro badan hal mar, dhamaantood waa la fulin doonaa iyadoo ay u dhaxayso 30 ilbiriqsi.

PS Aad ayaan ugu mahadcelinayaa Kirill Kazakov fikradda iyo saaxiibkay Alexander oo gacan ka helay qoraallada.

tixraacyada

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

cusboonaysii:

03:11:16

Qoraallada la hagaajiyay:

jeeg lagu daray chat_id
Hubinta nacas, haddii qof u soo qoro bot-kayaga, wuxuu u jawaabi doonaa: "Lama hadli karo. ", si la mid ah ayaa noogu jawaabi doonta haddii ay aqoonsan waydo amarka.
Kadib fulinta amarka, bot-ku wuu ka baxayaa sheekeysiga (eeg qoraalka wolmypc)

DUP

La helay 7Stuntman7 in faylka kor ku xusan ~ 14 farriimaha aan hadda ka baaraandegin amarka heli (Mikrotik xaddidan). Sidaa darteed, mustaqbalka, waxaan u beddeli doonaa qoraalka lua, mahadsanid 7Stuntman7 tan, anigu ma aan ogayn wax ku saabsan lua.

UPD 08.12.2016/XNUMX/XNUMX

Telegram-ka, sida muuqata, waxay waxyar ka beddeleen "daalkii" getUpdate. Hadda qoraalka ugu weyn waxaad u baahan tahay inaad ku saxdo fariinta la dhimay 2 ilaa 1

isbedel

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

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

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

Source: www.habr.com