- 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:
2026-07-24 13:38:39 +02:00
parent 0d116dfd98
commit 313e01ad24
46 changed files with 3224 additions and 150 deletions

View File

@@ -2,9 +2,9 @@
Panel administratora (`/admin`) to jedno miejsce do konfiguracji całego systemu:
struktura zgłoszeń (kategorie, pola, statusy, priorytety, SLA), automatyzacje
(reguły SLA, wyzwalacze), użytkownicy i zespoły, treści (szablony, szybkie
akcje, e-maile), wygląd/branding oraz integracje (LDAP, poczta SMTP/IMAP,
BookStack, API).
(reguły SLA, wyzwalacze, automatyzacja AI zgłoszeń), użytkownicy i zespoły,
treści (szablony, szybkie akcje, e-maile), wygląd/branding oraz integracje
(LDAP, poczta SMTP/IMAP, BookStack, AI, API).
Domyślnie każde konto ląduje po zalogowaniu w panelu Klienta; przełącz się do
panelu Administratora przez menu profilu (prawy górny róg).
@@ -173,6 +173,14 @@ ważne + treść HTML).
numerem przestaje działać. REST API (`/api/v1/...`) tego nie dotyczy —
tam zgłoszenia zawsze identyfikuje się po `id`, niezależnie od tego
ustawienia.
- **Częstotliwość odświeżania i harmonogramu** — dwie grupy pól:
- **Odświeżanie w przeglądarce** — co ile sekund odświeża się (poza
aktualizacjami na żywo) widok zgłoszenia (klient i operator), lista
zgłoszeń operatora, i dzwonek powiadomień.
- **Zadania w tle** — co ile minut uruchamiają się sprawdzanie naruszeń
SLA, reguły automatyzacji, pobieranie e-maili (IMAP) i automatyzacja AI
zgłoszeń. Zmiana obowiązuje od najbliższego tyknięcia harmonogramu (co
minutę), bez potrzeby restartu czy redeployu.
SMTP (host, port, szyfrowanie, użytkownik/hasło, adres/nazwa nadawcy, z
przyciskiem **„Testuj połączenie”**) konfiguruje się w zakładce **Poczta**,
@@ -248,7 +256,12 @@ razem, zamiast być rozrzucone po różnych zakładkach.
zapytania kończą się błędem 403 mimo poprawnych danych logowania.
- **Weryfikuj certyfikat SSL** — włączone domyślnie; wyłącz tylko jeśli
instancja BookStack korzysta z certyfikatu self-signed/prywatnego CA.
- **Przeszukuj** — strony i książki / tylko strony / tylko książki.
- **Przeszukuj** — trzy niezależne checkboxy: Książki / Strony / Rozdziały
(dowolna kombinacja).
- **Szukaj po** — słowa kluczowe w nazwie / tagi / oba. Wyszukiwanie po
tagach dopasowuje artykuły oznaczone w BookStacku tagiem o nazwie zgodnej
z podkategorią zgłoszenia (np. tag „Drukarki i skanery”) — patrz
automatyczne tagowanie niżej, żeby nie robić tego ręcznie dla całej wiki.
- **Dozwolone półki** — dwie **niezależne** checklisty: jedna dla podpowiedzi
przy tworzeniu zgłoszenia (klient, operator, formularz gościa na stronie
głównej), druga dla panelu bocznego operatora na widoku istniejącego
@@ -263,6 +276,43 @@ razem, zamiast być rozrzucone po różnych zakładkach.
- Przycisk **„Testuj połączenie”** sprawdza niezapisane wartości formularza
(analogicznie do LDAP/SMTP) i pokazuje dokładny komunikat błędu z
BookStacka, jeśli połączenie się nie powiedzie.
- **Automatyczne tagowanie treści (AI)** — przyciski **„Otaguj nową
treść”** (pomija już otagowane pozycje) i **„Otaguj wszystko ponownie”**
(klasyfikuje od nowa całą wiki) używają integracji AI (niżej) do
otagowania każdej książki/strony/rozdziału nazwami pasujących podkategorii
helpdesku — bez tego wyszukiwanie „po tagach” wyżej nic nie znajdzie.
Wymaga wcześniej skonfigurowanej i włączonej integracji AI. Dostępne też
z linii poleceń: `php artisan bookstack:tag-content` (`--dry-run`,
`--force`, `--limit=N`).
- **Integracja AI** — opcjonalna, **domyślnie wyłączona**, ogólne połączenie z
dostawcą modelu językowego (nie tylko dla BookStacka — patrz
„Automatyzacja AI dla zgłoszeń” niżej). Pola: **adres API** (dowolny
dostawca kompatybilny z OpenAI — np. Groq, OpenAI, lokalny Ollama),
**klucz API** (opcjonalny — zostaw puste dla lokalnych instancji bez
autoryzacji), **model**, **weryfikacja SSL** (wyłącz tylko dla instancji z
certyfikatem self-signed, np. lokalny Ollama). Przycisk **„Testuj
połączenie”** jak przy pozostałych integracjach.
- **Automatyzacja AI dla zgłoszeń** — wymaga włączonej integracji AI powyżej.
Zgłoszenia przetwarzane są w tle, cyklicznie (`ai:run-ticket-automation`,
interwał konfigurowalny w Konfiguracji) — nie synchronicznie przy
składaniu zgłoszenia, więc nie spowalnia to klienta.
- **Automatyczna kategoryzacja** — pięć niezależnych przełączników: przypisz
kategorię/podkategorię, gdy zgłoszenie nie ma żadnej; dobierz podkategorię,
gdy ma tylko kategorię; zweryfikuj i ewentualnie popraw już przypisaną
podkategorię; popraw temat zgłoszenia, jeśli jest niejasny; ustaw
priorytet na podstawie treści. Każde zgłoszenie jest sprawdzane **tylko
raz** — zmiany trafiają do historii zgłoszenia z adnotacją
„Automatyzacja: klasyfikacja AI” (patrz „Historia” w przewodniku
operatora).
- **Podsumowanie AI dla operatora** — osobny przełącznik generuje krótkie
podsumowanie + sugerowaną kolejną akcję dla **każdego** zgłoszenia,
widoczne tylko operatorowi (panel boczny „Podsumowanie AI” w widoku
zgłoszenia), odświeżane automatycznie, gdy w wątku pojawi się nowa
wiadomość.
- **Prompt systemowy podsumowania** — edytowalne pole tekstowe z gotową
wartością domyślną i przyciskiem **„Resetuj”**.
## API