టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్

అలెగ్జాండర్ కొర్యుకిన్ నన్ను ఈ అమలుకు నెట్టాడు GeXoGeN అతని ప్రచురణతోమైక్రోటిక్ ఉపయోగించి SMS లేకుండా మరియు మేఘాలు లేకుండా ఉచితంగా కంప్యూటర్‌ను రిమోట్ ఆన్ చేయడం".

మరియు కిరిల్ కజాకోవ్ ద్వారా VK సమూహాలలో ఒకదానిలో ఒక వ్యాఖ్య:

అవును, ఇది అస్సలు సురక్షితం కాదు. నేను నా ఖాతా నుండి యాక్టివేషన్ కమాండ్‌లను మాత్రమే ఆమోదించే టెలిగ్రామ్ బాట్‌ని వ్రాస్తాను.

నేను అలాంటి బాట్ రాయాలని నిర్ణయించుకున్నాను.

కాబట్టి, టెలిగ్రామ్‌లో బాట్‌ను సృష్టించడం మొదటి విషయం.

  • మేము శోధనలో @botfather పేరుతో ఖాతాను కనుగొంటాము
  • స్క్రీన్ దిగువన ఉన్న స్టార్ట్ బటన్‌పై క్లిక్ చేయండి
  • అప్పుడు మేము అతనికి / newbot కమాండ్ వ్రాస్తాము

అప్పుడు మేము 2 సాధారణ ప్రశ్నలకు సమాధానం ఇస్తాము:

  • మొదటి ప్రశ్న సృష్టించబడిన బాట్ పేరు MyMikrotikROuter
  • రెండవ ప్రశ్న సృష్టించబడిన బాట్ యొక్క మారుపేరు (తప్పక బోట్‌లో ముగుస్తుంది) MikrotikROouter_bot

ప్రతిస్పందనగా, మేము మా బోట్ యొక్క టోకెన్‌ను స్వీకరిస్తాము, నా విషయంలో ఇది:

HTTP APIని యాక్సెస్ చేయడానికి ఈ టోకెన్‌ని ఉపయోగించండి: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్
అప్పుడు, మీరు పేరు ద్వారా శోధనలో మా బోట్‌ను కనుగొనాలి @MikrotikROuter_bot మరియు స్టార్ట్ బటన్‌పై క్లిక్ చేయండి.

ఆ తర్వాత, మీరు బ్రౌజర్‌ని తెరిచి, కింది పంక్తిని నమోదు చేయాలి:

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

ఇక్కడ XXXXXXXXXXXXXXXXXX మీ బాట్ యొక్క టోకెన్.

కింది మాదిరిగానే ఒక పేజీ తెరవబడుతుంది:

టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్

మేము దానిపై క్రింది వచనాన్ని కనుగొంటాము:

"చాట్":{"id":631290,

కాబట్టి, Mikrotik కోసం స్క్రిప్ట్‌లను వ్రాయడానికి మాకు అవసరమైన మొత్తం సమాచారం ఉంది, అవి:

బోట్ టోకెన్: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

అతను వ్రాయవలసిన చాట్ ID: 631290

తనిఖీ చేయడానికి, మేము బ్రౌజర్ ద్వారా వెళ్ళవచ్చు:

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

మీరు ఫలితాన్ని పొందాలి:

టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్

మన సౌలభ్యం కోసం, వెంటనే బాట్ కోసం ఆదేశాలను జోడిద్దాం:

పేరుతో ఖాతాను కనుగొనడం @బోట్ ఫాదర్
అప్పుడు మేము అతనికి ఒక ఆదేశం వ్రాస్తాము / setcommands

  • అతను ఏ బోట్ అని అడుగుతాడు

మేము రాస్తాము:
@MikrotikROouter_bot

ఆదేశాలను జోడించండి:

  • helloworld< — చాట్ 1లో పరీక్ష సందేశం
  • చాట్ 2లో దాని వర్కింగ్-టెస్ట్ సందేశం
  • wolmypc - నా PCని మేల్కొలపండి

ఇప్పుడు మీరు చాట్‌లో "/" అని టైప్ చేస్తే, మీరు పొందాలి:

టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్

ఇప్పుడు MikroTik కి వెళ్దాం.

Ftp లేదా http / https ద్వారా ఫైల్‌లను కాపీ చేయడానికి రూటర్‌ఓఎస్ కన్సోల్ యుటిలిటీని కలిగి ఉంది, యుటిలిటీని ఫెచ్ అని పిలుస్తారు, దీనిని మనం ఉపయోగిస్తాము.

తెరవడానికి టెర్మినల్ మరియు నమోదు చేయండి:

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

MikroTik అవసరం అని దయచేసి గమనించండి""సంకేతం నుండి తప్పించుకోవడానికి"?"URLలో.

మీరు ఫలితాన్ని పొందాలి:

టెలిగ్రామ్ నుండి మైక్రోటిక్ స్క్రిప్ట్‌ల రిమోట్ యాక్టివేషన్

ఇప్పుడు స్క్రిప్ట్‌లకు వెళ్దాం:

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}

దాని పని

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"

సరైన Mac మరియు ఇంటర్‌ఫేస్ పేరు, అలాగే బోట్-టోకెన్ మరియు chat_idని పేర్కొనడం మర్చిపోవద్దు.

ఇప్పుడు వారు ఏమి చేస్తారో నేను కొద్దిగా వివరిస్తాను:

"హెలోవరల్డ్" స్క్రిప్ట్ సందేశాన్ని పంపుతుంది: "హలో, వరల్డ్!" బోట్‌తో మా చాట్‌కి.
"దాని పని" స్క్రిప్ట్ సందేశాన్ని పంపుతుంది: "పరీక్ష సరే, ఇది పని చేస్తోంది!" బోట్‌తో మా చాట్‌కి.
ఈ స్క్రిప్ట్‌లు పనిని ప్రదర్శించడం కోసం.
నేను "wolmypc" స్క్రిప్ట్‌ని సాధ్యమైన అమలులలో ఒకటిగా జోడించాను.
స్క్రిప్ట్‌ని అమలు చేసిన తర్వాత, బాట్ చాట్‌కి “వోల్ ఓకే” అని రాస్తుంది.
నిజానికి, మీరు ఖచ్చితంగా ఏదైనా స్క్రిప్ట్‌ని అమలు చేయవచ్చు.

ఒక పనిని సృష్టించండి:

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

చదవగలిగే వీక్షణఇది ఎందుకు స్పష్టంగా లేదు, కానీ ఇది పని చేసే స్క్రిప్ట్ నుండి గ్లోబల్ డేటాను ప్రకటించదు, సిస్టమ్ బూట్ అయినప్పుడు స్క్రిప్ట్ జోడించబడింది.
టెలిగ్రామ్ స్టార్టప్

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

ఎలా పని చేస్తుంది

మా "getUpdates" సందేశాలను ప్రతి 30 సెకన్లకు డౌన్‌లోడ్ చేయండి, ఆపై తెలుసుకోవడానికి అన్వయించండి update_id (సందేశ సంఖ్య) మరియు టెక్స్ట్ (మా జట్లు) మరియు chat_id . డిఫాల్ట్‌గా, getUpdates 1 నుండి 100 సందేశాలను ప్రదర్శిస్తుంది, సౌలభ్యం కోసం, ఆదేశాన్ని చదివిన తర్వాత, మేము సందేశాన్ని తొలగిస్తాము. టెలిగ్రామ్ api సందేశాన్ని చదవడానికి మీకు సందేశ సంఖ్య + 1 అవసరం అని చెబుతుంది

/getUpdates?offset=update_id + 1

Mikrotik rb915 RouterOS 6.37.1లో ప్రతిదీ పరీక్షించబడింది
మీరు ఒకేసారి అనేక ఆదేశాలను పంపితే, అవన్నీ 30 సెకన్ల విరామంతో అమలు చేయబడతాయి.

PS ఆలోచన కోసం కిరిల్ కజకోవ్‌కి మరియు స్క్రిప్ట్‌లతో సహాయం చేసినందుకు నా స్నేహితుడు అలెగ్జాండర్‌కి చాలా ధన్యవాదాలు.

సూచనలు

habrahabr.ru/post/313794
1spla.ru/index.php/blog/telegram_bot_for_mikrotik
core.telegram.org/bots/api
wiki.mikrotik.com/wiki/Manual: స్క్రిప్టింగ్

నవీకరణ:

03:11:16

మెరుగైన స్క్రిప్ట్‌లు:

chat_id కోసం చెక్ జోడించబడింది
మూర్ఖుడి కోసం తనిఖీ చేస్తూ, ఎవరైనా మా బోట్‌కి వ్రాస్తే, అతను అతనికి సమాధానం ఇస్తాడు: "నేను మీతో మాట్లాడలేను. “, ఇది ఆదేశాన్ని గుర్తించకపోతే అదే విధంగా మాకు సమాధానం ఇస్తుంది.
ఆదేశాన్ని అమలు చేసిన తర్వాత, బాట్ చాట్‌కు చందాను తీసివేస్తుంది (wolmypc స్క్రిప్ట్ చూడండి)

DUP

తో దొరికింది 7 స్టంట్‌మ్యాన్ 7 ఫైండ్ కమాండ్ (Mikrotik పరిమితులు) ద్వారా పైన ~14 సందేశాలు ఉన్న ఫైల్ ప్రాసెస్ చేయబడదు. అందువల్ల, భవిష్యత్తులో నేను స్క్రిప్ట్‌ను లువాలో రీమేక్ చేస్తాను, ధన్యవాదాలు 7 స్టంట్‌మ్యాన్ 7 దీని కోసం, నాకు లువా గురించి తెలియదు.

UPD 08.12.2016/XNUMX/XNUMX

టెలిగ్రామ్‌లో, వారు getUpdate యొక్క "ఎగ్జాస్ట్"ని కొద్దిగా మార్చారు. ఇప్పుడు ప్రధాన స్క్రిప్ట్‌లో మీరు 2 నుండి 1కి ఆఫ్‌సెట్ సందేశాన్ని సరిచేయాలి

మార్పులు

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

заменить на :

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

మూలం: www.habr.com