- Created `quick-replies.blade.php` for managing quick replies. - Added `settings.blade.php` for admin settings management. - Implemented `ticket-show.blade.php` to display ticket details. - Introduced `timeline-card.blade.php` component for displaying timeline information. Enhance quick reply management functionality - Developed `quick-reply-manager.blade.php` for creating and editing quick replies. - Integrated Livewire for dynamic interaction and validation. Implement settings page for AI configuration - Created `settings-page.blade.php` for managing AI settings, including prompts and provider instances. - Added functionality for managing models and embeddings. Add ticket show functionality with real-time updates - Implemented ticket details view with processing status and tool call logs. - Added support for displaying article suggestions and error messages. Create unit tests for AI classifier and domain info tool - Added `AIClassifierServiceTest.php` to validate AI classifier functionality. - Implemented `DomainInfoToolTest.php` for domain parameter validation. - Created `OxxaClientTest.php` to test API interactions and password hashing.
79 lines
2.1 KiB
PHP
79 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Admin;
|
|
|
|
use App\Exceptions\OllamaUnavailableException;
|
|
use App\Services\AdminTicketService;
|
|
use App\Services\TicketIngestionService;
|
|
use Livewire\Component;
|
|
use Livewire\WithPagination;
|
|
|
|
class TicketMonitor extends Component
|
|
{
|
|
use WithPagination;
|
|
|
|
public int $perPage = 10;
|
|
|
|
public string $newTicketMessage = '';
|
|
|
|
public string $apiUser = '';
|
|
|
|
public string $apiPassword = '';
|
|
|
|
public ?array $lastResult = null;
|
|
|
|
public ?string $submitError = null;
|
|
|
|
public function updatedPerPage(): void
|
|
{
|
|
$this->resetPage();
|
|
}
|
|
|
|
public function submitTicket(TicketIngestionService $ticketIngestionService): void
|
|
{
|
|
$this->submitError = null;
|
|
$this->lastResult = null;
|
|
|
|
$this->validate([
|
|
'newTicketMessage' => ['required', 'string', 'min:5', 'max:5000'],
|
|
'apiUser' => ['nullable', 'string', 'max:255', 'required_with:apiPassword'],
|
|
'apiPassword' => ['nullable', 'string', 'max:255', 'required_with:apiUser'],
|
|
]);
|
|
|
|
try {
|
|
$ingested = $ticketIngestionService->ingest(trim($this->newTicketMessage), $this->credentialsPayload());
|
|
} catch (OllamaUnavailableException $e) {
|
|
$this->submitError = 'LLM provider niet beschikbaar. Reden: '.$e->getMessage();
|
|
|
|
return;
|
|
}
|
|
|
|
$this->reset(['newTicketMessage', 'apiUser', 'apiPassword']);
|
|
$this->resetPage();
|
|
|
|
$this->lastResult = [
|
|
'ticket_id' => $ingested['ticket']->id,
|
|
'status' => $ingested['ticket']->status,
|
|
];
|
|
}
|
|
|
|
private function credentialsPayload(): ?array
|
|
{
|
|
if (trim($this->apiUser) === '' && trim($this->apiPassword) === '') {
|
|
return null;
|
|
}
|
|
|
|
return [
|
|
'apiuser' => $this->apiUser,
|
|
'apipassword' => $this->apiPassword,
|
|
];
|
|
}
|
|
|
|
public function render(AdminTicketService $service)
|
|
{
|
|
return view('livewire.admin.ticket-monitor', [
|
|
'tickets' => $service->paginateWithDecision($this->perPage),
|
|
]);
|
|
}
|
|
}
|