Error scripts TG

Hello, please help me solve this problem.

:local botToken "TOKEN_ID";
:local allowedChatId "CHAT_ID";
:local apiUrl "api.telegram.org";
:local fetchResultFileName "tg_updates.json";
:local result "";
:local fileFound "";
:local fullUrl ("https://" . $apiUrl . "/bot" . $botToken . "/getUpdates");

/tool fetch url=$fullUrl keep-result=no file=$fetchResultFileName;
:delay 1s;

:set fileFound [/file find name=$fetchResultFileName];
:if ([:len $fileFound] > 0) do={
    :set result [/file get $fileFound contents];
    /file remove $fetchResultFileName;
}; 

:if ([:len $result] > 0) do={
    :local data [:parse $result];
    :local updates ($data->"result");

    :foreach update in=$updates do={
        :local message ($update->"message");
        :if ([:len $message] > 0) do={
            :local chatId ($message->"chat"->"id");
            :local text ($message->"text");

            :if ($chatId = $allowedChatId) do={
                :if ($text = "/delete_wg") do={
                    /interface wireguard remove [find name="wg-test"];
                };
            };
        };
    };
};

RouteOs 7.19.3

Error
executing script from winbox failed, please check it manually
expected end of command (line 9 column 41)


The error is on line 9, column 41, so:

1234567890123456789012345678901234567890123456789
                                        |
/tool fetch url=$fullUrl keep-result=no file=$fetchResultFileName;

Are you sure that "file" is a valid parameter in "fetch"?

Maybe you want to use src-path instead?

AI detected :slight_smile:

1 Like

I fixed the script; it runs, but doesn't do anything. I get a message in the logs:
"No new updates in this run (possibly empty result array)."
I'm also attaching the debug log. It connects to the group, receives the message, but nothing happens.

:local botToken "TOKEN";
:local allowedChatId "ID";
:local apiUrl "api.telegram.org";
:local wgInterfaceName "wg-test"
:local lastUpdateId 0;
:local result "";
:local fullUrl "";
/log info "Telegram Bot Script: Starting execution.";
:set fullUrl ("https://" . $apiUrl . "/bot" . $botToken . "/getUpdates?offset=" . $lastUpdateId);
:set result [/tool fetch url=$fullUrl output=user as-value];
:if (($result->"status") = "finished") do={
    :local data [:parse ($result->"data")];
    :local updates ($data->"result");
    :if ([:typeof $updates] = "array" || [:typeof $updates] = "list") do={
        :foreach update in=$updates do={
            :set lastUpdateId ($update->"update_id" + 1);
            :local message ($update->"message");
            :if ([:len $message] > 0) do={
                :local chatId ($message->"chat"->"id");
                :local text ($message->"text");
                /log info ("Processing message from Chat ID: " . $chatId . ", Text: " . $text);
                :if ([:tonum $allowedChatId] = $chatId && [:tolower $text] = "/delete_wg") do={
                    /log info "Command /delete_wg received and authorized. Attempting to remove interface.";
                    :if ([/interface wireguard find name=$wgInterfaceName] != "") do={
                        /interface wireguard remove [find name=$wgInterfaceName];
                        /log info ("Interface " . $wgInterfaceName . " removed successfully.");
                    } else={
                        /log info ("Interface " . $wgInterfaceName . " not found. Cannot remove.");
                    }
                };
            };
        };
    } else={
       /log info "No new updates found in this run (empty result array from API).";
    };
} else={  
   /log error ("Fetch failed: " . $result->"status" . ", Error: " . $result->"error");
}
:if ($lastUpdateId > 0) do={
    /log info ("Confirming updates processed up to offset " . $lastUpdateId);
    :set fullUrl ("https://" . $apiUrl . "/bot" . $botToken . "/getUpdates?offset=" . $lastUpdateId);
    :do {:set result [/tool fetch url=$fullUrl output=none as-value]} on-error={ :log error "Network error during offset confirmation request." };
}
/log info "Telegram Bot Script: Finished execution.";




Download from https://api.telegram.org/botTOKEN/getUpdates?offset=0 to RAM FINISHED
No new updates in this run (possibly empty result array).

API Response: {"ok":true,"result":[{"update_id":866675605,
"message":{"message_id":5235,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765177238,"new_chat_title":"LAN events"}},{"update_id":866675606,
"message":{"message_id":5292,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765192337,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":
866675607,
"message":{"message_id":5294,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765192619,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675608,
"message":{"message_id":5294,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765192619,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675608,
:866675609,
"message":{"message_id":5303,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765193863,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"text_link","url":"tg://bot_command?command=delete_wg"}]}},{"update_id":866675610,
"message":{"message_id":5307,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765194196,"text":"/delete_wg","entities":[{"offset":0,"length
":10,"type":"bot_command"}]}},{"update_id":866675611,
"message":{"message_id":5309,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765194457,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675612,
"message":{"message_id":5378,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765261901,"text":"/delete_wg","entities":[{"offset":0,"lengt
h":10,"type":"bot_command"}]}},{"update_id":866675613,
"message":{"message_id":5380,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765262075,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675614,
"message":{"message_id":5383,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765262212,"text":"/delete_wg","entities":[{"offset":0,"leng
th":10,"type":"bot_command"}]}},{"update_id":866675615,
"message":{"message_id":5385,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765262453,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675616,
"message":{"message_id":5388,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765262716,"text":"/delete_wg","entities":[{"offset":0,"len
gth":10,"type":"bot_command"}]}},{"update_id":866675617,
"message":{"message_id":5389,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765262967,"text":"/delete_wg","entities":[{"offset":0,"length":10,"type":"bot_command"}]}},{"update_id":866675618,
"message":{"message_id":5393,"from":{"id":ID_ADMIN,"is_bot":false,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439","username":"NAME_ADMIN","language_code":"ru"},"chat":{"id":ID_GROUP,"title":"LAN events","type":"group","all_members_are_administrators":true,"accepted_gift_types":{"unlimited_gifts":false,"limited_gifts":false,"unique_gifts":false,"premium_subscription":false}},"date":1765263367,"text":"/delete_wg","entities":[{"offset":0,"le
ngth":10,"type":"bot_command"}]}}]}





   

At first look, it seems that guess AI doesn’t know about deserialize command. data variable is string until it’s deserialized from JSON (using :parse command for data is wrong, is not meant for deserialization), also list type doesn’t exists so it is unnecessary to check such type - [:typeof $updates] = "list". There I stopped analyzing…

Yep, the "else" that outputs "No new updates in this run (possibly empty result array)." seems to be the one corresponding to this "if":

:if ([:typeof $updates] = "array" || [:typeof $updates] = "list") do={

so the first issue is in that condition.

Thanks everyone. The code works; the /delete wg command deletes the interface.

:local botToken "MY_TOKEN";
:local allowedChatId "ID_GROUP";
:local apiUrl "api.telegram.org";
:local wgInterfaceName "wg-test"

:local lastUpdateId 0;
:local result "";
:local fullUrl "";
/log info "Telegram Bot Script: Starting execution.";

:set fullUrl ("https://" . $apiUrl . "/bot" . $botToken . "/getUpdates?offset=" . $lastUpdateId);
:set result [/tool fetch url=$fullUrl output=user as-value];
:if (($result->"status") = "finished") do={
	:local data [:deserialize from=json value=($result->"data")];
	:local updates ($data->"result");
	:foreach update in=$updates do={
		:set lastUpdateId ($update->"update_id" + 1);
		:local message ($update->"message");
		
		:if ([:len $message] > 0) do={
			:local chatId ($message->"chat"->"id");
			:local text ($message->"text");
			/log info ("Processing message from Chat ID: " . $chatId . ", Text: " . $text);
			
			:if ([:tonum $allowedChatId] = $chatId && $text = "/delete_wg") do={
				/log info "Command /delete_wg received and authorized. Attempting to remove interface.";
				:if ([/interface wireguard find name=$wgInterfaceName] != "") do={
					/interface wireguard remove [find name=$wgInterfaceName];
					/log info ("Interface " . $wgInterfaceName . " removed successfully.");
				} else={
					/log info ("Interface " . $wgInterfaceName . " not found. Cannot remove.");
				}
			};
		};
	};
} else={  
   /log error ("Fetch failed: " . $result->"status" . ", Error: " . $result->"error");
}
:if ($lastUpdateId > 0) do={
    /log info ("Confirming updates processed up to offset " . $lastUpdateId);
    :set fullUrl ("https://" . $apiUrl . "/bot" . $botToken . "/getUpdates?offset=" . $lastUpdateId);
    :do {:set result [/tool fetch url=$fullUrl output=none as-value]} on-error={ :log error "Network error during offset confirmation request." };
}
/log info "Telegram Bot Script: Finished execution.";