- What is a2zwebltd/laravel-customer-support used for?
- It is a drop-in customer support and helpdesk engine for Laravel applications. It provides support tickets with threaded replies, file attachments via spatie/laravel-medialibrary, internal agent notes, agent assignment, configurable categories and priorities, SLA tracking, and mail notifications. A bundled Livewire + Flux UI and optional Nova resources let agents manage tickets without adopting an external SaaS helpdesk.
- How do I install laravel-customer-support in my Laravel app?
- Install it with composer require a2zwebltd/laravel-customer-support, then run php artisan migrate to create the ticket tables. Optionally publish the config using php artisan vendor:publish --tag=customer-support-config. Next, add the HasSupportTickets trait to your User model, which must also implement HasMedia from spatie/laravel-medialibrary, and define the manage-support-tickets gate in AppServiceProvider::boot().
- Which PHP, Laravel, and Livewire versions does the package support?
- It requires PHP 8.2 or newer and supports Laravel 11, 12, and 13. The bundled UI needs livewire/livewire ^3 or ^4 and livewire/flux ^2, because the Blade templates use Flux components. Attachments depend on spatie/laravel-medialibrary ^11, and laravel/nova ^5 is optional and auto-registers its resources when present.
- Can I use the package without the bundled Livewire and Flux UI?
- The domain layer covering tickets, messages, SLA, events, and mail is separable from the UI, but the shipped UI is Blade + Livewire + Flux + Tailwind and is the real coupling point. There is no documented headless API, so a React, Vue, or Inertia frontend would require writing your own controllers against the SupportTicket and SupportTicketMessage models. Adopting the domain layer only is viable but usually means forking the package or shadowing its routes to disable the bundled screens.
- How do I configure the manage-support-tickets gate for support agents?
- Define it in AppServiceProvider::boot() with something like Gate::define('manage-support-tickets', fn (User $user) => $user->is_admin) or your own role logic. Treat this as security-critical rather than cosmetic, because a wrong definition exposes ticket data to non-agents, so add a test that covers it. You also own the gate semantics as agent roles evolve, including any per-category or per-tenant agent scoping.
- How does SLA tracking and the support:escalate-overdue command work?
- Each priority (Low, Normal, High, Urgent) carries configurable SLA hours, and the package ships a support:escalate-overdue artisan command for flagging overdue tickets. You must register that command in your scheduler for escalation to actually run. The documentation does not state whether the command is idempotent or how it behaves on repeated runs, so verify that before relying on it in production.
- Is laravel-customer-support actively maintained and safe for production?
- The supply-chain risk is high: the repository has around two GitHub stars, zero dependents, a single vendor namespace, and a v1.0.x changelog limited to the initial release and small fixes. There is no published support policy, no third-party security review, and no evidence of a bus factor above one, and the documentation is a README without upgrade or operational guidance. The MIT license means you can fork, so treat a maintenance contingency plan as a prerequisite rather than a nice-to-have.
- Can I isolate support tickets per tenant or account for multi-tenancy?
- Tenant isolation is not evidenced in the README or the schema, so treat any multi-tenancy claim as unverified. If you need per-account isolation, plan to add tenant columns and global scopes yourself and cover them with tests. Also review the public ticket-creation routes for authentication, rate limiting, spam, and attachment abuse before going live.
- How do I test ticket creation and replies in my application's test suite?
- The package does not document test helpers or factories, so plan to write your own factories for SupportTicket and SupportTicketMessage. Cover the three risky integration points: the manage-support-tickets gate, the HasSupportTickets plus HasMedia contract on your User model, and the scheduled escalation command. If you adopt the bundled UI, add feature tests against the Livewire components as well.
- What are the alternatives to this package for a Laravel helpdesk?
- Alternatives include building a support domain yourself, integrating a hosted helpdesk such as Zendesk or Freshdesk over its API, or choosing a Laravel helpdesk package with broader adoption. This package fits best when your app is on Laravel 11+ and already uses Livewire and Flux, and when you accept forking under MIT if maintenance stalls. If your frontend is React, Vue, or Inertia, a domain-layer-only adoption or a hosted API integration is usually the cleaner path.