- 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

@@ -60,16 +60,24 @@ konkretnej wiadomości w wątku zgłoszenia.
Kolejka aktualizuje się **na żywo** — nowe zgłoszenie, zmiana statusu/priorytetu/
przypisania czy nowa odpowiedź pojawiają się bez odświeżania strony. Obok
przycisku „Kolumny” widać mały licznik odliczający do zera — to niezależny od
połączenia na żywo, okresowy fallback (co ok. 60 s), na wypadek gdyby
połączenie sieciowe w tle się zerwało.
połączenia na żywo, okresowy fallback (interwał ustawia administrator w
Konfiguracji, domyślnie co ok. 60 s), na wypadek gdyby połączenie sieciowe w
tle się zerwało. **Licznik jest też klikalny** — kliknięcie od razu odświeża
listę i resetuje odliczanie, zamiast czekać na naturalny koniec.
## Praca ze zgłoszeniem
Widok zgłoszenia też aktualizuje się na żywo — nowa wiadomość klienta pojawia
się od razu (bez odświeżania), podobnie jak zmiana statusu/priorytetu/zespołu
zrobiona przez innego operatora albo przez regułę automatyzacji SLA. Licznik
przy przycisku „Wróć do listy” to taki sam fallbackowy zegar jak w kolejce
(co ok. 30 s).
zrobiona przez innego operatora, przez regułę automatyzacji SLA albo przez
automatyzację AI (patrz „Historia” niżej). Licznik przy przycisku „Wróć do
listy” to taki sam fallbackowy, klikalny zegar jak w kolejce (domyślnie co
ok. 30 s, konfigurowalny przez administratora).
Jeśli zgłoszenie, które akurat oglądasz, zostanie usunięte przez kogoś
innego, albo trafi (przez zmianę zespołu) poza Twój zakres widoczności —
zostaniesz automatycznie przeniesiony z powrotem do swojej kolejki, zamiast
zobaczyć błąd.
W widoku pojedynczego zgłoszenia:
@@ -78,7 +86,10 @@ W widoku pojedynczego zgłoszenia:
„Obserwowane zgłoszenia” w Twoich preferencjach powiadomień
(`/settings/notifications`).
- **Zmiana statusu / priorytetu / zespołu / przypisanego operatora** — z listy
rozwijanej; „Przypisz do mnie” to skrót jednym kliknięciem.
rozwijanej; „Przypisz do mnie” to skrót jednym kliknięciem. Zespół można
zmienić na **dowolny**, nie tylko taki, do którego sam należysz — jeśli
przeniesiesz zgłoszenie do zespołu spoza swojego zakresu widoczności,
zostaniesz automatycznie przeniesiony do swojej kolejki.
- **Odpowiedź publiczna** — widoczna dla klienta; można wybrać **szablon
odpowiedzi** (wstawia gotowy tekst do edycji) i wysłać razem ze zmianą statusu
jedną **szybką akcją** (np. „Wyślij i zamknij”) zamiast dwóch osobnych kroków.
@@ -91,6 +102,10 @@ W widoku pojedynczego zgłoszenia:
boczny podpowiada artykuły pasujące do kategorii/podkategorii zgłoszenia;
kliknięcie otwiera artykuł, przycisk „Kopiuj link" kopiuje adres bez
wychodzenia ze zgłoszenia (np. do wklejenia w odpowiedzi).
- **Podsumowanie AI** (jeśli administrator włączył automatyzację AI
zgłoszeń) — panel boczny widoczny tylko w panelu operatora, pokazuje krótkie
podsumowanie sprawy i sugerowaną kolejną akcję; odświeża się samo, gdy w
wątku pojawi się nowa wiadomość — nie trzeba go ręcznie odświeżać.
- **Ocena obsługi** — jeśli klient już ocenił zgłoszenie, ocena (gwiazdki +
ewentualny komentarz) pokazuje się w panelu bocznym, tylko do odczytu.
- **Licznik czasu pracy** — start/stop/reset przy zgłoszeniu; czas zapisuje się
@@ -100,9 +115,12 @@ W widoku pojedynczego zgłoszenia:
po jego zamknięciu; wcześniej naliczony czas można wciąż ręcznie skorygować.
- **Edycja danych zgłoszenia** — temat, opis, podkategoria, pola dodatkowe;
zmiana kategorii może wysłać powiadomienie do klienta.
- **Historia** — log każdej zmiany (status, priorytet, zespół, przypisanie) z
datą; wpis zaczynający się od „Automatyzacja: …” oznacza, że zmianę wykonała
reguła automatyzacji SLA (Admin > Automatyzacja SLA), nie operator ręcznie.
- **Historia** — log każdej zmiany (status, priorytet, zespół, przypisanie,
kategoria/podkategoria, temat) z datą; wpis „Automatyzacja: nazwa reguły”
oznacza regułę automatyzacji SLA (Admin > Automatyzacja SLA), a
„Automatyzacja: klasyfikacja AI” — automatyczną kategoryzację/priorytet
ustawione przez integrację AI (Admin > Integracje) — w obu przypadkach nie
operator ręcznie.
## Statystyki (`/operator/stats`)