Skip to content

Paid add-on. Service is licensed separately from the open-source packages. See pricing

Filament screens

The resources and pages Odden Service adds to the Odden Filament admin.

Odden Service adds its screens to the Odden admin panel by itself when getodden/crm-filament is installed: it registers them through the open package's Odden\Filament\Support\Modules registry, so there is nothing to configure. They live in Odden\Service\Filament, with views under the odden-service-filament namespace. To leave them out, use OddenPlugin::make()->disableModules('service').

Resources

The resources are in the Service navigation group.

Resource Model Navigation Pages
TicketResource Odden\Service\Models\Ticket Service › Tickets list, board, create, edit
SlaPolicyResource Odden\Service\Models\SlaPolicy Service › SLA Policies list, create, edit
KnowledgeArticleResource Odden\Service\Models\KnowledgeArticle Service › Knowledge Base list, create, edit
CannedResponseResource Odden\Service\Models\CannedResponse Service › Canned Responses list, create, edit
TicketRoutingRuleResource Odden\Service\Models\TicketRoutingRule Service › Ticket Routing Rules list, create, edit

Tickets

  • List page: a Tickets Board button. Searching finds tickets by number, subject, company, agent, and the customer's first name, last name or email. Row actions are Resolve (ResolveTicketAction, with a resolution note), Merge (MergeTicketsAction; only open tickets of the same contact are offered, see Merging tickets), Portal (opens Ticket::getPortalUrl()) and Auto-Route (RouteTicketAction).
  • Board page (/tickets/board): a kanban by ticket status. Each column shows its 50 newest tickets and counts them all. Dragging a card to Resolved runs ResolveTicketAction; any other move updates the ticket's status, and the model keeps resolved_at, closed_at and the SLA clock in step (see The SLA clock).
  • Create page: creates the ticket with CreateTicketAction, so the description becomes the first message in the portal, routing runs when no agent is picked, and the contact gets the confirmation email. Contacts, companies and agents are searched on the server as you type.
  • Edit page: saving with the status set to Resolved runs ResolveTicketAction. The Conversation Thread & Notes relation manager has an Add Reply / Note action that calls ReplyTicketAction; inserting a canned response fills in its {{ tags }} for the ticket and agent.

Side effects to be aware of:

  • Add Reply / Note with a public reply sends the ticket's contact a TicketRepliedNotification email and logs a note on the contact's timeline.
  • Resolve sends the contact a TicketResolvedCsatNotification email.

Both notifications are queued, see Notifications.

Canned responses

A canned response belongs to the agent who creates it. Shared ones are listed for, and usable by, every agent; a private one only for its author. Responses saved before the owner was recorded have none and are listed for everyone so they can be fixed.

Pages

Support Cockpit

ServiceCockpit, at /admin/service-cockpit. It is labelled Support Cockpit and is the first item in the Service group. Its title is "Support Agent Workspace".

This is an agent workspace. It shows open, unassigned, my-active and SLA-at-risk counts, plus the average CSAT. Its tabs are triage, my_tickets, sla_watch and all, with search, priority and source filters.

These actions write data:

  • Claim sets the ticket's owner to the current user and moves new tickets to open.
  • Quick reply adds an agent message or internal note with ReplyTicketAction and can set the status to open, waiting_on_customer or resolved. You can insert canned responses and suggested knowledge-base articles (from DeflectTicketAction).
  • Quick resolve runs ResolveTicketAction with an optional note.

Both use the same actions as the ticket resource, so a public reply emails the customer TicketRepliedNotification and a resolve emails TicketResolvedCsatNotification (when the ticket's contact has an email address), and both are logged on the contact's timeline. Internal notes send nothing. Setting a reply's status to resolved runs the resolve action too.

Service Analytics

ServiceAnalytics, at /admin/service-analytics in the Service group.

A read-only report of ticket volume, resolution rate, first response time, mean time to resolution, SLA compliance and breaches, CSAT distribution, channel and priority breakdowns, and per-agent performance. Date ranges are 7_days, 30_days (the default), this_month and all_time. It counts the tickets TicketResource shows (so tenant or user scoping in the resource applies), and the averages and per-agent figures are worked out by the database. With no ratings, the CSAT average (here and on the Executive Overview card) is shown as missing rather than as a number.

URLs

Resources use filament.admin.resources.{slug}.index, pages use filament.admin.pages.{slug}:

Class URL Route
TicketResource /admin/tickets, board at /admin/tickets/board filament.admin.resources.tickets.index, ...tickets.board
SlaPolicyResource /admin/sla-policies filament.admin.resources.sla-policies.index
KnowledgeArticleResource /admin/knowledge-articles filament.admin.resources.knowledge-articles.index
CannedResponseResource /admin/canned-responses filament.admin.resources.canned-responses.index
TicketRoutingRuleResource /admin/ticket-routing-rules filament.admin.resources.ticket-routing-rules.index
Page URL
ServiceCockpit /admin/service-cockpit
ServiceAnalytics /admin/service-analytics

Authorization

Pages and actions check your policies the same way the open resources do (see the Filament admin authorization).

Page Requires viewAny on
Support Cockpit, Service Analytics TicketResource
Tickets Board (/admin/tickets/board) TicketResource

Page and board actions

Page Method Checks
Tickets Board moveTicket() update on the ticket
Support Cockpit claimTicket(), claimAndOpen(), openReplyModal(), sendQuickReply(), openResolveModal(), quickResolveTicket() update on the ticket

Resource actions

Resource or page Actions Checks
Tickets Resolve, Auto-Route update on the ticket
Tickets Merge update on the ticket and on the destination ticket
Ticket Messages relation manager Add Reply / Note update on the ticket

Swapping a built-in behaviour

Contract Used by Built-in implementation
Odden\Service\Contracts\DraftsTicketReply Draft a reply in a ticket's reply box DraftTicketReplyAction: the best matching canned response plus matching help articles, no AI model.

Overriding views

View Used by
odden-service-filament::pages.service-cockpit ServiceCockpit
odden-service-filament::pages.service-analytics ServiceAnalytics
odden-service-filament::pages.ticket-kanban TicketResource board page

Copy a view to resources/views/vendor/odden-service-filament under the same relative path to override it.