All posts
Integrator5 min read

Odoo Helpdesk Customer Ratings: CSAT Setup, Scoring, and Reporting

Odoo Helpdesk automatically requests satisfaction ratings from customers when tickets are resolved. This guide covers enabling CSAT, configuring rating timing, reading per-agent scores, and using the ratings report.

Customer Satisfaction (CSAT) ratings in Odoo Helpdesk are triggered automatically when a ticket moves to a resolved stage. The customer receives an email with three emoji buttons (happy, neutral, unhappy) and optionally a text comment field. Results appear on the helpdesk dashboard and per-ticket timeline.

Enabling Customer Ratings on a Team#

Helpdesk → Configuration → Helpdesk Teams → [Team] → Customer Ratings

Options:

  • No rating - disabled
  • Rating based on ticket activity - request sent at a configurable interval
  • Rating when a ticket is closed - request sent when the ticket reaches a Closing Stage

Stage Configuration#

Helpdesk → Configuration → Stages → [Closed Stage]

  • Check Closing Stage
  • Optionally set Send Rating Request timing: immediately or after N days

Rating Request Email#

Odoo sends the Helpdesk: Rating Email template containing:

  • Ticket summary (subject, agent, close date)
  • Three inline emoji links (green smiley, yellow neutral, red sad)

Clicking an emoji opens a minimal page for an optional comment. No portal login required.

Viewing Ratings#

  • Per ticket: Rating appears in the ticket chatter once the customer responds
  • Per team dashboard: Average CSAT shown as percentage (happy / total rated)
  • Report: Helpdesk → Reporting → Customer Ratings - filters by team, agent, period, value

Programmatic Access#

python
from datetime import datetime, timedelta
cutoff = datetime.now() - timedelta(days=30)
ratings = env['rating.rating'].search([
    ('res_model', '=', 'helpdesk.ticket'),
    ('team_id', '=', team.id),
    ('write_date', '>=', cutoff),
])
satisfied = sum(1 for r in ratings if r.rating >= 5)
total_rated = sum(1 for r in ratings if r.consumed)
csat = (satisfied / total_rated * 100) if total_rated else 0

Rating values: 1 = dissatisfied, 3 = neutral, 5 = satisfied. consumed is True when the customer clicked the link.

Common Mistakes#

  • Closing Stage not checked - the rating trigger does not fire without the Closing Stage flag even if the team has ratings enabled
  • Customer never receives email - check the helpdesk alias domain and outgoing mail server
  • Multiple rating emails per ticket - re-opening and re-closing a ticket fires a second request; add a custom constraint to rate only once per ticket if needed

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free