Checks on schedule script for example every 5 minutes all wan with comment From WAN 1, 2, 3.
If finds unreachable wan next step finds the right comment and after sends Telegram notification and email
with details about unreachable Wan.
:local emailTo "XXXXXX@gmail.com"
:local emailSubject "Unreachable Gateway Detected"
:local emailBody "An unreachable gateway has been detected."
:local DeviceName [/system identity get name]
:local commentFilters ("From WAN 1", "From WAN 2", "From WAN 3")
:foreach commentFilter in=$commentFilters do={
:local unreachableGateways [:toarray [/routing route find where unreachable and comment=$commentFilter]]
:if ([:len $unreachableGateways] > 0) do={
:log warning ("An unreachable gateway has been detected " . $commentFilter)
# START Send Telegram Module
:local MessageText "\E2\9A\A0 <b>Router $DeviceName:</b>%0AAn unreachable gateway has been detected $commentFilter"
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]]
$SendTelegramMessage MessageText=$MessageText
# END Send Telegram Module
/tool e-mail send to="XXXXXX@gmail.com" subject="\E2\9A\A0 [$DeviceName] $emailSubject $commentFilter" body="$emailBody"
}
}
If you have problem to run it
try to add manual the name
of your device for example [Main router 3 wan failover] into
[/system identity get name]
i dont know why but works ok on 3-4 different Mikrotik models
but on RB960 works only manual.
For Telegram add one more script because to call from above script with your account etc with name MyTGBotSendMessage
Inside MyTGBotSendMessage add yours
:local BotToken "XXXXXXXXXXXXXXX";
:local ChatID "XXXXXXXXXXXXXXX";
:local parseMode "HTML";
:local SendText $MessageText;
/tool fetch url="https://api.telegram.org/bot$BotToken/sendMessage\?chat_id=$ChatID&parse_mode=$parseMode&text=$SendText" keep-result=no;
:log info "==> Send Telegram message";
Maybe someone else help me to complete the script with “back online” procedure because
with bellow code sends many email and notifications with back online
else={
:if ([:len $gatewayWasUnreachable] > 0) do={
:log info ("Gateway $commentFilter is now online")
i use those rutes in my setup
/ip route add comment="From WAN 1" disabled=no distance=1 dst-address=208.67.220.220/32 gateway=10.30.30.1 pref-src="" routing-table=main scope=10 suppress-hw-offload=no target-scope=10
/ip route add comment="From WAN 2" disabled=no distance=1 dst-address=208.67.222.222/32 gateway=10.40.40.1 pref-src="" routing-table=main scope=10 suppress-hw-offload=no target-scope=10
/ip route add comment="From WAN 3" disabled=no distance=1 dst-address=1.1.1.1/32 gateway=192.168.20.1 pref-src="" routing-table=main scope=10 suppress-hw-offload=no target-scope=10
/ip route add check-gateway=ping comment="From WAN 3" disabled=no distance=3 dst-address=0.0.0.0/0 gateway=1.1.1.1 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=11
/ip route add check-gateway=ping comment="From WAN 2" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=208.67.222.222 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=11
/ip route add check-gateway=ping comment="From WAN 1" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=208.67.220.220 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=11
Thank you