Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Platform
  3. EH HR Notify Engine v 16.0
  4. Sales Conditions FAQ

EH HR Notify Engine

by ERP Heritage
Odoo
v 16.0 Third Party 18
Download for v 16.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Compatibility
Lines of code 1054
Technical Name eh_hr_engine_notification
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Compatibility
Lines of code 1054
Technical Name eh_hr_engine_notification
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage . HR Platform

EH HR Notify Engine

One send() call across in-app, email and SMS, with per-user channel preferences and built-in dedupe, so feature modules never wire delivery by hand.

Free · LGPL-3v 1.0.0LGPL-3v1.0.0
One send() entry point
Per-user channel preferences
In-app, email and SMS
Dedupe inside a 60s window
Pluggable push and webhook slots

Why this module

EH HR Notify Engine

One call

Channels behind a single send()

Feature modules pass a template code, a recipient and a payload to one service. The engine decides which channels to use and dispatches them. No module wires email, SMS or in-app delivery by hand, so notification behavior stays consistent across the whole platform.

Per user

Each person picks their channels

A per-user preference says how someone wants a given notification delivered. A preference for a specific template wins over a wildcard that covers all templates, which falls back to the template default and finally to in-app, so there is always a sane delivery path.

No noise

Duplicates suppressed in a 60s window

When a caller passes a dedupe key, the engine drops a repeat send to the same user, template and channel inside a 60 second window. A burst of identical events does not turn into a burst of identical messages.

Day in the life

A leave request is approved

The leave module calls send('leave.approved', employee, payload). The engine looks up the employee's preference for that template, finds they chose email, renders the subject and body against the payload and queues one mail.mail. A colleague who left their preference at the default gets the same notice in their Odoo inbox instead. If the approval fires twice from a double click, the second send carries the same dedupe key and is dropped. Neither user touches a settings screen, and the leave module never names a channel.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

Duplicate suppression

With a dedupe key supplied, a repeat send to the same user, template and channel inside 60 seconds is skipped. The cache is capped and trimmed of stale keys past 5000 entries, so it cannot grow without bound.

Per-channel isolation

Each channel dispatch is wrapped in its own try and except. If email fails for one recipient, the exception is logged and the loop continues to the next channel and the next recipient rather than aborting the whole send.

Preference precedence

Resolution is explicit, not alphabetical luck: a preference for the exact template code is searched first, then the wildcard, then the template default, then a hard in-app fallback. A template code sorting below the wildcard character can no longer let the wildcard win.

Preference privacy

The model ACL grants every internal user create and write on preferences, so a record rule scopes each user to their own rows. HR admins see all rows for support. Tests assert a user cannot even read another user's preference, raising AccessError.

Soft adapters

SMS dispatches only when the sms module is installed and the user has a mobile or phone number, otherwise it returns quietly. Push and webhook look up a registered backend service and skip silently when none is present, so an absent channel never raises.

Missing template

An unknown template code raises a clear UserError naming the code, rather than failing deep inside a dispatch. Recipients can be a single user or a list, and an empty payload is handled safely.

What is inside

Built to do the job, end to end.

  • eh.hr.notification.template. Unique template code, translatable name, subject and HTML body, optional SMS body and push title and body, and a default channel list. Bodies are filled with payload values using lightweight placeholder substitution.
  • eh.hr.notification.preference. Per-user, per-template channel choice as an ordered comma list, indexed on user and template code, unique per pair. Quiet-hours fields are stored on the model. A record rule keeps each user's rows private.
  • Notification engine service. A registered service, not an ORM model, exposing one send() method. It resolves channels, applies dedupe, renders templates and dispatches to in-app, email, SMS, push and webhook handlers with per-channel error isolation.
  • Dependencies and security. Builds on eh_hr_core and Odoo mail. Ships ir.model.access entries for HR admin and officer on templates plus self-service on preferences, and the record rules that isolate them.

Honest about the edges

What this does not do, so nothing surprises you.

  • This module ships the engine and its templates and preferences, not a notification configuration UI. Templates and preferences are managed as data records.
  • In-app, email and SMS dispatch out of the box; SMS needs Odoo's sms module installed and a number on the user. Push and webhook are pluggable slots that stay inactive until a backend service is registered by another module.
  • Duplicate suppression only applies when the caller passes a dedupe key, and it relies on an in-process cache scoped to the running worker rather than a shared store.
  • Quiet-hours fields exist on the preference model but are stored only; the engine does not currently defer or hold sends based on them.
  • Template bodies use simple placeholder substitution against the payload, not full QWeb expression rendering.
  • There is no digest or batching feature; each send dispatches immediately per resolved channel.
Search

Odoo 16 HR notifications, notification engine Odoo, multi-channel notifications Odoo, per-user notification preferences, in-app email SMS notifications Odoo, notification templates Odoo HR, duplicate notification suppression, Odoo Community HR platform, self-hosted Odoo notifications, HR notification service Odoo 16

ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Consultant Melbourne

v1.0.0 · LGPL-3 · Odoo 16 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with