Untuk membuat Bot Telegram yang bisa di ajak “ngobrol” tentunya anda diharuskan mempunyai web server dan setidaknya mengerti bahasa pemograman PHP, tentunya hal ini cukup rumit apabila anda tidak mempunyai ilmu dasar tentang Pemograman PHP maupun tidak mempunyai web server. Pada tutorial kali ini kita akan membuat Bot Telegram kita bisa di ajak “ngobrol” hanya dengan menggunakan fasilitas System Scheduler dan System Script pada Mikrotik yang bisa dimanfaatkan untuk memonitoring kondisi Mikrotik kita. Untuk menggunakan Bot Telegram PHP silahkan kunjungi Cara Konfigurasi MIKBOTAM untuk Monitoring Mikrotik dengan Menggunakan Bot Telegram PHP

Langkah

Langkah pertama yang perlu anda lakukan yaitu harus mempunyai Bot Telegram, untuk membuatnya silahkan baca artikel sebelumnya yang berjudul : Membuat Bot Telegram Untuk Monitoring Status Access Point Hotspot

Buat Script

Buat script dengan nama “tg_config”

Script ini sebagai konfigurasi awal yang berfungsi agar Mikrotik dan Bot anda bisa saling berkomunikasi, anda tinggal memasukkan API Key dan Chat ID. https://pastebin.com/VRj1KDv6

:put "tg: Load config"

:local config {

"botAPI"="(API BOT TELEGRAM ANDA)";
"defaultChatID"="(CHAT ID BOT ANDA)";
"trusted"="(CHAT ID YANG DIGUNAKAN UNTUK BERKOMUNIKASI DENGAN BOT)";
"storage"="";
"timeout"=1;
}

return $config

Buat script dengan nama “tg_getUpdates”

Skrip memeriksa pesan baru dari bot telegram dan memanggil skrip yang sesuai. Jika perintah tidak dikenal atau sumbernya tidak tepercaya, perintah pada telegram akan diabaikan.

Share to Unlock Contentimage/svg+xml

Silahkan share untuk membuka link download dan membuka scriptnya

Apabila tutorial ini bermanfaat support saya dengan cara share artikel ini.. Terimakasih 

Buat script dengan nama “tg_cmd_cpu”

Script ini bisa dipanggil dengan perintah /cpu, dimana fungsi ini sebagai monitoring dari kondisi Mikrotik anda. https://pastebin.com/SGCX15ac

:local send [:parse [/system script get tg_sendMessage source]]
:local hotspot [:len [/ip hotspot active find]]

:put $params
:put $chatid
:put $from
 
:local text "Router Id:* $[/system identity get name] * %0A\
Uptime: _$[/system resource get uptime]_%0A\
CPU Load: _$[/system resource get cpu-load]%_%0A \
RAM: _$(([/system resource get total-memory]-[/system resource get free-memory])/(1024*1024))M/$([/system resource get total-memory]/(1024*1024))M_%0A\
Voltage: _$[:pick [/system health get voltage] 0 2]V_%0A\
Temp: _$[ /system health get temperature]C_"
 
$send chat=$chatid text=$text mode="Markdown"
:return true

Buat script dengan nama “tg_cmd_hotspotactive”

Script ini bisa dipanggil dengan perintah /hotspot, dimana fungsi ini akan menampilkan jumlah user hotspot yang sedang online.

:local send [:parse [/system script get tg_sendMessage source]]
:local hotspot [:len [/ip hotspot active find]]

:put $params
:put $chatid
:put $from
 
:local text "Router Id:* $[/system identity get name] * %0A\
Hotspot users: _$hotspot online_"
 
$send chat=$chatid text=$text mode="Markdown"
:return true

Buat script dengan nama “tg_cmd_ping”

Script ini bisa dipanggil dengan perintah /ping.

:local send [:parse [/system script get tg_sendMessage source]]
:put $params
:put $chatid
:put $from
#Ping Variables
:local avgRtt;
:local pin
:local pout
:local datetime "$[/system clock get date] $[/system clock get time]"
#Ping it real good
/tool flood-ping 8.8.8.8 count=10 do={
  
:if ($sent = 10) do={
    
:set avgRtt $"avg-rtt"
    
:set pout $sent
    
:set pin $received
  }

}

:local ploss (100 - (($pin * 100) / $pout))

:local logmsg ("Ping Average for 8.8.8.8 - ".[:tostr $avgRtt]."ms - packet loss: ".[:tostr $ploss]."%")

:log info $logmsg

:local text "Router Id:* $[/system identity get name] * %0A\
Tanggal : _$datetime_%0A\
Ping : _8.8.8.8_%0A\
Log : _$logmsg_"
$send chat=$chatid text=$text mode="Markdown"
:return true

Buat schedule

Baca juga : Membuat dan Mengatur User Hotspot Mikrotik dengan Bot Telegram Tanpa PHP

Membuat Firewall Rule pada Mikrotik dengan Menggunakan Bot Telegram tanpa PHP

Schedule ini akan menjalankan setiap 10 detik sekali script dengan nama tg_getUpdates

Tambahkan pada On Event script dibawah ini:

/system script run tg_getUpdates

Import script ke Mikrotik

Download script:

https://github.com/sopyanyayan/scriptmikrotik
https://github.com/dwichan0905/telegram_bot (edited by dwichan0905)

Untuk mempermudah dalam membuat script diatas, lakukan langkah-langkah berikut ini:

Lalu import file “script_telegram.rsc” dengan menggunakan perintah di New Terminal:

/import file=script_telegram.rsc

Sumber : coders.in.ua

169 COMMENTS

    • kalau hanya menampilkan jumlah yg online saja pakai dibawah ini dengan nama tg_cmd_hotspot, nanti dipanggil di bot telegramnya menggunakan perintah /hotspot

      [php]
      :local send [:parse [/system script get tg_sendMessage source]]
      :local hotspot [:len [/ip hotspot active find]]

      :put $params
      :put $chatid
      :put $from

      :local text "Router Id:* $[/system identity get name] * %0A\
      Hotspot users: _$hotspot online_"

      $send chat=$chatid text=$text mode="Markdown"
      :return true
      [/php]

  1. pak kalau kita mau tambah perintah masukkinnya bagaimana? misal kita akan menjalankan script tertenetu langsung dipanggil lewat telegram

    • dengan mengetikan di telegram dengan perintah /hi, atau /cpu untuk monitoring kondisi cpu,, apabila ingin menambahkan script lain yg akan di jalankan di telegram buat script tersebut dengan nama tg_cmd_(namascript), lalu untuk menjalankan di telegram dengan perintah /namascript

      • alhamdulillah sudah jalan, saya menjalankan perintah sederhana dengan script: /ip hotspot ip-binding set numbers=13 type=regular (untuk mengubah binding ke regular) dan /ip hotspot ip-binding set numbers=13 type=bypassed (untuk bypass) . cuma saya gak tau cara nambahin agar telegram dapat respond bahwa script tersebut status regular/bypass, kalau dari script2 punya bapak diatas adakah sebagai contoh buat script ini? terimakasih

  2. Pak mau tanya lagi, didalam group saya tambahkan user lain, kenapa ketika user tersebut merintah bot milik kita gak bisa ya? apa ada yang salah dengan setingan group? atau memang bot hanya bisa diperintah oleh sipembuat? Terimakasih

  3. Om, mau tanya.. Router Utama saya dikasih DNS Statik ke Switch_A –> 192.168.88.1
    menggunakan terminal, bisa ping menggunakan “ping Switch_A” dan responnya reply.

    Yang jadi pertanyaan, apakah menggunakan bot telegram bisa ping menggunakan Switch_A?
    saya coba hanya bisa menggunakan IP 192.168.88.1.

    Mohon pencerahannya.

    Terima kasih..

    • Masih belum faham gan, scriptnya nanti disimpan di rrouter apa di switch_A.. switch_A ini apakah sebuah dns name static dengan ip 192.168.88.1? kalau untuk ping apakah menggunakan ip atau dns name static saya rasa sama saja

  4. Halo bang….
    Kalau script buat monitoring sistem log di mikorik gimana ya bang?….
    maunya kalau ada new log di mikrotik itu bisa send 1 baris otomatis ke telegram.
    Thanks responnya

  5. Permisi mas, Kok ini yang bisa cuma ping ya ? hi maupun cmd salah , padahal sudah saya input script maupun di telegram bot nya benar

  6. pak mau nanya, waktu coba jalanin di terminal yg /system script run tg_getUpdates kok ktnya syntax error (line 30 column 27) ya, yg salah dmn nya ya pak?

  7. permisi, thanks tutornya sebebelumnya, tapi saya misal ingin membuat command input ping dengan ip sesuai keinginan saja bagaimana pak. misal: ping 192.168.1.100, nanti muncul result ping ke ip tsb. jadi ip-nya ditentukan waktu ngetik, kasarannya ping sembarang device dude lewat telegram. terima kasih.

    • :local send [:parse [/system script get tg_sendMessage source]]
      :local param1 [:pick $params 0 [:find $params " "]]
      :local param2 [:pick $params ([:find $params " "]+1) [:len $params]]
      
      :put $params
      :put $param1
      :put $param2
      :put $chatid
      :put $from
      
      :if ($param1="ip") do={
      #Ping Variables
      :local avgRtt;
      :local pin
      :local pout
      :local datetime "$[/system clock get date] $[/system clock get time]"
      #Ping it real good
      /tool flood-ping $param2 count=10 do={
        
      :if ($sent = 10) do={
          
      :set avgRtt $"avg-rtt"
          
      :set pout $sent
          
      :set pin $received
        }
      
      }
      
      :local ploss (100 - (($pin * 100) / $pout))
      
      :local logmsg ("Ping Average for $param2 - ".[:tostr $avgRtt]."ms - packet loss: ".[:tostr $ploss]."%")
      
      :log info $logmsg
      
      :local text "Router Id:* $[/system identity get name] * %0A\
      Tanggal : _$datetime_%0A\
      Ping : _$param2_%0A\
      Log : _$logmsg_"
      $send chat=$chatid text=$text mode="Markdown"
      :return true
      }
      

      sudah saya tes berhasil.. dengan perintah /ping ip (ip addressnya)
      script bisa di copas disini https://pastebin.com/7N4XmQfr
      /ping ip 8.8.8.8

  8. alhamdulillah, jazaakallahukhair, manteb pak, berhasil saya coba,
    sebelumnya sempet bingung kok ip nya 88 semua waktu ping, eh ternyata script diatas di replace ke ‘tg_cmd_ping”, kirain buat script baru, hehehe. terima kasih master.

  9. Selamat Pagi Pak Yayan Sopyan, saya ingin bertanya perihal Script Hostpot dan CPU itu tidak jalan pak, Untuk Error nya berupa seperti ini pak, Kira-kira errornya di bagian mana ya pak ? (Untuk yang bintang-bintang itu saya sensor pak) Terimakasih

    Finished to read updates.
    message id=52
    update id=**********
    from id=*********
    first name=*****
    last name=
    username=
    in chat=***********
    command=/cpu
    cmd=
    params=
    Try to invoke external script tg_cmd_cpu
    ********
    Reyota
    ambiguous value of value-name, more than one possible value matches input

  10. Saya Pakai Router OS v6.36 pak

    untuk hasil pengecek an system healt seperti ini pak hasilnya

    system health print
    state: disabled
    state-after-reboot: enabled

  11. Pak saya ingin Bertanya perihal penambahan parameter pada script tersebut, misal saya ingin menambahkan param4 dan param5 apa yang haru saya edit Pak Terimakasih. apakah yang harus saya pelajari agar paham perihal penambahan parameter tersebut

    :local send [:parse [/system script get tg_sendMessage source]]
    :local param1 [:pick $params 0 [:find $params ” “]]
    :local param2 [:pick $params ([:find $params ” “]+1) [:len $params]]
    :local param3 [:pick [:pick $params ([:find $params ” “]+1) [:len $params]] ([:find [:pick $params ([:find $params ” “]+1) [:len $params]] ” “]+1) [:len [:pick $params ([:find $params ” “]+1) [:len $params]]]]

    :if ([:len [:find $param2 ” “]]>0) do={
    :set param2 [:pick [:pick $params ([:find $params ” “]+1) [:len $params]] 0 [:find [:pick $params ([:find $params ” “]+1) [:len $params]] ” “]]
    } else={
    :set param3 “”
    }

    :put $params
    :put $param1
    :put $param2
    :put $param3
    :put $chatid
    :put $from

    • Kira-kira begini di bot telegram ketika mengetikan perintah “/tes dd dd dd dd” ketika script dijalankan kira kira muncul seperti ini. jadi untuk menambahkan param4 di edit saja dari param3

      Finished to read updates.
      message id=400
      update id=xxx
      from id=xxxx
      first name=Yayan
      last name=(Labkom.co.id)
      username=LabkomTV
      in chat=xxx
      command=/tes dd dd dd dd
      cmd=tes
      params=dd dd dd dd
      Try to invoke external script tg_cmd_tes
      no such item

      baris ini diabaikan saja dulu karena ini hanya kondisional saja kalau param terbaca 0, atau bisa dicoba di hapus biar ga bingung
      :if ([:len [:find $param2 ” “]]>0) do={
      :set param2 [:pick [:pick $params ([:find $params ” “]+1) [:len $params]] 0 [:find [:pick $params ([:find $params ” “]+1) [:len $params]] ” “]]
      } else={
      :set param3 “”
      }

      • Sebentar Pak saya masih kurang mengerti apa yang harus ditambahkan saat kita mendeklarasikan :local param4, yang dasarnya kita dapat dari :local param3

  12. Saya Coba Menambahkan 5 Param pada script pak yayan sopyan, yang menjelaskan tentang ppp . tetapi hasilnya seperti ini pak. ketika saya mengirim pesan seperti ini /ppp test2 test2 default 172.17.17.1 172.17.17.2

    Finished to read updates.
    message id=89
    update id=xxxxxxxxx
    from id=xxxxxxxxxx
    first name=Reyota
    last name=
    username=
    in chat=xxxxxxxxx
    command=/ppp test test default 172.17.17.1 172.17.17.2
    cmd=
    params=
    Try to invoke external script tg_cmd_ppp
    test test default 172.17.17.1 172.17.17.2
    test
    test
    default 172.17.17.1/32 172.17.17.2/32
    default 172.17.17.1/32 172.17.17.2/32
    default 172.17.17.1/32 172.17.17.2/32
    954109239
    Reyota
    invalid value for argument address

    • ini perintah untuk menambahkan di ppp secret (nama, password, profile, local address, remote address) seperti itu ya? kalau di coba di new terminal udah benar belum perintahnya? kayanya variabel address dia ga di kenali, coba pakai “local”?

      • Jika Saya coba secara langsung di terminal benar seperti itu pak tulisannya
        /ppp secret add name=test password=test service=pptp pro
        file=default local-address=172.17.17.1 remote-address=172.17.17.2 dan bisa terbuat di secret

        untuk penambahan di script botnya seperti ini pak di script line paling bawah
        :if ($param1!=”password” and $param1!=”profile” and $param1!=”enable” and $param1!=”disable” and $param1!=”delete” and $param1!=”print”) do={
        /ppp secret add name=$param1 password=$param2 service=pptp profile=$param3 local-address=$param4 remote-address=$param5
        $send chat=$chatid text=(“User PPP %0AUsername: $param1 %0APassword: $param2 %0AProfile: $param3 %0ABerhasil dibuat…”) mode=”Markdown”
        }

  13. kok saya di sistem scheduler nya ga muncul ya? terus pas import file nya muncul ini “input does not match any value of policy” boleh dibantu pak?

  14. Mau Tanya:
    1. untuk menambahkan fungsi status User itu Enable dan Disable di Tab USER bagaimana ya?
    2. di Mikrotik rb750gr3 saya os Winbox v6.38.7, dibagian HotspotUser – Limits, itu kok tidak bisa input quota 1G. 1MiB/1MB, tapi harus isi 1073741824
    itu karena OS nya kah? atau karena apa ya?

    • 1. :local disable (“*Uptime:* “.[/ip hotspot user get value-name=”disable” $activeIndex].”%0A”), tinggal ditambahkan saja di variabel set output, nanti nilai yg muncul true/false
      2. Coba isi dengan 1G/1M/1K, kalau memang ga bisa bisa jadi dari os nya

      • :if ($params=”all”) do={
        :local output
        :foreach activeIndex in=[/ip hotspot user find] do={
        :local userName (“*Username:* “.[/ip hotspot user get $activeIndex name].”%0A”)
        :local userPassword (“*Password:* “.[/ip hotspot user get $activeIndex password].”%0A”)
        :local userProfile (“*Profile:* “.[/ip hotspot user get $activeIndex profile].”%0A”)
        :local userBytesOut (“*Quota Used:* “.[/ip hotspot user get $activeIndex bytes-out].”%0A”)
        :local userLimitBytesOut (“*Total Quota:* “.[/ip hotspot user get $activeIndex limit-bytes-out].”%0A”)
        :set output ($output.$userName.$userPassword.$userProfile.$userBytesOut.$userLimitBytesOut.”%0A”)
        }
        $send chat=$chatid text=(“$output”) mode=”Markdown”
        }

        :local disable (“*Uptime:* “.[/ip hotspot user get value-name=”disable” $activeIndex].”%0A”), tinggal ditambahkan saja di variabel set output, nanti nilai yg muncul true/false

        dimasukkan dibagian mananya?
        saya ingin tambahkan status:
        User : Enable / Disable

        • sebelum baris :set output ($output.$userName.$userPassword.$userProfile.$userBytesOut.$userLimitBytesOut.”%0A”)

          kemudian tambahkan variabel di baris ini, kira-kira menjadi seperti ini :set output ($output.$userName.$userPassword.$userProfile.$userBytesOut.$userLimitBytesOut.$disable.”%0A”)

  15. Mas mau tanya dong itu kan di telegram kita ketik perintah “/hi” atau perintah di menu yang tersedia, nah kalau misalkan mau tambah perintah baru “/reset” nambah perintahnya dimana ya? File nya kah?

  16. Mas kalau mau ditambah perintah untuk di telegram nya gimana ya? Kan disitu pakai “/hi” kalau mau ditambah baru apa harus dari scriptnya?

  17. selamat sore pak yayan .. mau tanya tentang cara mengetahui besaran bandwidth yang telah user aktif gunakan menggunakan bot telegram? apakah bisa ?

  18. {“ok”:true,”result”:[{“update_id”:174506549,
    “message”:{“message_id”:67,”from”:{“id”:579615753,”is_bot”:false,”first_name”:”Dalih”,”last_name”:”Septa”,”username”:”Dalih_Septa”,”language_code”:”en”},”chat”:{“id”:-334782370,”title”:”VOUCHER MUNENG”,”type”:”group”,”all_members_are_administrators”:true},”date”:1576796245,”text”:”/cpu”,”entities”:[{“offset”:0,”length”:4,”type”:”bot_command”}]}}]}

    klau dari laporan update ini, mana yg dinamakan chat id dan trusted om?
    soalnya belum berhasil.
    mohon bimbingannya.

  19. bang kalo perintah untuk ngemunculin jumlah user yg hanya konek hotspot(tidak login) sama jumalah user yg login aja gimana bang caranya? Mohon bantuannya bang.

      • sy sudah coba traceroute dg max-hops=10 dan count=10. Cuman untuk menampilkan hasil traceroutenya ini yang masih bingung seperti apa. Minimal memunculkan list ip addressnya saja. Mohon pencerahannya pak…

          • mantab pak. Berarti tinggal cari cara kirim file txt nya ke email atau bot telegram y? Ada masukan pak?

          • kalau kirim file ke email gampang bisa pake cara ini
            /tool e-mail send to=”alamat email” subject=”subjeknya” body=”isi email” file=”TRACEROUTE.txt” start-tls=yes
            kalau kirim file lewat telegram belum nyoba hehe

          • kalau pakai /tool fetch url=”https://api.telegram.org/botXXXX/sendMessage\?chat_id=-YYYYYY ….bisa g y?
            Lum coba juga krn kurang paham codingnya pak..:)

          • Nemu source code ini: /tool fetch url=”https://api.telegram.org/botXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX/sendDocument\?chat_id=XXXXXXXXX” http-method=post http-data=”document=http://test.ru/test.jpg” keep-result=no;

            tapi statusnya failure (400 bad request)

  20. pak minta bantuannya … kok saya menjalankan script seperti ini tidak bisa ya pak untuk merubah shared user pada user profile …? mohon bantuannya ..
    “:if ($param1=”shared”) do={
    /ip hotspot profile set shared-users=$param3 [find name=$param2]
    /ip hotspot user profiles remove [find name=$param2]
    $send chat=$chatid text=(“User: $param2 SHARED USER diganti menjadi $param3…”) mode=”Markdown”
    }”

    • Maksudnya merubah nilai shared-users di user profile?

      jadi scriptnya cukup pakai yg ini saja

      /ip hotspot user profile set shared-users=$param3 [find name=$param2]

      kira-kira menjadi seperti ini

      :if ($param1="shared") do={
      /ip hotspot user profile set shared-users=$param3 [find name=$param2]
      $send chat=$chatid text=("User: $param2 SHARED USER diganti menjadi $param3…") mode="Markdown"
      }

      • pak minta bantuannya .. saya jalankan script dibawah ini untuk menampilkan userprofile yang ada kok gak bisa ya pak?.. mohon bantuannya..
        :if ($params=”view”) do={
        :local output
        :foreach activeIndex in=[//ip hotspot user profile find] do={
        :local user (“*Name*”.[/ip hotspot user profile get value-name=”name” $activeIndex].”%0A”)
        :local rate (“*Rate*”.[/ip hotspot user profile get value-name=”rate-limit” $activeIndex].”%0A”)
        :set output ($output.$user.$rate.”%0A”)
        }
        $send chat=$chatid text=(“$output”) mode=”Markdown”
        }

          • tetap nda bisa pak
            :if ($params=”view”) do={
            :local output
            :foreach activeIndex in=[/ip hotspot user profile find] do={
            :local user (“*Name*”.[/ip hotspot user profile get value-name=”name” $activeIndex].”%0A”)
            :local rate (“*Rate*”.[/ip hotspot user profile get value-name=”rate-limit” $activeIndex].”%0A”)
            :set output ($output.$user.$rate.”%0A”)
            }
            $send chat=$chatid text=(“$output”) mode=”Markdown”
            }

  21. terus kalau peritah reboot di terminal keluarnya begini
    Try to invoke external script tg_cmd_reboot
    Reboot, yes? [y/N]:
    kenapa ya Pak?

  22. pak kalo untuk run script tertentu di mikrotik lewat telegram gimana script’a pak, belajar sana sini masih gak mudeng juga

    • Kalau hanya menjalankan mudah,tinggal ubah scriptnya menjadi tg_cmd_namascript, kemudian untuk di bot telegram perintahnya jadi /namascript..untuk mengirimkan pesan ke bot bisa menggunakan tool fetch url atau mencontoh script yg lain

  23. [[email protected]] > system script run tg_getUpdates

    trusted=717170620;trusted=-265368341
    botID=1069384228:AAFS1hXWIBjF6ma44KGYcbQmo7Q9fYn7CAw
    storage=
    timeout=5
    Reading updates…
    >> /tool fetch dst-path=”tg_get_updates.txt” url=”https://api.telegram.org/bot1069384228:AAFS1hXWIBjF6ma44KGYcbQmo7Q9fYn7CAw/getUpdates?timeout=5&limit=1″
    Error getting updates
    Failed get updates

    Salahnya dimana yah Pak,

  24. Sama aja Pak, pertama tes yg di import, kemudian tes yg copy paste, hasilnya Sama, tp kalau tes perintah yg lain, bisa. Langsung Masuk di telegram, cuman tg_Updates aja yg gak mau. 😞

      • Kalau saya tes ketik /start di bot telegream, gak ada balasan, kalau saya tes lewat comand mikrotik, /system script run tg_getUpdates

        trusted=717170620;trusted=-265368341
        botID=1069384228:AAFS1hXWIBjF6ma44KGYcbQmo7Q9fYn7CAw
        storage=
        timeout=5
        Reading updates…
        >> /tool fetch dst-path=”tg_get_updates.txt” url=”https://api.telegram.org/bot1069384228:AAFS1hXWIBjF6ma44KGYcbQmo7Q9fYn7CAw/getUpdates?timeout=5&limit=1″
        Error getting updates
        Failed get updates
        .
        saya pakai yg punya pak yayan,

        :global TGLASTMSGID
        :global TGLASTUPDID

        :local fconfig [:parse [/system script get tg_config source]]
        :local http [:parse [/system script get func_fetch source]]
        :local gkey [:parse [/system script get tg_getkey source]]
        :local send [:parse [/system script get tg_sendMessage source]]

        :local cfg [$fconfig]
        :local trusted [:toarray ($cfg->”trusted”)]
        :local botID ($cfg->”botAPI”)
        :local storage ($cfg->”storage”)
        :local timeout ($cfg->”timeout”)

        :put “cfg=$cfg”
        :put “trusted=$trusted”
        :put “botID=$botID”
        :put “storage=$storage”
        :put “timeout=$timeout”

        :local file ($storage.”tg_get_updates.txt”)
        :local logfile ($storage.”tg_fetch_log.txt”)
        #get 1 message per time
        :local url (“https://api.telegram.org/bot”.$botID.”/getUpdates?timeout=$timeout&limit=1″)
        :if ([:len $TGLASTUPDID]>0) do={
        :set url “$url&offset=$($TGLASTUPDID+1)”
        }

        :put “Reading updates…”
        :local res [$http dst-path=$file url=$url resfile=$logfile]
        :if ($res!=”success”) do={
        :put “Error getting updates”
        return “Failed get updates”
        }
        :put “Finished to read updates.”

        :local content [/file get [/file find name=$file] contents]

        :local msgid [$gkey key=”message_id” text=$content]
        :if ($msgid=””) do={
        :put “No new updates”
        :return 0
        }
        :set TGLASTMSGID $msgid

        :local updid [$gkey key=”update_id” text=$content]
        :set TGLASTUPDID $updid

        :local fromid [$gkey block=”from” key=”id” text=$content]
        :local username [$gkey block=”from” key=”username” text=$content]
        :local firstname [$gkey block=”from” key=”first_name” text=$content]
        :local lastname [$gkey block=”from” key=”last_name” text=$content]
        :local chatid [$gkey block=”chat” key=”id” text=$content]
        :local chattext [$gkey block=”chat” key=”text” text=$content]

        :put “message id=$msgid”
        :put “update id=$updid”
        :put “from id=$fromid”
        :put “first name=$firstname”
        :put “last name=$lastname”
        :put “username=$username”
        :local name “$firstname $lastname”
        :if ([:len $name]<2) do {
        :set name $username
        }

        :put "in chat=$chatid"
        :put "command=$chattext"

        :local allowed ( [:type [:find $trusted $fromid]]!="nil" or [:type [:find $trusted $chatid]]!="nil")
        :if (!$allowed) do={
        :put "Unknown sender, keep silence"
        :return -1
        }

        :local cmd ""
        :local params ""
        :local ltext [:len $chattext]

        :local pos [:find $chattext " "]
        :if ([:type $pos]="nil") do={
        :set cmd [:pick $chattext 1 $ltext]
        } else={
        :set cmd [:pick $chattext 1 $pos]
        :set params [:pick $chattext ($pos+1) $ltext]
        }

        :local pos [:find $cmd "@"]
        :if ([:type $pos]!="nil") do={
        :set cmd [:pick $cmd 0 $pos]
        }

        :put "cmd=”
        :put “params=”

        :global TGLASTCMD $cmd

        :put “Try to invoke external script tg_cmd_$cmd”
        :local script [:parse [/system script get “tg_cmd_$cmd” source]]
        $script params=$params chatid=$chatid from=$name

  25. thx om scriptnya, misal kasus gini gmn
    di ip hotspot binding
    address:192.168.1.1 type=bypassed comment=rumah1
    address:192.168.1.2 type=bypassed comment=rumah2
    di telegram cukup ketik
    /ping rumah1
    bisa nggak seperti itu? parameter apa aja yg harus dirubah/ditambahi
    terima kasih sebelumnya

  26. Mas, kalau di run manual scriptnya jalan, tapi kalau di triger via TG, dan run manual schedulernya, kenapa begini ya.. padahal sebelumnya normal, dan tidak ada perubahan

    system script run tg_getUpdates

    Finished to read updates.
    No new updates
    0

  27. Finished to read updates.
    No new updates
    0

    ada solusi pak. di run manual via terminal begini.. data sudah valid padhaal

  28. selmat malam mas..
    terimakasih sebelumnya script nya sangat bermanfaat..
    cuman setelah saya terapkan log mikrotik terus menerus muncul kayak gini,
    cara mengatasinya gimana bang?
    telegram configuration file has ben loaded
    ftch file tg_getaupdate download
    telegram configuration file has ben loaded
    ftch file tg_getaupdate download
    telegram configuration file has ben loaded
    ftch file tg_getaupdate download
    telegram configuration file has ben loaded
    ftch file tg_getaupdate download

Leave a Reply