✨ Enhancements
- HTML5: notifications are sent with the Home Assistant language as
lang, so the browser can pick a suitable font and voice - Telegram: the
notifyentity the Telegram Bot integration creates for each chat can be a target, selecting thetelegramdelivery ahead of the generic Notify Entity one, so it gets images, buttons and priority. It also says which bot to use, where there's more than one
🐛 Bug fixes
- MQTT
- A notification's
datameant for other deliveries, such asclickActionfor Mobile Push, was passed tomqtt.publish, which rejects anything it doesn't know, so the publish failed. Onlypayload,qos,retain,evaluate_payloadandmessage_expiry_intervalare now passed on - A
payloadthat was a string or list was replaced by the message. A string is now published as it is, and a list as JSON - With no topic, the delivery is skipped rather than failed
- Docs extended for the
datapassed on, and that the title isn't sent, and the integration link corrected
- A notification's
- SMS
- Currency signs, brackets and maths symbols were removed from messages, for example "£20 (due)" sent as "20 due". Only emoji and other pictographic symbols are now removed
- With no message, the delivery is skipped rather than failed
- Docs extended for the 158 character limit, the passing on of
data, for example a Twilio picture, and when the default delivery is used, and the recipient'sphone_numbercorrected
- HTML5
- A delivery with no targets was counted as a transport error. It's now skipped
- A single number for
html5_vibratewas dropped, rather than sent as a one-step pattern - Docs corrected: the default delivery is selected for the integration's own
notifyentities without being named, the fallback title is "Notification" in the Home Assistant language, and Supernotify's own actions aren't sent as browser buttons
- Telegram
- Chat ids were sent as
target, which Home Assistant has deprecated, raising a repair issue for it on every notification, and marked as breaking from 2026.9. They're now sent aschat_id - A notification's
datameant for other deliveries, such asclickActionfor Mobile Push, was passed to the Telegram Bot action, which rejects anything it doesn't know, so the message failed. Only the Telegram Bot fields listed in the docs are now passed on - Only the first chat id was sent to, so with several, for example from two recipients, the rest were missed
- Without a
telegram_chat_id, any other value in the delivery's own target, such as an email address, was tried as a chat id. Only atelegram_chat_id, or the olderphone, is now used - With no chat id, or one that isn't a number, the delivery was counted as a transport error. It's now skipped
- With
MarkdownV2orMarkdown, a title with a character such as!or.stopped Telegram parsing the message. The title is now escaped - A formatted message or caption cut to Telegram's length limit could be left with an unfinished tag, which Telegram rejects. It's now sent as plain text
- Docs rewritten: targets, including several chats, when the default delivery is used, all the data keys, that
telegram_protect_contenthas no effect, theallowlist_external_dirsneeded for images, that Telegram can't break through Do Not Disturb, and the example call corrected
- Chat ids were sent as
- TTS
- Android TTS with a
media_streamfailed, since it was passed outside the innerdata, which Home Assistant's notify actions reject - An older action like
tts.cloud_saywas given thettsentity as its target and the media players asmedia_player_entity_id, which it doesn't accept. It now targets the media players - Without a
tts_entity_id,tts.home_assistant_cloudwas always used, so without Nabu Casa nothing was spoken, though recorded as delivered. The firstttsentity found is now used if there's no Nabu Casa one, and the delivery is skipped with a warning if there are none - Docs corrected: invalid
optionsYAML, the non-existenttts.speak_cloudandtts.sayactions, the Android example, and that excluding Apple devices is a default
- Android TTS with a
- Alexa Media Player
- Every announcement waited for its estimated speech time, 5 seconds or more, before finishing, even with nothing playing and no volume to restore. It now only waits when there's music to resume, a volume to restore, or
wait_for_ttsis set, and not after a failed announcement methodindatawas dropped, rather than passed tonotify.alexa_media- Docs extended for
typeandmethod, thatvolumeis ignored withmedia_auto_pause: false, and the order of volume restore and music resume corrected
- Every announcement waited for its estimated speech time, 5 seconds or more, before finishing, even with nothing playing and no volume to restore. It now only waits when there's music to resume, a volume to restore, or
- Media: docs now give the image as the notification's
mediasnapshot_urlor camera, and the resulting action call as made - Alexa Devices: docs corrected for the default delivery, which has no fixed targets, and the
alexa_devices_speak_allandalexa_devices_announce_alldeliveries are now documented
What's Changed
- Bump certifi to 2026.10.19 for eMudhra distrust by @jeyrb in #297
- Override Home Assistant's uv pin with >=0.13.4 by @jeyrb in #298
- Update codeowner to @jeyrb by @jeyrb in #300
- [pre-commit.ci] pre-commit autoutdate by @pre-commit-ci[bot] in #301
- Declare integration categories in manifest by @jeyrb in https://github.com/rhizomatics/supernotify/pull/302t
Full Changelog: v2.16.0...v2.16.1