ارسال پیغامهای میکروتیک برروی تلگرام و اطلاع از وضعیت روتر
در این مقاله با نحوه فعال سازی ربات تلگرام و اتصال آن به میکروتیک جهت ارسال لاگ رخدادهایی که اسکریت نویسی شده اند آشنا می شویم
گاهی شرایطی به وجود می آید که در شبکه حضور فیزیکی و همیشگی نداریم و یا به دلیل قرار گرفتن تجهیزات شبکه در مکان دیگری در صورتی که اتصال به اینترنت با مشکل روبرو شده و یا قطعی برق اتفاق بیفتد ارتباط با روتر و شبکه قطع شده و دلیل قطعی ارتباط را متوجه نمیشویم و به دنبال راه حلی جهت مطلع شدن از دلیل قطعی ارتباط هستیم
عموما در شرایطی که شبکه به سیستم مانیتورینگ مجهز باشد می توان در اسرع وقت رخدادهای ثبت شده در نرم افزار مانیتورینگ را مطالعه کرده و یا و به محض برقراری ارتباط از طریق ارسال لاگها به یک پیام رسان عامل بروز مشکل را تشخیص دهیم اما اگر سیستم مانیتورینگ نداشته باشیم می توانیم با اسکریپت نویسی در خصوص اتفاقات مورد نظر و یا نیاز به اطلاع از وقوع یک تغییر و سپس با ارسال لاگ آن به به تلگرام دلیل مشکل پیش آمده را تشخیص دهیم.
ابتدا برای فعال سازی ربات تلگرام به کمک اپلیکیشن تلگرام یا وب ربات BotFather را جستجو می کنیم

روی START کلیک کنید تا لیست دستورات نمایش داده شوند:
دستور /newbot را وارد کنید

یک نام برای ربات خود وارد نمایید. در اینجا نام itdirectbot را وارد کرده ایم

برای مشخص شدن نام مربوط به ربات ساخته شده از شما خواسته می شود یک نام را که انتهای آن به عبارت bot ختم می شود مانند TetirisBot یا tetris_bot وارد کنید این اسامی اختیاری می باشند و در صورتی که قبلا تعریف شده باشد مجددا از شما خواسته می شود نام دیگری با فرمت خواسسته شده وارد کنید
در اینجا نام itdirect_bot را وارد می کنیم

در ادامه یک توکن برای شما تولید می شود این توکن را در جایی یاد داشت کنید برای ارسال لاگها به رباتی که ایجاد کرده اید به این توکن و آی دی ربات تلگرام نیاز خواهیم داشت برای به دست آوردن شناسه یا آی دی ربات به صورت زیر عمل کنید:
برروی لینک توضیحات API ربات تلگرام شوید :
https://core.telegram.org/bots/api
در قسمت Making requests، فرم query از API ربات تلگرام که لازم است با فرمت HTTPS ارسال شود نمایش داده شده است:
https://api.telegram.org/bot<token>/METHOD_NAME
به جای <token> توکنی را در مراحل ساخت ربات ایجاد کردید قرار دهید و به جای METHOD_NAME ، متد مورد نیاز را وارد می کنیم.

برای به دست آوردن شناسه ربات می توانیم یک پیام به ربات ساخته شده ارسال کنیم و با استفاده از متد getupdates شناسه ربات ساخته شده را به دست آوردیم
قبل از به دست آوردن شناسه ربات در تلگرام یک گروه با نام دلخواه ایجاد می کنیم و ربات ساخته شده را به این گروه اضافه می کنیم از این پس لاگ های میکروتیک به این گروه ارسال می شوند:

مخاطبین مورد نظر برای دریافت لاگها را در گروه اضافه کنید

برای ارسال پیغام به ربات ساخته شده @ را به همراه نام ربات وارد می کنیم مثلا اینجا از پیغام Hello @itdirect_bot استفاده کردیم

برای به روز رسانی آدرس API و دریافت شناسه ربات تلگرام انتهای آدرس وارد شده در نوارد آدرس مرورگر از دستور getupdates به جای getMe استفاده می کنیم

دستور getupdates را به جای getMe وارد می کنیم

بعد از ارسال پیغام به ربات ساخته شده مجددا آدرس API تلگرام را در مرورگر refresh می کنیم. در صورتی که id های مختلفی در خروجی به روزرسانی مرورگر دیده شد با جستجوی title که حاوی نام گروه مربوط به ربات ساخته شده است می توانیم id را دریافت کنیم

توجه داشته باشید که میکروتیک برای انتقال لاگها به ربات تلگرام لازم است پینگ آی پی api.telegram.org را داشته باشد و resolve این نام دامنه آی پی آن را نمایش دهد.
نمونه ای از اسکریپتهای مورد استفاده برای ارسال لاگها به ربات تلگرام به صورت زیر هستند
در صورتی که بخواهیم از وضعیت دسترسی یک هاست یا سرور مطلع شویم می توانیم از دستورات اسکریپت زیر به کمک watchdog استفاده کنیم در تنظیمات مروبط به watchdog و تب Host، آی پی هاست یا سرور مورد نظر را وارد می کنیم و در تب Up پیغام مربوط به global telegramMessage را با عبارت Server Online مشخص کرده و در تب Down این عبارت را Server Offline مشخص می کنیم
دستور /system script run SendToTelegram برای فراخوانی اسکریپت SendToTelegram و اجرای آن می باشد.
برای اجرای اسکریپت نیاز به سطح دسترسی های read, write, test, policy دارید.


در قسمت set botid، شناسه توکن و در قسمت set chatid شناسه ربات تلگرام را وارد کنید
SendToTelegram
:global telegramMessage
:local botid
:local chatid
” ” set botid
” -” set chatid
}=if ($telegramMessage != “”) do
/tool fetch url=”https://api.telegram.org/bot$botid/sendMessage\?chat_id=$chatid&text=$telegramMessage” keep-result=no
“”set telegramMessage
{
ToolS-Netwatch
UP
“global telegramMessage “Server Online
system script run SendToTelegram/
Down
“global telegramMessage “Server Offline
system script run SendToTelegram/
در صورتی که بخواهید از ریبوت شدن های غیر منتظره یا مشکلات قطعی برق و از دسترس خارج شدن تجهیزات مطلع شوید می توانید از اسکریپت زیر استفاده کنید
این اسکریپت یک متغیر RebootStatus، ایجاد می کند. زمانی که برای اولین بار اجرا می شود پیغام start after Power Off را به تلگرام ارسال می کند سپس متغیر RebootStatus روی مقدار True تنظیم می شود. برای اجرای اسکریپت باید مجوزهای read, write, test, policy فعال کنید.

برای تنظیم فواصل زمانی اجرای اسکریپت از قسمت Scheduler دستور اجرای اسکریپت را وارد می کنیم و بازه زمانی را هر 5 دقیقه انتخاب می کنیم مجوزهای دسترسی مورد نیاز برای اجرای اسکریپت read, write, policy, test هستند.
<- [Name: CheckPowerOn script] <- [+] <- [Schedule] <- [System]
[Policy: read, write, policy, test] <- [Interval: 00:05:00]


PowerOn
Func: Telegram send message#
}=local TGSendMessage do:
:local tgUrl
“
https://api.telegram.org/bot$Token/sendMessage?chat_id=$ChatID&text=$Text&parse_mode=html
“;
/tool fetch http-method=get url=$tgUrl keep-result=no/
{
Constants#
;global RebootStatus:
“;”local TelegramBotToken:
“;-“local TelegramChatID:
;local DeviceName [/system identity get name]:
local TelegramMessageText “\F0\9F\9F\A2 <b>$DeviceName:</b> start:
.”;after Power Off
Program#
}=if ($RebootStatus != true) do:
$=TGSendMessage Token$
$TelegramBotToken ChatID=$TelegramChatIDText=$TelegramMessageText
;set RebootStatus true:
:”log info “Script CheckPowerOn send Telegram message:
{
در صورتی که بخواهیم زمان و تاریخ UP و Down بودن هاست یا سرور نیز در لاگ ارسالی مشخص شود می توانیم از اسکریپت زیر استفاده کنیم


در ابزار Netwatch می توانیم به جای فراخوانی دستورات اسکریپت خود دستورات را نیز وارد کنیم ولی فراخوانی اسکریپت روش مناسبتری می باشد

دستورات وضعیت Up و Down که ساعت و تاریخ را نیز ارسال می کند به صورت زیر می باشند
UP
local CurDate [/system clock get date]:
local CurTime [/system clock get time]:
“;…-“local CHID:
“;…”local BotID:
;”local HostStatus “UP:
;”local Message “Host $host is $HostStatus at $CurTime $CurDate:
?\tool fetch url=”https://api.telegram.org/bot$BotID/sendmessage/
;”chat_id=$CHID&text=$Message
Down
local CurDate [/system clock get date]:
:local CurTime [/system clock get time]:
;”…-“local CHID:
;”…”local BotID:
;”local HostStatus “down:
;”local Message “Host $host is $HostStatus at $CurTime $CurDate:
?tool fetch url=”https://api.telegram.org/bot$BotID/sendmessage/
;”chat_id=$CHID&text=$Message


