Skip to content

Service Desk

The Service Desk module gives internal teams a ticketing surface for handling customer and partner requests, with a parallel external surface where the customer or business partner can submit and follow their own tickets.

Tickets are organized into queues, classified by help topics, governed by SLA policies, and routed automatically through tenant-configured rules. Three WhatsApp chat skills (support.create_ticket, support.get_ticket_status, support.list_my_tickets) let contacts open and track tickets from a conversation.

AudienceWhere they work
Agent (service-desk-agent)Tickets List, Ticket Detail, SLA Dashboard
Supervisor (service-desk-supervisor)All agent surfaces, plus reassignment from Ticket Detail
Admin (service-desk-admin)Queues, Help Topics, Canned Responses, Settings
End-user / customer (external)My Tickets, My Ticket Detail
graph LR
    HT[Help Topic] -- "defaults<br/>(priority, queue, assignee, due)" --> T[Ticket]
    RR[Routing Rule] -- "evaluates clauses" --> T
    T -- "lands in" --> Q[Queue]
    Q -- "has" --> M[Members]
    T -- "carries" --> TE[Thread Entries<br/>(reply / internal_note)]
    TE -- "may insert" --> CR[Canned Response]
  • Tickets carry a status (open, pending, resolved, closed), priority (low, medium, high, urgent), source (portal, email, phone, chat, api), requester typing (business partner / account / manual), and SLA fields (due, first response, resolved).
  • Queues group agents. One queue per tenant is marked default. Members have a role (member / lead), priority weight, and an on-break flag.
  • Help Topics classify tickets and supply defaults to the create form (priority, queue, assignee, due offset).
  • Canned Responses are markdown reply templates with substitution variables ({{actor.name}}, {{ticket.number}}). Scope can be global or limited to a single help topic.
  • Routing Rules are multi-condition rules (clauses joined AND / OR over priority, source, tag, requesterType) with action types assign_to_queue, assign_to_user, escalate, and reassign_queue. First match by position wins.
  • Tickets List — cross-tenant agent queue.
  • Create Ticket — internal three-tab create form (Details / Requester / Media).
  • Ticket Detail — agent overview, conversation thread, attachments, close/reopen.
  • My Tickets — external customer’s own ticket list.
  • My Ticket Detail — external customer’s read/reply view.
  • SLA Dashboard — open/breached/escalated tile, 7-day trend chart, recent tickets widget.
  • Queues — queue CRUD, member assignment, routing rule editor.
  • Help Topics — topic CRUD with default routing/priority/due offset.
  • Canned Responses — reply template library with global / per-topic scope.
  • Settings — Priorities, Sources, Routing, Policies tabs.
Permission keyGrants
service-desk.viewRead tickets, queues, dashboard. Sufficient for service-desk-agent baseline read.
service-desk.manageWrite to tickets, replies, attachments, assignments.
service-desk.adminConfigure queues, help topics, canned responses, settings, and routing rules.

External users (audience ExternalOnly) never see the internal queues or settings — they enter through /service-desk/my/tickets and only ever see tickets where they are the requester.

Three skills run under the support namespace and are cataloged on the shared Conversation Skills page:

  • support.create_ticket (Phone Matched) — creates a ticket from WhatsApp; the orchestrator pre-fills bp_id so the ticket is linked to the caller’s business partner.
  • support.get_ticket_status (Contact Confirmed) — looks up a ticket by number (e.g. SD-00012).
  • support.list_my_tickets (Contact Confirmed) — returns the caller’s five most recent tickets.

Chat-originated tickets always have source = chat and are flagged so agents can spot them in the list.

  • Conversation Skills — full catalog of WhatsApp / email skills including the three support skills.
  • Conversation Menus — surface the support.* skills as menu nodes.
  • Business Partners — when the requester type is bp, the ticket links to a business partner; closing or merging that record affects future tickets and chat-skill lookups.