Alexander Koryukin alinisukuma kwa utekelezaji huu
Na maoni katika moja ya vikundi vya VK na Kirill Kazakov:
Ndio, sio salama hata kidogo. Ningependa kuandika bot ya telegram ambayo inakubali tu amri za kuwezesha kutoka kwa akaunti yangu.
Niliamua kuandika bot kama hiyo.
Kwa hiyo, jambo la kwanza la kufanya ni kuunda bot katika telegram.
- Tunapata katika utafutaji akaunti inayoitwa @botfather
- Bonyeza kitufe cha Anza chini ya skrini
- Kisha tunamwandikia amri / newbot
Kisha tunajibu maswali 2 rahisi:
- Swali la kwanza ni jina la bot litakaloundwa. MyMikrotikROuter
- Swali la pili ni jina la utani la bot inayoundwa (inapaswa kuisha na bot) MikrotikROuter_bot
Kwa kujibu, tutapokea ishara ya bot yetu, kwa upande wangu ni:
Tumia ishara hii kufikia API ya HTTP: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Kisha, unahitaji kupata bot yetu katika utafutaji kwa jina @MikrotikROuter_bot na bonyeza kitufe cha Anza.
Baada ya hayo, unahitaji kufungua kivinjari na uingize mstari ufuatao:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Ambapo XXXXXXXXXXXXXXXXXX ni tokeni ya kijibu chako.
Ukurasa unaofanana na ufuatao utafunguliwa:
Tunapata maandishi yafuatayo juu yake:
"chat":{"id":631290,
Kwa hivyo, tunayo habari yote muhimu ya kuandika maandishi ya Mikrotik, ambayo ni:
Tokeni ya kijibu: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Kitambulisho cha gumzo ambapo anapaswa kuandika: 631290
Ili kuangalia, tunaweza kupitia kivinjari:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Inapaswa kupata matokeo:
Kwa urahisi wetu, tutaongeza mara moja amri za bot:
Kutafuta akaunti yenye jina @baba mdogo
Kisha tunamwandikia amri / amri
- Atauliza bot gani
Tunaandika:
@MikrotikROuter_bot
Ongeza amri:
- helloworld< - Ujumbe wa jaribio kwenye gumzo 1
- Ujumbe wa Mtihani wa itsworking kwenye gumzo 2
- wolmypc-wake PC yangu
Sasa ukiandika "/" kwenye gumzo, unapaswa kupata:
Sasa hebu tuendelee kwenye MikroTik.
RouterOS ina matumizi ya koni ya kunakili faili kupitia ftp au http / https, matumizi inaitwa kuchota, ambayo ndio tutatumia.
Fungua terminal na kuingia:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Tafadhali kumbuka kuwa MikroTik inahitaji "Β»kuepuka ishara Β«?' kwenye URL.
Inapaswa kupata matokeo:
Sasa wacha tuendelee kwenye maandishi:
Salamu, Dunia
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}
inafanya kazi
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"
Usisahau kutaja jina sahihi la mac na kiolesura, pamoja na ishara ya bot na chat_id.
Sasa nitaelezea kidogo wanachofanya:
Hati ya "helloworld" inatuma ujumbe: "Habari, ulimwengu!" kwa gumzo letu na roboti.
Hati ya "inafanya kazi" inatuma ujumbe: "Jaribu Sawa, Inafanya Kazi!" kwa gumzo letu na roboti.
Hati hizi ni kwa madhumuni ya maonyesho.
Niliongeza hati ya "wolmypc" kama moja ya utekelezaji unaowezekana.
Baada ya utekelezaji wa hati, bot itaandika "wol OK" kwenye gumzo.
Kwa kweli, unaweza kuendesha hati yoyote kabisa.
Unda jukumu:
Telegramu.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
Mwonekano Unaosomekahaijulikani ni kwa nini, lakini kutoka kwa hati inayofanya kazi haifichui data ya kimataifa, iliongeza hati wakati mfumo unapoanza.
Uanzishaji wa Telegraph
: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;
}
Jinsi gani kazi hii
Pakua ujumbe wetu wa "getUpdates" kila baada ya sekunde 30, kisha uchanganue ili kujua kitambulisho_cha_sasisho (nambari ya ujumbe) na Nakala (timu zetu) na kitambulisho_cha_chat . Kwa chaguo-msingi, getUpdates huonyesha kutoka kwa ujumbe 1 hadi 100, kwa urahisi, baada ya kusoma amri, tunafuta ujumbe. Telegram api inasema ili kusoma ujumbe unahitaji nambari ya ujumbe + 1
/getUpdates?offset=update_id + 1
Zote zilijaribiwa kwenye Mikrotik rb915 RouterOS 6.37.1
Ukituma amri nyingi mara moja, zote zitatekelezwa kwa zamu na muda wa sekunde 30.
PS Shukrani nyingi kwa Kirill Kazakov kwa wazo na rafiki yangu Alexander kwa msaada wa maandishi.
marejeo
sasisha:
03:11:16
Maandishi yaliyoboreshwa:
Imeongeza hundi ya chat_id
Kuangalia mpumbavu, ikiwa mtu anaandika kwa bot yetu, atamjibu: "Siwezi kuzungumza na wewe. ", itatujibu vile vile ikiwa haitambui amri.
Baada ya kutekeleza amri, kijibu hujiondoa kwenye gumzo (tazama hati ya wolmypc)
DUP
Imepatikana na
UPD 08.12.2016/XNUMX/XNUMX
katika Telegraph, inaonekana, walibadilisha kidogo "kutolea nje" kwa GetUpdate. sasa kwenye hati kuu unahitaji kusahihisha urekebishaji wa ujumbe kutoka 2 hadi 1
mabadiliko
:local message [:pick $content ($startLoc + 2) $endLoc] ;
Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Chanzo: mapenzi.com