Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Telegram API MarkdownV2 Escape Characters Bug

I am new to this. I am writing a telegram bot that interacts with Google Sheets in Google App Script. I am having an issue with MarkdownV2.

My code has one \ before the '!' as Telegram said in their document:

'!' must be escaped with the preceding character \

var send = url + "/sendMessage?chat_id=" + id + "&text=" + "Hey\! New item" + "&parse_mode=MarkdownV2";

However, it says I need to use two \\ instead.


Exception: Request failed for https://api.telegram.org returned code 400. Truncated server response: {"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Character '!' is reserved and must be escaped with the preceding '\\'"} (use muteHttpExceptions option to examine full response)

But when I use two \\ I still have a problem running.


Exception: Invalid argument: https://api.telegram.org/botxyz:abc/sendMessage?chat_id=xyz&text=Hey\!%20New%20item&parse_mode=MarkdownV2

When I run the link https://api.telegram.org/botxyz:abc/sendMessage?chat_id=xyz&text=Hey\!%20New%20item&parse_mode=MarkdownV2 in the error, it connects to Telegram normally.

Thank you.

like image 376
Rex Nguyen Avatar asked Sep 11 '26 05:09

Rex Nguyen


1 Answers

In your script, how about the following modification?

Modified script:

var url = "https://api.telegram.org/botxyz:abc";
var id = "xyz";
var send = encodeURI(url + "/sendMessage?chat_id=" + id + "&text=" + "Hey\\! New item" + "&parse_mode=MarkdownV2");
console.log(send)
  • I thought that in your situation \! might be \\!.

  • When this script is run, https://api.telegram.org/botxyz:abc/sendMessage?chat_id=xyz&text=Hey%5C!%20New%20item&parse_mode=MarkdownV2 can be seen in the log. This value is the same as the URL you tested at the bottom of your question.

Reference:

  • encodeURI()
like image 173
Tanaike Avatar answered Sep 13 '26 17:09

Tanaike