v1.2.1
- Generic AI integration (Admin > Integracje > "Integracja AI"), optional and off by default: an OpenAI-compatible /chat/completions client (Groq, OpenAI, or a self-hosted Ollama instance) configured by base URL, optional API key, model, and an SSL-verification toggle. Foundation for the two AI features below and anything else that wants an LLM call in the future. - BookStack automatic content tagging (AI): "Otaguj nową treść"/"Otaguj wszystko ponownie" buttons plus `php artisan bookstack:tag-content` (--dry-run/--force/--limit=N) tag every book/chapter/page with matching helpdesk subcategory names, idempotent by default. - BookStack search refinement: "Przeszukuj" is now three independent checkboxes (Książki/Strony/Rozdziały) instead of a single dropdown, plus a new "Szukaj po" setting (nazwa/tagi/oba) — tag matching uses the bare subcategory name, matching what auto-tagging writes. - AI-driven ticket triage + summary (Admin > Integracje > "Automatyzacja AI dla zgłoszeń", via new scheduled ai:run-ticket-automation): five toggles auto-assign/correct category+subcategory, rewrite an unclear subject, and set priority from content, once per ticket in the background; every change is logged in the ticket's history. Separately, an AI summary + suggested action for every ticket, shown to operators only, with an admin-editable prompt. - Operators can now reassign a ticket to any team, not just one they belong to. - The auto-refresh countdown badges (ticket view, operator queue) are now clickable — fetch immediately and reset the countdown. - All 7 "cyclical" intervals (3 browser refresh countdowns, the notification bell poll, and the 4 background scheduled commands) are now configurable from Admin > Konfiguracja instead of fixed in code. - Fixed: an operator viewing a ticket that's deleted or moved outside their team scope mid-session is now redirected to the operator queue instead of hitting an error. - Docs: README/ARCHITECTURE/CLAUDE/install/wiki updated for all of the above. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
48
install.md
48
install.md
@@ -74,7 +74,7 @@ APP_LOCALE=pl
|
||||
APP_FALLBACK_LOCALE=pl
|
||||
|
||||
AUTHOR_CONTACT=helpdesk@twoja-domena.pl # widoczne w Admin > O aplikacji
|
||||
VERSION=1.1.3 # widoczne w Admin > O aplikacji
|
||||
VERSION=1.2.1 # widoczne w Admin > O aplikacji
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=mariadb # nazwa serwisu z compose.yaml, NIE 127.0.0.1
|
||||
@@ -265,14 +265,19 @@ docker run --rm -v "$(pwd)/src":/app -w /app node:22 npm run build
|
||||
|
||||
Powtarzaj drugi krok po każdej zmianie w `resources/css/` lub `resources/js/`.
|
||||
|
||||
### 1.6. Zadanie cykliczne (SLA, automatyzacje, poczta IMAP) i kolejka
|
||||
### 1.6. Zadanie cykliczne (SLA, automatyzacje, poczta IMAP, AI) i kolejka
|
||||
|
||||
`routes/console.php` planuje `tickets:check-sla-breaches` i `automation:run-rules`
|
||||
co 15 minut oraz `emails:fetch-imap` (odbieranie zgłoszeń/odpowiedzi e-mailem —
|
||||
patrz Admin > Poczta) co 5 minut, ale **obraz Dockera nie ma wbudowanego
|
||||
cron/supervisora** — bez dodatkowego kroku żadne z tych zadań nigdy się nie
|
||||
uruchomi (poczta IMAP nadal da się sprawdzić ręcznie przyciskiem „Pobierz teraz”,
|
||||
ale bez crona nic nie dzieje się samo). Najprościej dodać wpis crona **na hoście**:
|
||||
co 15 minut, oraz `emails:fetch-imap` (odbieranie zgłoszeń/odpowiedzi e-mailem —
|
||||
patrz Admin > Poczta) i `ai:run-ticket-automation` (opcjonalna automatyczna
|
||||
kategoryzacja/podsumowania AI zgłoszeń — patrz Admin > Integracje) co 5 minut,
|
||||
ale **obraz Dockera nie ma wbudowanego cron/supervisora** — bez dodatkowego
|
||||
kroku żadne z tych zadań nigdy się nie uruchomi (poczta IMAP nadal da się
|
||||
sprawdzić ręcznie przyciskiem „Pobierz teraz”, ale bez crona nic nie dzieje się
|
||||
samo). Wszystkie cztery interwały są też konfigurowalne z poziomu **Admin >
|
||||
Konfiguracja** (bez potrzeby edycji kodu czy restartu — nowa wartość obowiązuje
|
||||
od najbliższego tyknięcia harmonogramu). Najprościej dodać wpis crona **na
|
||||
hoście**:
|
||||
|
||||
```cron
|
||||
* * * * * cd /ścieżka/do/repo && docker compose exec -T servicedesk php artisan schedule:run >> /dev/null 2>&1
|
||||
@@ -301,15 +306,27 @@ użytku:
|
||||
3. Użyj przycisków **„Testuj połączenie”** przy obu sekcjach, zanim zaczniesz
|
||||
polegać na logowaniu przez katalog.
|
||||
|
||||
### Integracje opcjonalne (BookStack)
|
||||
### Integracje opcjonalne (BookStack, AI)
|
||||
|
||||
Podpowiedzi artykułów z bazy wiedzy BookStack (przy tworzeniu zgłoszenia i w
|
||||
panelu operatora) są **domyślnie wyłączone** i nie wymagają żadnej zmiennej w
|
||||
`.env` — całość konfiguruje się w **Admin > Konfiguracja**: adres instancji,
|
||||
`.env` — całość konfiguruje się w **Admin > Integracje**: adres instancji,
|
||||
Token ID/Secret (rola/użytkownik właściciela tokenu musi mieć w BookStacku
|
||||
uprawnienie „Access System API”), oraz osobne listy dozwolonych półek dla
|
||||
podpowiedzi przy tworzeniu zgłoszenia i dla panelu operatora — dopóki żadna
|
||||
półka nie jest zaznaczona, wyszukiwanie nic nie zwraca.
|
||||
uprawnienie „Access System API”), filtr typu treści (książki/strony/rozdziały,
|
||||
niezależne checkboxy), tryb wyszukiwania (po nazwie / po tagach / oba), oraz
|
||||
osobne listy dozwolonych półek dla podpowiedzi przy tworzeniu zgłoszenia i dla
|
||||
panelu operatora — dopóki żadna półka nie jest zaznaczona, wyszukiwanie nic
|
||||
nie zwraca.
|
||||
|
||||
Integracja AI (Admin > Integracje > „Integracja AI”) jest **domyślnie
|
||||
wyłączona** i tak samo nie wymaga żadnej zmiennej w `.env` — adres API
|
||||
(dowolny dostawca kompatybilny z OpenAI: Groq, OpenAI, lokalny Ollama),
|
||||
opcjonalny klucz API, nazwa modelu i przełącznik weryfikacji SSL. Sama w
|
||||
sobie nic nie robi — dopiero po jej włączeniu można włączyć automatyczne
|
||||
tagowanie treści BookStack (przyciski przy integracji BookStack) oraz
|
||||
automatyczną kategoryzację/podsumowania AI zgłoszeń (Admin > Integracje >
|
||||
„Automatyzacja AI dla zgłoszeń”, wymaga też wpisu crona z kroku 1.6/2.6
|
||||
powyżej — to ten sam harmonogram co SLA/automatyzacje/IMAP).
|
||||
|
||||
---
|
||||
|
||||
@@ -352,7 +369,7 @@ APP_LOCALE=pl
|
||||
APP_FALLBACK_LOCALE=pl
|
||||
|
||||
AUTHOR_CONTACT=helpdesk@twoja-domena.pl
|
||||
VERSION=1.1.3
|
||||
VERSION=1.2.1
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1 # albo adres IP/hostname prawdziwego serwera DB
|
||||
@@ -460,10 +477,11 @@ server {
|
||||
}
|
||||
```
|
||||
|
||||
### 2.6. Zadanie cykliczne (SLA, automatyzacje, poczta IMAP) i kolejka
|
||||
### 2.6. Zadanie cykliczne (SLA, automatyzacje, poczta IMAP, AI) i kolejka
|
||||
|
||||
Crontab użytkownika, pod którym stoi aplikacja (np. `www-data`) — obsługuje też
|
||||
`automation:run-rules` i `emails:fetch-imap` (patrz 1.6 wyżej):
|
||||
`automation:run-rules`, `emails:fetch-imap` i `ai:run-ticket-automation`
|
||||
(patrz 1.6 wyżej, w tym konfigurowalne interwały w Admin > Konfiguracja):
|
||||
|
||||
```cron
|
||||
* * * * * cd /var/www/servicedesk/src && php artisan schedule:run >> /dev/null 2>&1
|
||||
|
||||
Reference in New Issue
Block a user