apprise-api
apprise-api copied to clipboard
[Error] Bad Request: can't parse entities
:beetle: Describe the bug
I am using Apprise API Docker on my home server to send messages to my Telegram Group.
A script on another system sends messages to it using curl
post command.
Everything was working fine until around April 17th when messages stopped coming.
Today I started looking at the script and saw that Apprise complains about characters in the message.
the message is:
*Home-S [Sonarr]:* Test
Testing if Sonnar can Send us any Massage.
If you got this, then Hurrayyyyy!!!
It is being sent to Apprise via this command:
printf "$message\n" | curl -X POST -F "body=$(</dev/stdin)" "$appriseurl"
And this is the error:
2024-05-07 12:04:36,241 [INFO] apprise: Loaded 1 entries from memory://
2024-05-07 12:04:37,340 [WARNING] apprise: Failed to send Telegram notification to -1001234567890: Bad Request: can't parse entities: Character '-' is reserved and must be escaped with the preceding '\', error=400.
I tried to send a simple message via curl and again same happened:
curl -X POST -F "body=home-s" "http://192.168.48.6:8008/notify/tg-nasbot"
2024-05-07 12:15:01,689 [INFO] apprise: Loaded 1 entries from memory://
2024-05-07 12:15:02,728 [WARNING] apprise: Failed to send Telegram notification to -1001847463926: Bad Request: can't parse entities: Character '-' is reserved and must be escaped with the preceding '\', error=400.
If I remove '-', other characters like []:
will get complains too. this was not the case before.
what should I do?
:computer: Your System Details:
- OS: Apprise API Docker container
Update:
I finally fixed it by piping my message through sed
and escaping all special characters. So far it works:
printf "$message\n" | sed "s|[-.\!()%&#?/@+':]|\\\&|g" | curl -X POST -F "body=$(</dev/stdin)" "$appriseurl"
Are you passing in a -
on the URL?
yes. for example, in this command curl -X POST -F "body=home-s" "http://192.168.48.6:8008/notify/tg-nasbot"
the -
is passed as part of home-s
word
If I escape the -
as Apprise says, like curl -X POST -F "body=home\-s" "http://192.168.48.6:8008/notify/tg-nasbot"
the command runs successfully.
But the problem is that the messages sent by the script are dynamic and I don't know the content beforehand. Also, I don't know what characters Apprise doesn't like.
I can't reproduce this at all
curl -X POST -F "body=home-s" -F tag=telegram "http://localhost:8000/notify/chris"
2024-05-13 19:08:42,013 [INFO] apprise: Loaded 3 entries from memory://
2024-05-13 19:08:42,515 [INFO] apprise: Sent Telegram notification.
In the above example, i map the telegram
tag so that i only send a notificatoin there, but even if i drop the tags, the dash
in the body has no problem (and does not need to be escaped at all.
Also, I don't know what characters Apprise doesn't like.
To ansewr this, there is nothing it doesn't like :wink: . It just passes things along . There is something else happening in your case. I'm in an Linux environment for my test, are you in the same ?
Instead of using curl
... just as a test, try installing hte local apprise
tool and see if you can get more details out of the logs:
pip install apprise
# -vvvv is a very, very verbose output
# you can possibly test your command you were doing too;
# if no -b (--body) is specified, then stdin is used by default, so the below should work fine:
printf "$message\n" | sed "s|[-.\!()%&#?/@+':]|\\\&|g" | apprise -vvvv "$appriseurl"