Help Desk Module
Operations module on the frozen platform. An internal ticketing MVP — number, subject, description, tenant-managed category, priority, status workflow, assignment, notes, activity timeline, optional due date, and KPIs — with soft, optional links to Contacts and Companies. Unlike many CRM modules that hard-depend on Contacts, Help Desk is standalone: it installs with no module dependencies and works fully on its own.
Not Central Feedback
Give Feedback is the platform bug/feature intake flow (Tenant submit → Central triage). Help Desk is a tenant-scoped internal support queue for your workspace team — distinct product, permissions, and data model.
Guides
| Audience | Document |
|---|---|
| Operators / workspace users | help-desk.md |
| Engineers | help-desk-developer.md |
| Production / ops | help-desk-production.md |
| File a complaint readiness | workspace-complaint-dialog-production-readiness.md |
| Module Development Standard | module-development.md |
| Reference blueprint | expenses-overview.md |
| Tenant API | ../api/tenant-v1-help-desk.md |
Capabilities
- Header ticket: number (
HD-prefix, configurable), subject, description, tenant-managed category, priority (low/medium/high/urgent), status, optionaldue_at, optionalsource(manual|email) - Optional
contact_idandcompany_id— soft links, only validated (and only pickable in the UI) when the corresponding module is entitled on the workspace - Optional Knowledge Base article links (soft M2M) when
knowledge-baseis entitled — pick published articles (or drafts when the actor hasknowledge-base.update); backlinks on article view when Help Desk is entitled - Status workflow:
open → in_progress | waiting | resolved | closed;resolved → closed | open;closed → open - Content edits blocked when status is Closed — use status actions, assignment, and notes instead
- Assignment (
created_by/assigned_to) with assignee scoping viahelp-desk.assign - Notes (comments) + activity timeline; Timeline shows status timing (e.g.
3h,1d 2h); optional attachments on ticket create and note replies (counts toward Storage quota) - SLA policies (1.3.0): response/resolve targets by category and/or priority; ticket clocks; breach scanner + notifications; list filters for breached / at risk
- Shared email intake (1.4.0): workspace IMAP support mailbox (not personal Email accounts); inbound creates tickets or appends notes when the subject/body references
HD-##### - @mentions (1.5.0): ticket notes support
@usermentions with in-app notifications - Communication Template replies (1.7.0): soft-gated WhatsApp template picker on ticket view when Communication Templates is installed (
communication-templates.use); placeholder contexthelp-desk— no hardmodule_dependencies - Table and status Kanban (Board/List toggle; fixed
HelpDeskStatusEnumcolumns; drag →POST …/status) with search, status/priority/category/SLA filters, assignee filter, overdue filter, and My Tickets toggle; Manage categories, Manage SLAs, and Manage mailboxes dialogs (samehelp-desk.*permissions as ticket CRUD) - KPIs via
GET /help-desk/stats(total, mine, open, in progress, waiting, resolved, closed, overdue, sla_breached, sla_at_risk) - Dashboard widget
help_desk_my_open(module +help-desk.view; assignee-scoped like list) - Trash filtering plus Restore and Delete permanently
- Real-time board sync — private Reverb channel
tenant.{id}.help-desk.board(auth: same tenant +help-desk.view) broadcastsHelpDeskTicketCreated/HelpDeskTicketUpdated/HelpDeskTicketStatusChanged(withprevious_status) /HelpDeskTicketAssigned/HelpDeskTicketDeleted; the board view invalidateshelp-desk/board+help-desk/stats(debounced) so teammates see moves, assignments, and deletes without a manual refresh. Mirrors the Tasks / Leads invalidate pattern. Catalog 1.12.0. Go-live: production readiness. - Module licensing (
module:help-desk) + Spatie permissions — free Marketplace opt-in, no hard dependencies - In-app notifications on assignment, close, reopen, and SLA breaches
- Automation triggers (when Automation entitled):
help_desk.ticket_created,help_desk.ticket_status_changed,help_desk.sla_breached - Audit + activity logging
due_atand SLA clocks stored in UTC; overdue/SLA KPIs and filters use workspace timezone convention (see Workspace timezone)
Permissions
help-desk.view · create · update · delete · restore · force.delete · assign · close · reopen
| Role | Grants |
|---|---|
| admin | All except force.delete |
| manager | view, create, update, assign, close, reopen |
| staff | view, create, update, close, reopen |
Enable Help Desk from Marketplace (free) — it has no hard dependencies, so it can be installed on its own, before or after Contacts / Companies. Catalog: slug help-desk, category operations (Operations), is_default_included = false, is_billable = false, sort_order = 10, version 1.16.0.
Why standalone (soft dependencies)
Most internal tickets (IT requests, billing questions) do not require a CRM contact or company record. Both links are optional and only appear once the related module is installed. This keeps Help Desk usable as a lightweight, install-anywhere operations module rather than forcing the full CRM stack.
External customers submit/track tickets through the separate Customer Portal module (requires Contacts). Portal notes set portal_user_id on help_desk_notes. 1.14.0 adds is_internal so staff internal notes stay private while public replies (rich text + attachments) appear in the portal.
Intake channels (1.16.0)
| Source | How tickets arrive |
|---|---|
| Manual | Staff create / File a complaint |
| Shared IMAP mailboxes | |
| Portal | Customer Portal submit |
| Live Chat | Escalate from Live Chat inbox |
| Escalate from WhatsApp Cloud inbox |
Explicitly deferred
- Social network DMs; auto-ticket on WhatsApp inbound; bidirectional message sync