mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
Очередь помнит, с какого момента ждёт клиент (waiting_since), и «дольше всех ждущий» больше не считается по последнему сообщению: клиент, напомнивший о себе, уезжал в конец очереди. Постановка в очередь сведена в одно место (conversations.queue) вместо шести копий одного правила. Уведомление видно тем же, кому виден диалог: раньше оно фильтровалось только правом, и оператор чужой группы получал оклик с именем клиента и куском переписки по диалогу, который не может открыть. Получатели считаются одним запросом вместо запроса на каждого сотрудника. Уведомления доезжают событием по сокету, а не следующим опросом: сокет поднят на уровень оболочки и работает на любом экране. Появились уведомления самого браузера — без service worker и Web Push, чтобы не тащить на self-hosted зависимость от чужого push-сервиса. Настройка «о чём звать» стала одна на все транспорты (NotificationPreference), набор событий приведён к макету: «новый диалог» и «клиент запросил оператора» разделены, добавлены «назначили на меня» и «долго ждёт человека». Забытый диалог больше не тонет в тишине: свип напоминает группе, потом всем, потом руководству; сроки — настройка организации в новом разделе «Когда звать на помощь». Назначение стало осмысленным актом — назначенного зовут лично, у него есть срок, и не взял — диалог возвращается всем. Присутствие берётся из открытого сокета и подсказывает двум местам: очереди — что напоминать некому, и выбору ответственного — кто сейчас за рабочим местом. Макет: design/baseline/Очередь и уведомления. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>