Skip to main content
Whistleblower Channel: Canal de Denuncias

Setting up Whistleblower Channel in Odoo 20: a case from start to finish

To set up Whistleblower Channel (Canal de Denuncias) in Odoo 20 you go through four module fields, add the responsible persons under Whistleblowing › Responsables, publish the channel and send a test report so you can see it in Reports and Libro Registro. This illustrative case follows that path using the literal names of screens, fields and statuses. At the end you have what to check during the first week.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 4 November 2026

Key facts

Versions
Odoo 17, 18, 19 and 20
Checked
in the module's source code, version 20.0 · against the sources linked at the end
Reading time
5 min

What this case covers and what it doesn't

The article follows a made-up company setting up the module in Odoo 20. The order of the steps is the order of the case, not one the module enforces. Everything named here (fields, lists, statuses) comes from the module itself; if you want to see how it fits together, read how the module works inside.

The screens shown sit under the Whistleblowing menu: Reports, Libro Registro, the channel list, Responsables and Audit Packs.

The Albada Hardware case, from installation to the first report

Example Illustrative case: the company and its figures are made up to explain the flow.

Albada Hardware is a fictional distributor finishing its Odoo 20 implementation. Lucía, its compliance lead, has to get the internal reporting channel ready before announcing it to staff. She prepares it in an afternoon and notes down what she will check the following week.

The four fields Lucía decides first

Lucía starts with these module fields, each with its label exactly as it appears on screen:

  • Enable Anti-Virus Scanning of Attachments (wb_av_enabled, a yes or no tick box): according to its label, it turns on anti-virus scanning of attachments.
  • DKIM Selector (wb_dkim_selector, a text field): Lucía leaves it pending until she gets the value from whoever runs her systems.
  • Sentry DSN (optional) (wb_sentry_dsn, a text field): the label itself marks it as optional, and Lucía leaves it empty.
  • Detect Tor Exit Nodes (opt-in) (wb_tor_detection_enabled, a tick box): the label says it is something you have to switch on (opt-in). Lucía checks with her adviser before ticking it.

Who handles reports: the Responsables list

Empty Responsables list in the Whistleblowing module with columns User, Name (collegiate body), Kind, Company, Appointment and Active
The Responsables list, still with no records: columns, New button and search bar.

Under Whistleblowing › Responsables the list is empty at the start. Its columns are User, Name (collegiate body), Kind, Company, Appointment and Active. The Name (collegiate body) column shows that the name of a collegiate body can go there. Lucía clicks New and adds the person who will handle the channel, with their Odoo user and company.

The channel: name, slug and status

In the channel list each channel has a name, a slug, a company and a status. Among the statuses in the code there is a list with Draft, Published and Archived. Lucía creates her company's internal channel and checks that it ends up as Published, like the test channel shown in the animated walkthrough further down.

A test report from the website

Unstyled web page with the message Thank you, the report reference, a secret access code and passphrase, and a follow-up link
The channel's «Thank you» confirmation page, with demo data.

Lucía sends a test report from the website. Once submitted, the «Thank you» page shows the report reference, a secret access code and passphrase, and a follow-up link. This is what the reporting person sees; during the test, Lucía notes them down and opens the follow-up link to check it works. In the screenshot the page appears without styling.

Where the report shows up inside Odoo

Walkthrough of the Reports kanban with the Open filter, the Libro Registro list, the channel list and the form of a report in Received status
From the reports kanban to the form of one of them, with demo data.

In Reports, with the Open filter, reports are grouped into columns such as Received and Acknowledged, with cards showing the reference and title. In Libro Registro each entry has the type Received and the summary Report received.; the Outcome and Category Code columns are still empty. Opening a report, the form shows the channel, priority, deadlines and the status bar at Received, plus the Report content tab with the description of the facts and the outcome.

The outcomes a report is closed with

The outcome_state field has these values: Founded, Partially founded, Unfounded, Inadmissible and Forwarded to authority. Lucía goes through them with her adviser so she knows what each one means in her internal procedure before closing any real report.

The audit pack

Audit Pack form in Ready status with name, company, period, generation date and user, and the Pack Attachment field empty
A test Audit Pack in Ready, with no content yet: Pack Attachment and the hash field are empty.

Under Whistleblowing › Audit Packs Lucía opens a test pack. The form holds the name, company, period, generation date and user, and the chatter keeps the creation message. The code has a status list with Generating, Ready and Failed.

What Lucía checks in the first week

  • That Responsables is no longer empty and that each person has the Active column ticked.
  • That the channel is still Published.
  • That the test report appears in Reports with the Open filter and has its entry in Libro Registro.
  • That she has decided on Detect Tor Exit Nodes (opt-in) and whether to fill in Sentry DSN (optional).
  • That DKIM Selector now holds the value she was given.
  • The scan_state field, with the values Queued, Scanning, Done and Failed. If she sees Failed on a record, or a warning she doesn't understand, she looks it up in the module's error messages.
  • The status of the Audit Packs: Generating, Ready or Failed.

What to take from the case

Lucía doesn't improvise: she settles the fields before opening the channel, adds the responsible persons before announcing it and tests the whole journey with a fictitious report. She also reads each status by its literal name (Received, Published, Ready) rather than guessing what it means, and writes down how she will tell test reports apart from real ones.

Send your own test report and follow it through Reports, Libro Registro and its form before you announce the channel.

Price, versions and subscription

The module is published on Odoo Apps for 17, 18, 19 and 20, at €9 per Odoo version, one-off payment, excluding VAT. The FlexigoTech Cloud local service costs €29/month or €290/year excluding VAT (Pro: €58/month or €580/year); without a subscription, or with the service suspended, whatever the subscription provides stops and your data stays in your Odoo.

With the subscription, the module for new Odoo versions is included if you bought it on flexigotech.com; on the Odoo App Store, each version is bought on its listing.

How FlexigoTech can help

FlexigoTech implements Odoo 17, 18, 19 and 20 and builds custom connectors and integrations. If you are setting up the reporting channel as part of an implementation, we can go through the fields, the responsible persons and the full test with you before it opens to staff.

Keep reading

How Whistleblower Channel works in Odoo: menus, scheduled actions and statesMenus, scheduled actions and states of Whistleblower Channel in Odoo: a glossary of Reports, Libro Registro, Audit Packs and channel configuration.Whistleblower Channel errors in Odoo: when each message appears and what to doEvery Whistleblower Channel error message in Odoo, word for word: when each appears while publishing, moving or closing a report and how to fix it.Whistleblowing channel in Odoo: what it covers, what it doesn't and what to prepare firstWhat Whistleblower Channel for Odoo 17 to 20 covers according to its documentation, what to prepare before installing it and which part needs FlexigoTech Cloud.
Checked in the module's source code (version 20.0) and the linked sources

Sources