Customer Support is a gated add-on. When enabled for a company it appears as Support in the sidebar (/support); its API is served at /api/v1/support. It is built on the same shared conversation used by document discussions and messaging across the ERP, so a ticket's whole history — customer replies, internal notes, and the audit trail — lives in one thread.

How it fits together

A ticket is a small workflow record (a reference number, subject, status, priority, requester, assignee, and SLA timing) wrapped around a conversation. Everything people write — public replies the customer sees, private internal notes only your team sees, and the automatic status/assignment log — is posted to that one conversation, in order. Because the conversation is the ERP's shared primitive, the helpdesk reuses the same notifications and following you already get on documents.

Jump to: Enabling the module · The helpdesk · Ticket status workflow · Replies, notes & SLA timing · Assignment · Desk automations · The operator cross-tenant queue · Report an Issue · Feedback board · Operator notes.

Enabling the module

Install Customer Support from the marketplace and enable it for the company. From then on the Support entry appears in the sidebar. Three permissions gate the desk — read, create, and update tickets — so you can give front-line agents full access while keeping read-only roles for everyone else.

The helpdesk

Open Support to see this company's tickets, most-recently-updated first. Filter by status with the chips along the top, or flip the Mine toggle to see only the tickets assigned to you. New ticket captures a subject, an opening description, a priority, and the requester (a name and email, or a linked contact). Each ticket gets a sequential reference number per company — TKT-000001, TKT-000002, and so on. Click any row to open it.

Ticket status workflow

Every ticket moves through a guarded set of states, and the helpdesk only offers the transitions that make sense from where it is now:

Every status change is written into the ticket's conversation as a small system line, so the timeline is a complete, ordered audit of what happened and when. Illegal jumps (for example, straight from Closed to Pending) are simply not allowed.

Replies, internal notes & SLA timing

The composer posts to the conversation. A normal reply is public — part of the customer-facing thread. Flip the Internal note toggle to post a private line your team can see but the customer cannot; internal notes are clearly badged in the timeline.

The ticket tracks three timestamps for service-level reporting: first response (stamped once, on the first agent reply), resolved (when it moves to Solved), and closed. Because a customer reply on a Solved ticket reopens it, the resolution clock reflects reality rather than a premature close.

Assignment

Assign a ticket to an agent to make ownership clear; the assignee automatically follows the conversation, so they're notified of every new reply. Assignment and un-assignment are recorded in the timeline like any other change. The newly assigned agent also receives an in-app notification the moment a ticket lands on their desk (you're not notified when you grab a ticket yourself).

Auto-assign (opt-in). In the helpdesk's ⚙️ Desk settings, an admin can turn on Auto-assign new tickets: each new customer ticket (from the portal or email) is routed automatically to the least-loaded agent — the eligible team member with the fewest open assigned tickets. Eligible agents are the users whose role lets them update tickets. It's off by default, product-feedback reports are never auto-routed, and changing the toggle needs the desk-settings permission (admins have it out of the box).

Desk automations

The desk quietly helps in the background. Every AI feature below is consent-gated (it only runs if your company enabled AI data consent), never writes to the customer — suggestions are posted as internal notes for an agent to review — and simply does nothing when AI isn't configured.

The operator cross-tenant queue

Customer Support has a second surface built for platform operators (the ColorsX74 system-user team): a single cross-tenant queue that lists tickets from every company, with the owning company shown on each row, filterable by status and by company. From there an operator can open any company's ticket and reply or change its status on that company's behalf — the action is performed in the correct company's context and is dual-attributed: a "handled by platform support operator" line is written into the tenant's own timeline, so the company always sees that the platform team helped.

This surface is reserved for operators — it requires the platform support permission, granted only to the dedicated operator roles. A normal company user never sees other companies' tickets.

Report an Issue (product feedback)

A 🐞 Report an Issue button is available on every page for any signed-in user — on desktop it floats at the bottom-right (next to the AI assistant button); on mobile it sits in the top bar. It opens a small dialog to file a Bug, Enhancement, or Feedback report — write a description and add up to six attachments: paste a screenshot straight from your clipboard or use 📎 Attach file (each previews inline before you send). On submit, the app also attaches a small context block (the page you were on, the app build, your browser, and the last few errors your session hit — automatically, with sensitive values redacted) so the team can reproduce and debug the issue without a back-and-forth.

These reports are not ordinary support tickets: they route to the ColorsX74 product/development queue — a single cross-company feedback board grouped by Bug / Enhancement / Feedback — and they do not appear on your company's own support desk. It's the fast path to tell us something's broken or to ask for an improvement, with a picture worth a thousand words attached.

Managing the reports — the feedback board

Platform operators (and SuperAdmin) manage the incoming reports on the feedback board at /support/feedback — it's linked as “Feedback board” from both the Support helpdesk toolbar and the operator queue. The board lists every report from every company — each row shows the company's name — filterable by category (Bug / Enhancement / Feedback) and by status. Open a row to see the full ticket: the description, the auto-captured context block, the screenshots, and the running conversation.

From the ticket an operator can reply (a visible comment or a private internal note) and move it through the normal status workflow (New → Open → Pending → Solved → Closed), so a report's progress is always visible in one place. A normal company user cannot see the board — it requires the platform support permission — but their own filed reports are acknowledged on submit.

Each board row also carries two quick actions: ✔ close now (one click, no navigation) and 🗑 delete. Delete permanently removes the ticket and its whole conversation — messages, followers, and attachments including the stored files — after a confirmation. It exists for clearing junk and test reports (the operator queue and the operator ticket view offer it too); there is deliberately no tenant-facing delete, and no undo. Ticket numbering is gap-safe: deleting a ticket never causes a number to be reissued to a colliding value.

Using it as a QA loop: testers simply file everything they find via 🐞 (one issue per report, screenshots help); the development side works the board — triage, fix, reply with what changed, close. The auto-context block means a report is reproducible without asking the tester what page or build they were on.

Operator notes

Ticket references are never reused

Every ticket gets a permanent reference — TKT-000123 — and it goes out in the subject line of the emails we send about it. That reference is issued from a counter that only ever moves forward, so deleting a ticket never releases its number to a later one. A reference you or your customer quotes from an old email always means the same conversation, or nothing at all — never somebody else's. Numbering can therefore skip a value after a deletion; that is expected and harmless. Replies are threaded on the email's own message identifiers rather than on the subject line, so a reply always lands on the conversation it belongs to.