Code: Select all
# Bot configuration
:global botConfig
:if ([:typeof $botConfig] != "array") do={ :set botConfig [:toarray ""] }
:set ($botConfig->"Telegram") {
"botToken"="XXXXXXXXXXXXXXXXXXXXX";
"mainID"="XXXXXXXXXXXX"
}
# Function to form URL
:global botUrl do={
:global botConfig
:return ("https://api.telegram.org/bot" . ($botConfig->"Telegram"->"botToken"))
}
# Function to serialize array to JSON
:global arrayToJson do={
:local array $1
:local result "{"
:local first true
:foreach key,value in=$array do={
:if ($first) do={:set first false} else={:set result ($result . ",")}
:set result ($result . "\"" . $key . "\": \"" . $value . "\"")
}
:set result ($result . "}")
:return $result
}
# Function to send message
:global sendTelegramMessage
:set sendTelegramMessage do={
:global botUrl
:global botConfig
:global arrayToJson
:local message $1
:local chatId $2
:if ([:typeof $chatId] = "nothing" || $chatId = "") do={
:set chatId ($botConfig->"Telegram"->"mainID")
}
# Protection against empty message
:if ([:len $message] = 0) do={
:put "Skipping empty message"
:return false
}
:local data {"chat_id"=$chatId; "text"=$message}
:local jsonString [$arrayToJson $data]
:put "Sending: $jsonString"
:local url ([$botUrl] . "/sendMessage")
:local result [/tool fetch mode=https \
url=$url \
http-method=post \
http-header-field="Content-Type: application/json" \
http-data=$jsonString \
output=user \
as-value]
:put "Result: $result"
# Fix: extract data into a variable
:local response ($result->"data")
:put "Response: $response"
:return ($result->"status" = "finished")
}
# Test sending
[$sendTelegramMessage "Test message 1"]
[$sendTelegramMessage "Another test message 2" "XXXXXXXXX"]
[$sendTelegramMessage "Test message 3"]
[$sendTelegramMessage "Test message 4"]
Code: Select all
:global sendTelegramMessage
[$sendTelegramMessage "Test message 1"]
[$sendTelegramMessage "Another test message 2" "XXXXXXXXXX"]
[$sendTelegramMessage "Test message 3"]
[$sendTelegramMessage "Test message 4"]
Code: Select all
:global sendTelegramMessage
:put [$sendTelegramMessage "Test message 1"]
:put [$sendTelegramMessage "Another test message 2" "XXXXXXXXXXXX"]
:put [$sendTelegramMessage "Test message 3"]
:put [$sendTelegramMessage "Test message 4"]
Code: Select all
:global sendTelegramMessage
:local result1 [$sendTelegramMessage "Test message 1"]
:put "Result 1: $result1"
:local result2 [$sendTelegramMessage "Another test message 2" "XXXXXXXXXXXX"]
:put "Result 2: $result2"
:local result3 [$sendTelegramMessage "Test message 3"]
:put "Result 3: $result3"
:local result4 [$sendTelegramMessage "Test message 4"]
:put "Result 4: $result4"
I have RouterOS 7.10.2