Laravel helpdesk script: 8 things to check before you self-host a ticketing system
Last updated

If you are comparing Laravel helpdesk scripts, the feature lists all look alike: tickets, agents, a knowledge base, maybe live chat. The differences show up later, when a customer replies to an email and it opens a second ticket, when an SLA breaches at 2 a.m. on a Sunday, or when the live chat needs a websocket server your hosting does not allow. This article is a checklist of the eight things worth testing before you choose a self-hosted ticketing system, with how we answered each one in DEV3 Deskly, a helpdesk built on Laravel 12 and Filament 4.

1. Does email become a ticket, and do replies thread?
Most support still starts in an inbox, so email-to-ticket is the feature to test first. Two questions matter: how mail gets in, and what happens when the customer replies.
Deskly accepts mail two ways. An inbound webhook takes the JSON or form posts that mail services send (the documentation has set-ups for Mailgun and Postmark), protected by a secret. Or an IMAP mailbox is read every minute by the scheduler, with no PHP imap extension needed. A new sender becomes a customer automatically. A reply is matched to its ticket by the In-Reply-To and References headers, then by the [#DSK-1042] tag Deskly puts in its subjects. Quoted text is stripped and duplicate message IDs are ignored, so a resent email doesn't create a twin.
To be clear about the limits: the built-in IMAP reader handles plain-text, HTML and simple multipart messages. For complex mail, use the webhook.

2. Are SLAs counted in business hours?
An SLA that counts wall-clock minutes is useless for a team that works Monday to Friday. Check three things: business hours with a timezone, holidays, and a clock that stops while you wait on the customer.
In Deskly an SLA policy sets first-response and resolution targets in business minutes, for every priority or just one, and links a business-hours schedule with its own timezone, weekly opening times and holidays. When a ticket is set to Pending, the clock pauses; when the customer replies, the paused time is added back to the deadlines. Tickets show On track, At risk, Breached, Paused or Met, and a check every minute flags breaches, alerts the team and fires any "SLA breached" automation.

3. Can automations route and escalate without looping?
Rules are where helpdesks save the most time and cause the most confusion. Look for clear events, enough conditions to be useful, and protection against a rule that keeps triggering itself.
Deskly's automations are trigger → condition → action rules on four events: ticket created, ticket updated, customer message and SLA breached. Conditions cover 10 fields, including subject, body, channel, team, tag, whether the requester has priority support and whether it is inside business hours, with six operators and "any" or "all" matching. Nine actions set priority or status, assign a team or agent, use round robin, add a tag or an internal note, send a canned reply or notify admins. Each rule counts its runs, can stop further rules, and runs under a guard so its own changes never re-trigger the engine.

4. Is the agent workspace fast for real work?
Agents live in one screen all day. A good ticketing system puts the conversation, the SLA countdown and the ticket's properties side by side, and keeps two agents from answering the same customer.
Deskly's workspace shows the thread, SLA timers, properties that save as you change them, customer details and an activity timeline. Queue tabs cover mine, unassigned, open, breaching, pending and solved. Canned replies fill in placeholders such as the customer's name and ticket number, internal notes are highlighted so nobody mistakes them for replies, tickets can be merged or split, and a live banner warns when a teammate is viewing or replying to the same ticket.

5. Does live chat work without a websocket server?
Many PHP hosts can't run a long-lived websocket process. If the chat only works with one, it doesn't work on that hosting.
Deskly's widget runs in a shadow DOM, so its styles never clash with your site, and embeds anywhere with one script tag. By default it polls every 3 seconds, which works on shared hosting. On a VPS you can run Laravel Reverb (included) for instant delivery, and the widget keeps a slow poll as a safety net. Agents answer from a chat inbox and can turn a chat into a ticket with the full transcript.

6. Do customers get a help centre, a portal and a survey?
Self-service reduces tickets, and a portal reduces "any update?" emails. Check for article suggestions while customers write, and a way to measure satisfaction.
Deskly's help centre has categories, Markdown articles with a table of contents, search, view counts and "Was this helpful?" votes, in English and Arabic. Articles are suggested as customers type on the contact form and in the portal. In the portal, customers see every ticket from any channel, open new ones with attachments and reply. Since version 1.0.1 those attachments live on a private disk and are served only after an access check: to the ticket's customer and to agents who can see the ticket, never from internal notes. Emails link files with signed links that expire after 7 days. When a ticket is solved they get a 1–5 survey, by email through a signed link or in the portal. There's also an optional paid Priority support pack: customers buy it in the portal and get High priority on new tickets for 12 months.

7. Is the AI optional, and does it stay in its lane?
AI drafting is useful, but it should never answer customers on its own, and it shouldn't lock you into one provider or bill you while you test.
DEV3 AI in Deskly drafts replies into the reply box for the agent to edit, summarises long threads and scores customer sentiment from −1 to +1, which drives the 3D "weather" orb on the dashboard. The default provider is a built-in demo model that makes no API calls. When you want real models, connect OpenAI, Anthropic or Google with your own key in Settings; every call is logged with its token counts.

8. Can you install it without being a Laravel developer?
A script you can't install is a project you have to hire for. Check whether it ships with vendor/ and built assets, whether there's a web installer, and what the server really needs.
Deskly's download includes vendor/ and the compiled assets, so you need PHP 8.2+ and MySQL, MariaDB or SQLite, but not Composer or Node.js. Visit /install and a five-step wizard checks requirements, tests the database, loads demo or empty data, creates your admin and locks itself; php artisan dev3:install does the same over SSH. The queue runs in sync mode by default, so one cron entry is the only extra setup.

See it in action
The video tour follows one ticket from the customer portal to the agent workspace, through an AI draft and a reply, then shows live chat, automations, reports and the customer's satisfaction rating.
What else to compare
- Reports: volume, first response, resolution time, SLA compliance, CSAT and an agent leaderboard, with CSV export.
- Languages: English and Arabic with a full right-to-left layout on the website, panels, installer and chat widget.
- Security and admin: two-factor sign-in with an authenticator app (8 recovery codes) or email codes, which you can require for all staff; roles with a permission editor, an audit log with before/after diffs, backups that include private attachments, and system health.
- API: a Sanctum-secured REST API for tickets, replies and knowledge-base search, described in OpenAPI.
- Quality: Deskly 1.0.1 shipped with 186 Pest tests, Larastan level 6 with no errors and 86 pages checked in a headless browser with no console errors.
Deskly is available as DEV3 Deskly on the DEV3 marketplace for $29, with 117 screenshots and two video tours in place of a live demo. How it's built explains the architecture in more detail.
Feature highlights — Shared inbox, SLA timers, automations, live chat and DEV3 AI drafting are introduced with motion reveals as visitors scroll.


