Skip to Content

Your contact is away: knowing before you hit send, not three days later

A dated window on the contact record, the backup person named, and a banner right when you write, text or call.

TL;DR: a client leaves for two weeks, their auto-reply tells you so, and by the following Tuesday nobody remembers. Outreach platforms have been reading those auto-replies for years, but they use them to pause a campaign, never to warn the person writing an ordinary email. Our Contact Absences module puts the information where it actually helps: a dated window on the contact record, with the name of whoever is covering, and a banner that shows up the moment you write, text or call. It never blocks a send. It offers to schedule the message for the morning of the return, and it sets a reminder to pick the thread back up. Auto-replies that come in become suggestions a human accepts in one click, never automatic writes.


In this article

"I will be away until September 15." You read that sentence three weeks ago, in the reply that landed twelve seconds after your email. You read it, you shrugged, and you moved on.

The following Tuesday, you follow up. On Thursday your colleague follows up too, because they had no idea. The quote sits there, the file stalls, and the whole time there was someone else to write to: the auto-reply gave their address, spelled out, on the very next line.

The information existed. It arrived on your side, for free, and it died in an inbox.

Odoo already tracks your employees' time off: that is what its Time Off app does, with balances, approvals and a team calendar. The record of a client, a supplier or a partner has no field for any of it. That is exactly the gap we filled.


The tools that already read auto-replies, and what they use them for

Out-of-office detection is not new. Salesloft has been selling it since 2022: the tool recognizes the automatic message, pulls the return date out of it even when it reads "I will be back the Tuesday after next", and reschedules the campaign steps. lemlist does the same, reading the date with artificial intelligence and creating a task on the return day.

One detail in Salesloft's own announcement is worth keeping, because it is right: steps do not resume on the return day, they resume the day after. On that first morning your message would drown among four hundred others. The next day, it has a chance of being read.

These tools protect a campaign. They are cadence machines, and the auto-reply is there so a step does not get wasted. Nobody in that category warns the human who is about to write a one-off email, send a text or dial a number. lemlist's own documentation says it plainly about its own detection: "The campaign is not automatically paused or resumed by this feature." It moves a step, it warns nobody.

If your sales follow-ups already live in your ERP, that is a neighbouring subject we covered elsewhere: outreach inside your Odoo. A contact's absence, though, reaches well past outreach.


Recognizing an auto-reply is harder than it looks

There is a standard for this. RFC 3834, published in 2004, recommends that every automatic response carry a technical label saying "this came from a machine". The word that matters is recommends: it is not an obligation, and a fair share of mail software simply does not add it.

Worse, the same standard defines a second label for messages a machine produces without them being a reply: your backup reports, your appointment confirmations, your password resets. A filter that accepts both labels catches all of your organization's service mail and files it as holidays. That is the kind of mistake you fix in one line, provided you have seen it happen.

So the subject line is what is left, and there the real world takes over. "Automatic reply", "Réponse automatique", "Out of office", sometimes nothing at all. The French Outlook subject even slips a non-breaking space in before the colon, invisible to the eye and quite enough to break a filter written in a hurry.

And the return date, when there is one, is prose: "back on August 17" with no year, "from Thursday 13 to Friday 21 August inclusive", "I will reply when I am back at the office on Monday May 4". A human reads that without effort. A regular expression does not.

That is why the module proposes instead of writing. A recognized auto-reply creates a suggestion, filed in the proposed absences queue, with the dates it read. Someone accepts it in one click, or turns it down. A wrong record is worse than an empty one.


A dated window on the record, with a mandatory return date

An absence is not a checkbox. It is a window: from this day to that day, a category picked from a short list (holidays, leave, closure, training or conference, other), and above all the backup contact, meaning who to write to in the meantime: a contact record, or plain text such as "the front desk" or a phone number.

The end date is mandatory, and that is a decision rather than an oversight. An absence with no return leaves a warning lit forever, and a warning that cries wolf gets dismissed by the third time it appears. No return, no absence.

A company shutdown is not one person being away: set on a company, it warns for every contact attached to it, with wording about closing and reopening rather than being away. Three people from the same firm sending the same shutdown notice is one single thing to record.

A small detail that matters: the sentence on screen is a noun phrase. "Dominique Fortin: away until September 15, 2026, back on September 16, 2026" rather than "Dominique Fortin is away". A contact record carries no gender, and guessing it from a first name gets real people wrong.


The banner shows up where the action happens

A report you read on Monday is useless. The warning has to arrive the second you are about to write.

So it appears in the message thread of any record, whether that is a task, an opportunity or a support ticket, and at the top of the contact record itself. It appears in the full compose window, the one you also use when replying from your mailbox built into Odoo. It appears at the top of a text-message conversation, before you have typed a single word. A fourth bridge, already running but not yet in the public repository, also shows it in the softphone, on whoever is on the line.

The banner names three things: who is away, until when, and who to write to in the meantime. Past three absent recipients, it names three and counts the rest, because a wall of text stops being a warning.

What it never does is block. Writing to someone on holiday is often exactly what you want: let it wait for them, in their inbox, with nothing left on your mind.

Diagram: the absence banner at the moment you write Diagram of the banner that appears in a task message thread as you write. It gives the absence window with its return date, the nature of the absence, the name of the person covering, and two buttons: schedule the message for the morning of the return, or send now. Sending is never blocked. Message thread · as you write Recipient away, dated return Nature of the absence holiday Backup contact named on the record Schedule for their return one click, deferred send Send now always available The banner informs, it never blocks a send.


Schedule it for their return instead of giving up

Next to the banner, a button. "Schedule for their return" in the compose window, files your message in Odoo's scheduled messages, dated the morning they get back, at 9 a.m. by default. When several recipients are away, the latest return is the one that counts. You write while it is on your mind, the message leaves when it has a chance of being read, and you have nothing to note down anywhere.

It is Salesloft's idea, applied to an email written by hand rather than to a campaign. Salesloft waits one more day, while the button aims for the first morning. The other difference is that you keep control: nothing reschedules itself behind your back.


A return reminder that gives you something to hold

When someone comes back from three weeks off, you usually want to pick the thread back up. The module sets an activity for the day after the return, on the contact record, assigned by default to whoever recorded the absence, or to the person chosen to follow up.

A reminder that says "check in with them" gets closed without action. This one names the last exchange you had with that person, for example "Last exchange: Quote 2026-0042". It hands you a starting point rather than a good intention. And if the return date moves, the reminder moves with it.


When you are the one leaving

The problem has a flip side. Your clients write to you too while you are at the cottage, and your auto-reply is often the one message of the year you have never reread: you do not receive your own outgoing mail.

A fifth module, published with the others, connects both ends. The "I'm away" gesture asks for the dates, the backup contact, the tone of the message, and whether to decline invitations that land in the period. It shows the exact text before arming anything. From then on the responder follows the absence: it arms for the period, moves when the dates move, and switches off when the absence is removed.

Two messages ship at installation, meant to be rewritten your way: one that announces a delay ("I am travelling until the 12th, my replies will be slower") and one that announces an absence. No text, nothing arms. An empty auto-reply sent to a client costs more than silence.

Two limits hold the rest together. Anyone can note that a colleague is away, but arming a responder means writing to clients under their name, from their mailbox: that belongs to the person concerned or to the email administrator. And nothing ever arms for an outside contact. Their absence stays information for you, not a commitment that answers on their behalf.


The shutdowns you can know a year ahead

Some absences need no auto-reply to teach you about them. In Quebec, the construction holidays are set by collective agreements and published years in advance by the Commission de la construction du Québec: July 19 to August 1 in 2026, December 20, 2026 to January 2, 2027 for the winter break, July 25 to August 7 in 2027, then December 19, 2027 to January 1, 2028.

And it does not only concern your clients in that industry. The CCQ estimates that roughly a quarter of Quebec's active workforce takes its holidays during that same summer window. If your follow-up lands right there, it is not a calendar coincidence, it is the calendar.

The module carries those windows and a wizard that seeds them: you pick the shutdown, then named companies or a whole industry. It can skip companies with no attached contact and no email address, and it never duplicates a window you already know about. The next window, the holiday break, starts on December 20: November is when to seed it, not the 19th.

Three habits that need no software at all and already solve half the problem:

  1. When a client tells you on the phone that they are leaving, write down the return date, not the departure date. That is the one you will need.
  2. Ask who is covering, every time. Most people answer gladly, and almost nobody asks.
  3. Put the industry shutdowns you know about in the calendar once a year, in January. It takes ten minutes and saves you three dead follow-ups in July.


The calendar you already keep by hand

Before having a module, people note their clients' holidays somewhere. Very often it is a shared calendar where somebody writes "Holidays - First Last" on the day of departure, and sometimes "Back from holidays First" on the day of return.

A bridge reads that calendar, when it is kept in Nextcloud, and turns it into proposals. It understands both of the shapes you find in real life: the lone marker, which gives an absence with no end date for you to complete in one gesture, and the departure-and-return pair, which gives a full window. It also learns the shorthand, one line at a time: initials, a nickname, the name of a file rather than a person. A company name in brackets is recognized from the start.

Two things it deliberately does not do. It never writes into the calendar, which stays its owner's notepad. And it creates no contacts. An entry it does not recognize is reported as is, with its title, rather than attached to the client it most resembles. Mixing up two people who share a first name means sending one client's mail to another.


Starting with a year of auto-replies already read

An absence tool that starts empty helps nobody for months. Yet your mailbox already holds dozens of auto-replies received over the past year, and nobody has reread them.

A catch-up pass, "Read mail already received", picks them up once over the last 400 days: enough to cover a full summer and winter without rereading years of archives. It files the windows it finds under proposed absences and writes nothing on its own. On the first morning, the queue sorts out in a few minutes, one click per line.

Day to day, two buttons are then all it takes. The "Away today" filter on the contact list tells you who not to write to this morning. And when someone comes back sooner than planned, "Back early" switches the warning off the same day, so it does not stay lit on someone who is already answering you.


What we chose not to keep

An absence is personal information. So we decided up front what we would not write down.

What is kept: a window, a category from a list of five, a backup contact's name, and a one-line note if needed. What is never kept: the free text of the auto-reply, and any health-related reason. The list of categories is short on purpose, and it has no "sick leave" option.

The rest follows the same logic: the information comes from what the person wrote to you themselves or told you on the phone, never from an inference. If those questions of collection and retention speak to you, we went through what Quebec law requires in Law 25, four years on.


What this does not solve

The module guesses nothing. If nobody ever enters anything and no auto-reply comes in, it stays empty. It is a team tool, and it is worth exactly as much as the habit of feeding it.

Plenty of auto-replies announce no readable date. Those arrive as an empty suggestion waiting for a human decision, which is the intended behaviour but still a gesture someone has to make.

There is also a known false positive: when someone replies by hand to an auto-reply, their answer keeps the "Automatic reply" subject line and gets recognized as one. The suggestion shows up, and a human turns it down in one click.

Date reading works without artificial intelligence: the reading rules are written out in plain code. When an assistant is connected, it rereads every recognized auto-reply, and its dates win when it finds both the departure and the return. A module installed on an instance with no AI still works, with a bit less recovery on odd wording.

Finally, the banner does not follow your team onto the mobile app yet, and the module deliberately holds back no overdue invoice reminder. Someone on holiday is still someone who owes an invoice: we warn, and we let it go out.


Our position

Contact Absences is part of Symbifox, our suite of modules that add to Odoo Community. The core module and three of its bridges are public on GitHub, under a licence (BUSL 1.1) that allows production use for your own internal needs and converts to an open source licence (LGPL) at the latest four years after each version ships. You can read every line, and your instance keeps running without us.

What we charge for is hosting and support, never the right to use. That is the rule for all our modules.

If your team already keeps a client holiday calendar in some corner, we can plug it in rather than ask you to retype everything. And if you keep none, reading the auto-replies is enough for the first records to appear on their own. Let's simplify this together.

The logical next step is to stop guessing altogether: when two organizations each run their own Odoo, an absence could travel from one to the other the way a shared task already does between two Odoo instances that talk. That is not built, and it will probably come from there.

Losing weeks because the right person was on holiday and nobody knew? Let's chat whenever you like.


Sources

Two Odoo instances that talk: handing a task to a partner without opening yours
Federation links your Odoo to your partner's: the task shows up on their side, their answer comes back on yours, and nobody opens another account.