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 content ini..

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

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

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

/tool fetch url="https://labkom.co.id/file/script_telegram.rsc" mode=http

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

/import file=script_telegram.rsc

Sumber : coders.in.ua

84 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 ?

Leave a Reply