### Install and configure the help desk package Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Run these commands to install the package, publish its configuration and migration files, and run migrations. ```bash composer require jeffersongoncalves/laravel-help-desk php artisan vendor:publish --tag=help-desk-config php artisan vendor:publish --tag=help-desk-migrations php artisan migrate ``` -------------------------------- ### Install laravel-help-desk via Composer Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Install the package via Composer. Laravel's auto-discovery registers the service provider and facade automatically. ```bash composer require jeffersongoncalves/laravel-help-desk ``` -------------------------------- ### Install webklex/php-imap Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Install the required webklex/php-imap package for the IMAP driver. ```bash composer require webklex/php-imap ``` -------------------------------- ### Use help-desk translation keys Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Use the translation helper with the help-desk namespace to retrieve translated strings. Examples show keys for ticket messages, statuses, and priorities. ```php // Using translations in your code __('help-desk::tickets.messages.created') // "Ticket created successfully." __('help-desk::statuses.open') // "Open" __('help-desk::priorities.urgent') // "Urgent" ``` -------------------------------- ### Configure Inbound Driver in .env Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Sets the inbound driver for email integration in the .env file. The comment lists the available drivers: imap, mailgun, sendgrid, resend, and postmark. This example uses mailgun. ```env # Available: imap, mailgun, sendgrid, resend, postmark HELPDESK_INBOUND_DRIVER=mailgun ``` -------------------------------- ### Create a department with HelpDesk::createDepartment Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Create a department using the HelpDesk facade. The department requires a name, slug, email, and is_active flag. ```php use JeffersonGoncalves\HelpDesk\Facades\HelpDesk; $department = HelpDesk::createDepartment([ 'name' => 'Technical Support', 'slug' => 'technical-support', 'email' => 'support@example.com', 'is_active' => true, ]); ``` -------------------------------- ### Publish help-desk configuration Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Publish the configuration file to config/help-desk.php. ```bash php artisan vendor:publish --tag=help-desk-config ``` -------------------------------- ### Run migrations for help-desk Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Run the database migrations after publishing them. ```bash php artisan migrate ``` -------------------------------- ### Create a department and add an operator Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Use the HelpDesk facade to create a department and assign an operator with a role of 'operator', 'manager', or 'admin'. ```php use JeffersonGoncalves\HelpDesk\Facades\HelpDesk; $department = HelpDesk::createDepartment([ 'name' => 'Technical Support', 'slug' => 'technical-support', 'email' => 'support@example.com', 'is_active' => true, ]); HelpDesk::addOperator($department, $user, 'operator'); // 'operator', 'manager', or 'admin' ``` -------------------------------- ### Publish help-desk migrations Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Publish the package's migration files. ```bash php artisan vendor:publish --tag=help-desk-migrations ``` -------------------------------- ### Publish help-desk translations (optional) Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Optionally publish the translation files. ```bash php artisan vendor:publish --tag=help-desk-translations ``` -------------------------------- ### Configure config/help-desk.php Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Default configuration for the help desk package. Customize models, ticket reference prefix, default status/priority, attachment disk, auto-close days, email driver, and notification channels. ```php return [ // Models used by the help desk 'models' => [ 'user' => \App\Models\User::class, // Model that creates tickets 'operator' => \App\Models\User::class, // Model that manages tickets ], // Ticket settings 'ticket' => [ 'reference_prefix' => 'HD', // Ticket reference format: HD-00001 'default_status' => 'open', 'default_priority' => 'medium', 'attachment_disk' => 'local', // Storage disk for attachments 'auto_close_days' => null, // Auto-close resolved tickets (null = disabled) 'allow_reopen' => true, ], // Email integration 'email' => [ 'enabled' => true, 'inbound' => [ 'driver' => null, // 'imap', 'mailgun', 'sendgrid', 'resend', or 'postmark' ], ], // Notification settings 'notifications' => [ 'channels' => ['mail'], 'queue' => 'default', ], ]; ``` -------------------------------- ### Create a ticket with HelpDesk::createTicket Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Create a ticket with the HelpDesk facade. The ticket is associated with a user and department. The resulting ticket has a reference_number like 'HD-00001' and a uuid. ```php use JeffersonGoncalves\HelpDesk\Facades\HelpDesk; $ticket = HelpDesk::createTicket([ 'title' => 'Cannot access my account', 'description' => 'I get an error when trying to log in...', 'department_id' => $department->id, 'priority' => 'high', ], $user); // $ticket->reference_number => "HD-00001" // $ticket->uuid => "550e8400-e29b-41d4-a716-446655440000" ``` -------------------------------- ### Format code with composer format Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Formats the codebase according to the project's coding standards. Use this command to ensure consistent code style. ```bash composer format ``` -------------------------------- ### Run static analysis with composer analyse Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Runs static analysis on the codebase. Use this command to check for potential issues without executing the code. ```bash composer analyse ``` -------------------------------- ### Manage ticket watchers with HelpDesk::addWatcher and removeWatcher Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Add or remove a watcher on a ticket using the HelpDesk facade. ```php HelpDesk::addWatcher($ticket, $anotherUser); HelpDesk::removeWatcher($ticket, $anotherUser); ``` -------------------------------- ### Run tests with composer test Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Runs the test suite for the package. Use this command to execute all tests defined in the project. ```bash composer test ``` -------------------------------- ### Add comments and notes with HelpDesk::addComment and addNote Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Add public comments, internal notes (not visible to end user), and comments with attachments using the HelpDesk facade. ```php // Add a public reply $comment = HelpDesk::addComment($ticket, $user, 'Thank you for contacting us.'); // Add an internal note (not visible to end user) $note = HelpDesk::addNote($ticket, $operator, 'Escalating to senior engineer.'); // Add comment with attachments $comment = HelpDesk::addComment($ticket, $user, 'See attached screenshot.', [ 'attachments' => [$uploadedFile], ]); ``` -------------------------------- ### Create EmailChannel Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Create an email channel mapped to a department. The settings array holds driver-specific settings and is encrypted. ```php use JeffersonGoncalves\HelpDesk\Models\EmailChannel; EmailChannel::create([ 'department_id' => $department->id, 'name' => 'Support Inbox', 'driver' => 'mailgun', 'email_address' => 'support@example.com', 'settings' => [], // Driver-specific settings (encrypted) 'is_active' => true, ]); ``` -------------------------------- ### Create and query canned responses with CannedResponse model Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Create and query canned responses. Use the active, forDepartment, and ordered scopes to retrieve responses for a department. ```php use JeffersonGoncalves\HelpDesk\Models\CannedResponse; CannedResponse::create([ 'title' => 'Greeting', 'body' => 'Thank you for contacting our support team...', 'department_id' => $department->id, 'is_active' => true, ]); // Get canned responses for a department $responses = CannedResponse::active() ->forDepartment($department->id) ->ordered() ->get(); ``` -------------------------------- ### Injecting TicketService and CommentService into a Controller Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Demonstrates how to inject service classes directly into a controller constructor to manage tickets and comments. ```php use JeffersonGoncalves\HelpDesk\Services\TicketService; use JeffersonGoncalves\HelpDesk\Services\CommentService; use JeffersonGoncalves\HelpDesk\Services\DepartmentService; use JeffersonGoncalves\HelpDesk\Services\AttachmentService; class TicketController { public function __construct( private TicketService $tickets, private CommentService $comments, ) {} public function store(Request $request) { return $this->tickets->create([ 'title' => $request->title, 'description' => $request->description, 'department_id' => $request->department_id, ], $request->user()); } } ``` -------------------------------- ### Manage tickets with HelpDesk facade methods Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Manage tickets: find by reference or UUID, assign/unassign operators, change status using TicketStatus enum, update ticket fields, and soft delete. ```php // Find tickets $ticket = HelpDesk::findTicketByReference('HD-00001'); $ticket = HelpDesk::findTicketByUuid('550e8400-...'); // Assign to operator HelpDesk::assignTicket($ticket, $operator); HelpDesk::unassignTicket($ticket); // Change status use JeffersonGoncalves\HelpDesk\Enums\TicketStatus; HelpDesk::changeStatus($ticket, TicketStatus::InProgress); HelpDesk::closeTicket($ticket); HelpDesk::reopenTicket($ticket); // Update ticket HelpDesk::updateTicket($ticket, [ 'priority' => 'urgent', 'category_id' => $category->id, ]); // Delete ticket (soft delete) HelpDesk::deleteTicket($ticket); ``` -------------------------------- ### Configure Postmark inbound driver Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Environment configuration for the Postmark inbound driver. Both username and password are mandatory; requests without them are rejected with 403 Forbidden. ```env HELPDESK_INBOUND_DRIVER=postmark HELPDESK_POSTMARK_WEBHOOK_USERNAME=your-username HELPDESK_POSTMARK_WEBHOOK_PASSWORD=your-password ``` -------------------------------- ### Configure IMAP inbound driver Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Environment configuration for the IMAP inbound driver. Requires the webklex/php-imap package and the help-desk:poll-imap command scheduled. ```env HELPDESK_INBOUND_DRIVER=imap HELPDESK_IMAP_HOST=imap.example.com HELPDESK_IMAP_PORT=993 HELPDESK_IMAP_ENCRYPTION=ssl HELPDESK_IMAP_USERNAME=support@example.com HELPDESK_IMAP_PASSWORD=your-password HELPDESK_IMAP_FOLDER=INBOX ``` -------------------------------- ### Configuring Custom Event Listeners Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Shows how to disable default listeners in the configuration file and register a custom listener for the TicketCreated event. ```php // config/help-desk.php 'register_default_listeners' => false, // Then in your EventServiceProvider or listener: use JeffersonGoncalves\HelpDesk\Events\TicketCreated; Event::listen(TicketCreated::class, function (TicketCreated $event) { // Custom logic $ticket = $event->ticket; }); ``` -------------------------------- ### Use TicketService to create a ticket Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Inject TicketService and CommentService into a controller to create tickets directly. The create method accepts ticket data and the authenticated user, returning the created ticket. ```php use JeffersonGoncalves\HelpDesk\Services\TicketService; use JeffersonGoncalves\HelpDesk\Services\CommentService; use JeffersonGoncalves\HelpDesk\Services\DepartmentService; use JeffersonGoncalves\HelpDesk\Services\AttachmentService; class MyController { public function __construct( private TicketService $tickets, private CommentService $comments, ) {} public function store(Request $request) { $ticket = $this->tickets->create([ 'title' => $request->title, 'description' => $request->description, 'department_id' => $request->department_id, ], $request->user()); return $ticket; } } ``` -------------------------------- ### Create categories and subcategories with Category model Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Create categories and subcategories using the Category model. Subcategories are created by setting the parent_id to the parent category's id. ```php use JeffersonGoncalves\HelpDesk\Models\Category; $category = Category::create([ 'department_id' => $department->id, 'name' => 'Billing', 'slug' => 'billing', 'is_active' => true, ]); // Subcategories $sub = Category::create([ 'department_id' => $department->id, 'parent_id' => $category->id, 'name' => 'Refunds', 'slug' => 'refunds', ]); ``` -------------------------------- ### Check ticket state with instance methods Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Use ticket instance methods to check if a ticket is open, closed, resolved, assigned, or overdue. Each method returns a boolean based on the ticket's status and due date. ```php $ticket->isOpen(); // Not closed or resolved $ticket->isClosed(); // Status is Closed $ticket->isResolved(); // Status is Resolved $ticket->isAssigned(); // Has assigned operator $ticket->isOverdue(); // Past due_at and still open ``` -------------------------------- ### Run help-desk artisan commands Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Run the package's artisan commands to poll IMAP mailboxes, clean old processed inbound emails, and auto-close stale tickets. The close-stale command supports a --dry-run flag to preview which tickets would be closed. ```bash # Poll IMAP mailboxes for new emails php artisan help-desk:poll-imap # Clean old processed inbound emails php artisan help-desk:clean-emails --days=30 # Auto-close stale tickets php artisan help-desk:close-stale --days=14 --status=resolved # Dry run (see what would be closed) php artisan help-desk:close-stale --days=14 --dry-run ``` -------------------------------- ### Configure Mailgun inbound driver Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Environment configuration for the Mailgun inbound driver. The signing key is mandatory; requests without it are rejected with 403 Forbidden. ```env HELPDESK_INBOUND_DRIVER=mailgun HELPDESK_MAILGUN_SIGNING_KEY=your-signing-key ``` -------------------------------- ### Configure SendGrid inbound driver Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Environment configuration for the SendGrid inbound driver. Both username and password are mandatory; requests without them are rejected with 403 Forbidden. ```env HELPDESK_INBOUND_DRIVER=sendgrid HELPDESK_SENDGRID_WEBHOOK_USERNAME=your-username HELPDESK_SENDGRID_WEBHOOK_PASSWORD=your-password ``` -------------------------------- ### Access tickets via user relationships Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Access a user's tickets, comments, and watched tickets through the helpDeskTickets, helpDeskComments, and helpDeskWatching relationships. For operators, use helpDeskAssignedTickets, helpDeskDepartments, and helpDeskHistory. ```php // User's tickets $user->helpDeskTickets; $user->helpDeskComments; $user->helpDeskWatching; // Operator's assigned tickets and departments $operator->helpDeskAssignedTickets; $operator->helpDeskDepartments; $operator->helpDeskHistory; ``` -------------------------------- ### Assign operator to department with HelpDesk::addOperator Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Assign an operator to a department with a role of 'operator', 'manager', or 'admin'. ```php HelpDesk::addOperator($department, $user, 'operator'); // 'operator', 'manager', or 'admin' ``` -------------------------------- ### Update ticket with HelpDesk::updateTicket Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Updates ticket fields such as priority, category, and due date. The due_at uses a Carbon instance from now()->addDays(3). ```php HelpDesk::updateTicket($ticket, [ 'priority' => 'urgent', 'category_id' => $category->id, 'due_at' => now()->addDays(3), ]); ``` -------------------------------- ### Disable default listeners in config/help-desk.php Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Disables the package's default event listeners so you can handle events yourself. Place this in the help-desk configuration file. ```php // config/help-desk.php 'register_default_listeners' => false, ``` -------------------------------- ### Translation keys: help-desk::tickets.messages.created, etc. Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Use these translation keys to retrieve language-specific strings, such as the ticket created message and labels for statuses and priorities. The default locale is en, with pt_BR also supported. ```php __('help-desk::tickets.messages.created') // "Ticket created successfully." __('help-desk::statuses.open') // "Open" __('help-desk::priorities.urgent') // "Urgent" ``` -------------------------------- ### Query tickets with Ticket model scopes and relationships Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Query tickets using the Ticket model scopes: open, closed, byStatus, byPriority, overdue, unassigned. Also access user's tickets via the helpDeskTickets relationship and operator's assigned tickets via helpDeskAssignedTickets. ```php use JeffersonGoncalves\HelpDesk\Models\Ticket; use JeffersonGoncalves\HelpDesk\Enums\TicketStatus; use JeffersonGoncalves\HelpDesk\Enums\TicketPriority; // Open tickets $open = Ticket::open()->get(); // Closed tickets $closed = Ticket::closed()->get(); // By status $inProgress = Ticket::byStatus(TicketStatus::InProgress)->get(); // By priority $urgent = Ticket::byPriority(TicketPriority::Urgent)->get(); // Overdue tickets $overdue = Ticket::overdue()->get(); // Unassigned tickets $unassigned = Ticket::unassigned()->get(); // User's tickets (via trait) $user->helpDeskTickets; // Operator's assigned tickets (via trait) $operator->helpDeskAssignedTickets; ``` -------------------------------- ### IMAP Polling Environment Variables Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Provides the environment variables for IMAP polling configuration. Set HELPDESK_INBOUND_DRIVER to imap and specify the host, port, username, and password for the IMAP server. ```env HELPDESK_INBOUND_DRIVER=imap HELPDESK_IMAP_HOST=imap.example.com HELPDESK_IMAP_PORT=993 HELPDESK_IMAP_USERNAME=support@example.com HELPDESK_IMAP_PASSWORD=your-password ``` -------------------------------- ### Configure Resend inbound driver Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Environment configuration for the Resend inbound driver. The webhook secret is mandatory; requests without it are rejected with 403 Forbidden. The API key is used to fetch email bodies. ```env HELPDESK_INBOUND_DRIVER=resend HELPDESK_RESEND_API_KEY=re_your-api-key HELPDESK_RESEND_WEBHOOK_SECRET=whsec_your-webhook-secret ``` -------------------------------- ### Query tickets with model scopes Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Use the Ticket model scopes to filter tickets by status, priority, overdue, or unassigned. The scopes include open(), closed(), byStatus(), byPriority(), overdue(), and unassigned(). ```php use JeffersonGoncalves\HelpDesk\Models\Ticket; use JeffersonGoncalves\HelpDesk\Enums\TicketStatus; use JeffersonGoncalves\HelpDesk\Enums\TicketPriority; Ticket::open()->get(); // Not closed or resolved Ticket::closed()->get(); // Closed or resolved Ticket::byStatus(TicketStatus::InProgress)->get(); // By specific status Ticket::byPriority(TicketPriority::Urgent)->get(); // By specific priority Ticket::overdue()->get(); // Past due_at and still open Ticket::unassigned()->get(); // No operator assigned ``` -------------------------------- ### Find ticket by reference or UUID Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Finds a ticket by its reference number or UUID. Both methods throw TicketNotFoundException if the ticket is not found. ```php $ticket = HelpDesk::findTicketByReference('HD-00001'); $ticket = HelpDesk::findTicketByUuid('550e8400-...'); // These throw TicketNotFoundException if not found ``` -------------------------------- ### SendGrid webhook URL Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Configure your SendGrid Inbound Parse to forward to this webhook URL. ```http POST https://your-app.com/help-desk/webhooks/sendgrid ``` -------------------------------- ### Schedule help-desk:poll-imap command Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Schedule the IMAP polling command to run every five minutes in app/Console/Kernel.php or routes/console.php. ```php $schedule->command('help-desk:poll-imap')->everyFiveMinutes(); ``` -------------------------------- ### Manage ticket status with TicketStatus enum Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Changes ticket status using the TicketStatus enum. Includes close and reopen shortcuts. Invalid transitions throw InvalidStatusTransitionException; closed tickets can only reopen to Open, and resolved tickets can only go to Open or Closed. ```php use JeffersonGoncalves\HelpDesk\Enums\TicketStatus; HelpDesk::changeStatus($ticket, TicketStatus::InProgress); HelpDesk::closeTicket($ticket); HelpDesk::reopenTicket($ticket); // Status transitions are validated. Invalid transitions throw InvalidStatusTransitionException. // Closed tickets can only transition to Open (reopen). // Resolved tickets can only go to Open or Closed. ``` -------------------------------- ### Artisan commands: help-desk:poll-imap, clean-emails, close-stale Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Manual commands to poll IMAP mailboxes, clean processed inbound emails after a number of days, and auto-close stale resolved tickets. The --dry-run flag previews the close action without actually closing tickets. ```bash php artisan help-desk:poll-imap # Poll IMAP mailboxes php artisan help-desk:clean-emails --days=30 # Clean processed inbound emails php artisan help-desk:close-stale --days=14 # Auto-close stale resolved tickets php artisan help-desk:close-stale --dry-run # Preview without closing ``` -------------------------------- ### Add HasTickets trait to User model Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Add the HasTickets trait to your User model to enable ticket creation capabilities for regular users. ```php use JeffersonGoncalves\HelpDesk\Concerns\HasTickets; class User extends Authenticatable { use HasTickets; } ``` -------------------------------- ### Postmark webhook URL Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Set this webhook URL in your Postmark server's Inbound Message Stream settings. Postmark sends the full email content (body, headers, attachments) directly in the payload, and the package uses StrippedTextReply for cleaner reply parsing. ```http POST https://your-username:your-password@your-app.com/help-desk/webhooks/postmark ``` -------------------------------- ### Mailgun webhook URL Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Configure your Mailgun route to forward incoming emails to this webhook URL. ```http POST https://your-app.com/help-desk/webhooks/mailgun ``` -------------------------------- ### Assign or unassign ticket Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Assigns a ticket to an operator or removes the assignment. No additional details are provided in the source. ```php HelpDesk::assignTicket($ticket, $operator); HelpDesk::unassignTicket($ticket); ``` -------------------------------- ### Resend webhook URL Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Configure your Resend receiving domain webhook to forward to this URL. Select the email.received event type in your Resend webhook configuration. ```http POST https://your-app.com/help-desk/webhooks/resend ``` -------------------------------- ### Add IsOperator trait to User model Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/README.md Add the IsOperator trait to your User model to enable ticket management capabilities for operators/agents. This trait includes HasTickets. ```php use JeffersonGoncalves\HelpDesk\Concerns\IsOperator; class User extends Authenticatable { use IsOperator; // Includes HasTickets } ``` -------------------------------- ### Soft delete ticket with HelpDesk::deleteTicket Source: https://github.com/jeffersongoncalves/laravel-help-desk/blob/master/resources/boost/skills/help-desk-development/SKILL.md Soft-deletes a ticket. The ticket is not permanently removed from the database. ```php HelpDesk::deleteTicket($ticket); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.