A sophisticated notification management system for Home Assistant with advanced routing, filtering, and delivery control.
ANS is a custom Home Assistant integration that acts as a centralized notification hub. Instead of calling notify.mobile_app_*, notify.signal, or TTS services individually from each automation, you make a single ans.send_notification call and ANS handles the rest: routing to the right recipients, choosing the right channels based on criticality, applying Do Not Disturb schedules, rate limiting, retrying on failure, and managing TTS volume. There is no target parameter to set — who gets notified, and through which channel, is entirely decided by recipient configuration, not by the service call.
- Features
- Installation
- Configuration
- Quick Start
- Troubleshooting
- Advanced Topics
- Development and Maintenance
- Contributions
- Single service call fans out to every configured recipient and channel
- Criticality-based routing — LOW through CRITICAL, each mapped to a different set of channels per recipient
- Per-recipient filtering — notification type allow-lists, source blocking, and Do Not Disturb schedules with bypass rules
- Flood protection — token-bucket rate limiting (per-recipient and global) plus a bounded delivery queue, both with automatic retry queuing
- Reliable delivery — automatic retries with exponential backoff, crash recovery across HA restarts, and deduplication (including TTS)
- Multi-channel delivery out of the box — Mobile App, Signal Messenger, and Persistent Notification, with an extensible adapter architecture for more
- TTS via media player — time-of-day and criticality-based volume control with automatic restoration
- Actionable mobile notifications — up to 3 tap-to-respond action buttons
- Acknowledgement tracking — know when a notification was actually seen (tap or dismissal), recorded in a restart-safe registry
- Audit log — every notification and delivery attempt recorded, with configurable retention
- Real-time delivery events — automations can react to delivery, filtering, failure, rate-limiting, settlement, and acknowledgement as they happen
- Self-healing channel detection — a missing channel raises a Repairs issue and resolves itself when the channel comes back
- Built-in diagnostics panel for channel health and adapter status
For the full feature list, use cases, and requirements see Overview.
- Add this repository as a custom repository to HACS:
- Use HACS to install the integration.
- Restart Home Assistant.
- Set up the integration using the UI:
For manual installation see Getting Started.
To add the integration, go to Settings ➔ Devices & Services ➔ Integrations, click ➕ Add Integration, and search for "Advanced Notification System" or "ANS".
After installation, additional system-wide settings can be configured via the Options menu (Settings ➔ Devices & Services ➔ Integrations ➔ Advanced Notification System ➔ Configure).
The initial setup options (TTS Service, Enabled Channels, and Audit Logging) can be changed at any time using the Reconfigure flow (Settings ➔ Devices & Services ➔ Integrations ➔ Advanced Notification System ➔ Reconfigure).
- Go to Settings ➔ Devices & Services ➔ Integrations ➔ Advanced Notification System
- Click Add Recipient
- Follow the configuration steps
For the full configuration walkthrough see Getting Started.
Once installed and at least one recipient is configured, send your first notification:
service: ans.send_notification
data:
source: "my_automation"
title: "Hello from ANS"
message: "ANS is working."
type: INFO
criticality: LOWNo
targetfield: ANS has notargetparameter and does not support one — you cannot address a specific device, entity, or person in the service call. Every recipient's channel mapping, filters, and Do Not Disturb schedule (configured once in the integration) decide who receives a notification and how. To change who is notified, edit the recipient configuration — never the automation.
| Field | Required | Values |
|---|---|---|
source |
✅ | any string — used for source-blocking filters |
title |
✅ | any string |
message |
✅ | any string |
type |
✅ | INFO WARNING ALERT REMINDER EVENT SECURITY |
criticality |
✅ | LOW MEDIUM HIGH CRITICAL |
image |
❌ | http/https URL or HA-relative path (e.g. /local/img.jpg, /api/camera_proxy/camera.front). Persistent notification: http/https renders as a clickable filename link; local path renders as an inline Markdown image embed. Mobile app: forwarded as push image (http/https only). Signal: forwarded as URL or attachment. URLs without a file path segment are ignored with a warning. |
video |
❌ | http/https URL or HA-relative path. Persistent notification: clickable filename link. Signal: forwarded as URL or attachment. Not supported by Mobile App. URLs without a file path segment are ignored with a warning. |
file |
❌ | http/https URL or HA-relative path. Persistent notification: clickable filename link. Signal: forwarded as URL or attachment. Not supported by Mobile App. URLs without a file path segment are ignored with a warning. |
link |
❌ | http/https URL. Mobile app: sets tap action (data.url / data.clickAction). Persistent notification: rendered as a [Details] link. Signal: appended to the message body. |
context |
❌ | key-value dict. Persistent notification: appended to the message body as a Context: section; values matching a known HA entity ID are auto-linked to their history page. Mobile app: the entity key sets a tap-action deep-link (entityId:<entity_id>) when link is not set. Signal and TTS ignore all context keys. |
actions |
❌ | list of up to 3 action button dicts (action, title, optional uri) — forwarded to Mobile App only; ignored by other channels |
channel_data |
❌ | adapter-specific delivery overrides. Signal: supports text_mode, attachments, urls, verify_ssl. Mobile app: all keys are flat-merged into the data: payload (e.g. {"tag": "my-tag"} to control the notification tag for grouping or acknowledgement tracking). |
For real-world automation patterns see Usage Examples. For the full service reference and delivery pipeline see How It Works. For per-channel field handling, channel_data options, and acknowledgement mechanics see Channel Reference.
If something isn't working as expected, the built-in diagnostics panel (Settings ➔ Devices & Services ➔ Advanced Notification System ➔ ⋮ ➔ Download Diagnostics) is the first place to look. For common issues and FAQ see Troubleshooting.
For per-channel adapter reference (field handling, channel_data, acknowledgement) see Channel Reference. For storage internals, crash recovery details, channel adapter lifecycle, and extension points see Advanced Topics.
I basically created this integration for my personal purpose. As it fulfils all my current needs I won't develop it further for now.
However, as long as I am using this integration in my Home Assistant setup I will maintain it actively.
Development of this integration was assisted by AI tools.
If you want to contribute to this integration, please read the Contribution guidelines
If you would like to use the integration in another language, you can help out by providing the necessary translations in custom_components/ans/translations/ and open a pull request with the changes.