Skip to content

Instantly share code, notes, and snippets.

@chertov
Created January 19, 2025 21:39
Show Gist options
  • Save chertov/b8e82c0379bd70a37092f894e349b5ac to your computer and use it in GitHub Desktop.
Save chertov/b8e82c0379bd70a37092f894e349b5ac to your computer and use it in GitHub Desktop.
Mikrotik send sms to telegram
# ```Mikrotik
# /system scheduler add name="checkSMS" on-event=smsToTelegram interval=10s
# ```
# smsToTelegram script
:local botToken "1111111111:AAA-A-AAAAAAAAAAAA-AAAAAAAAAAAAAAAA";
:local chatId "11111111";
:local totalSMS [/tool sms inbox print count-only];
:global urlEncode do={
:local string $1;
:local stringEncoded "";
:for i from=0 to=([:len $string] - 1) do={
:local char [:pick $string $i]
:if ($char = " ") do={ :set $char "%20" }
:if ($char = "\"") do={ :set $char "%22" }
:if ($char = "#") do={ :set $char "%23" }
:if ($char = "\$") do={ :set $char "%24" }
:if ($char = "%") do={ :set $char "%25" }
:if ($char = "&") do={ :set $char "%26" }
:if ($char = "+") do={ :set $char "%2B" }
:if ($char = ",") do={ :set $char "%2C" }
:if ($char = "-") do={ :set $char "%2D" }
:if ($char = ":") do={ :set $char "%3A" }
:if ($char = "[") do={ :set $char "%5B" }
:if ($char = "]") do={ :set $char "%5D" }
:if ($char = "{") do={ :set $char "%7B" }
:if ($char = "}") do={ :set $char "%7D" }
:set stringEncoded ($stringEncoded . $char)
}
:return $stringEncoded;
}
:foreach smsId in=[/tool sms inbox find] do={
:local smsSender [/tool sms inbox get $smsId phone];
:local smsText [/tool sms inbox get $smsId message];
:local smsTimestamp [/tool sms inbox get $smsId timestamp];
# :put "smsSender: $smsSender";
:local message ("SMS from: $smsSender\n\n" . \
"[https://t.me/$smsSender](https://t.me/$smsSender)\n\n" . \
"[https://wa.me/$smsSender](https://wa.me/$smsSender)\n\n" . \
"Time: $smsTimestamp\n\n" . \
"Text: $smsText\n\n" \
);
# :put "message: $message";
:local encodedMessage [$urlEncode $message];
# :put "encodedMessage: $encodedMessage";
:local postData ("chat_id=" . $chatId . "&parse_mode=" . "Markdown" . "&text=" . $encodedMessage);
:do {
:local result [/tool fetch url=("https://api.telegram.org/bot" . $botToken . "/sendMessage") \
http-method=post \
http-data=$postData \
mode=https \
output=user \
as-value ];
# keep-result=no \
# Проверка статуса выполнения
:put ("result " . $result->"status");
:if ($result->"status" = "finished") do={
# :put "send ok"
/tool sms inbox remove $smsId;
} else={
:put ("send failed: status = " . $result->"status");
}
} on-error={
:put "Fetch ERROR"
};
:delay 5s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment