a2zwebltd/laravel-customer-support
Portable Laravel helpdesk engine: support tickets with threaded replies, internal notes, attachments (Spatie MediaLibrary), agent assignment, SLA due dates and escalation, mail notifications, events, policies, Livewire + Flux UI, and optional Nova resources.
SupportTicket, SupportTicketMessage) and pivot tables for categories/priorities. Schema extensions (e.g., custom fields) require manual migration adjustments.TicketCreated, TicketStatusUpdated) for extensibility, though documentation is sparse. Verify compatibility with your existing event listeners.livewire/livewire and livewire/flux for the UI. If your app doesn’t use Livewire, you must either:
spatie/laravel-medialibrary for attachments. Conflicts may arise if your app uses a different media library (e.g., intervention/image).laravel/nova auto-registers admin resources if installed. Without Nova, you’ll need to build a custom admin panel.manage-support-tickets). Ensure your AuthServiceProvider can accommodate this without breaking existing logic.HasSupportTickets trait to override methods like createTicket() or replyToTicket().php artisan vendor:publish --tag=customer-support-config to override defaults (e.g., SLA hours, statuses).A2ZWeb\CustomerSupport\CustomerSupportServiceProvider for custom logic (e.g., webhooks, third-party integrations).spatie/laravel-medialibrary, which may introduce storage backend (S3, local) considerations if your app uses non-standard setups.SupportTicketMessage threads).SupportTicket lists)?livewire/livewire, spatie/laravel-medialibrary).composer require a2zwebltd/laravel-customer-support
php artisan migrate
php artisan vendor:publish --tag=customer-support-config # Optional: Customize config
HasSupportTickets trait to your User model:
use A2ZWeb\CustomerSupport\Concerns\HasSupportTickets;
class User extends Authenticatable implements HasMedia
{
use HasSupportTickets;
}
manage-support-tickets gate in AppServiceProvider::boot():
Gate::define('manage-support-tickets', fn (User $user) => $user->is_admin);
livewire/livewire and livewire/flux.routes/console.php:
Schedule::command('support:escalate-overdue')->hourly();
composer test
spatie/laravel-medialibrary (supports S3, local storage, etc.).How can I help you explore Laravel packages today?