Чат
(UI-секція) — центральна зона workspace у режимі Chat. Переписка між RU і TU в реальному часі.
Верхня панель
- Аватар RU (ліворуч) + ім’я + id — клік на аватар відкриває профіль. Ім’я та id клікабельні окремо для копіювання.
- Аватар TU (поруч) + ім’я + id — так само.
Profit: N$— прибуток по цій парі RU↔TU.LT day: N— поточний LT (днів відколи RU вперше написав TU).- Перемикач режиму:
Chat/Mail(для деяких діалогів такожEmail). Перемикання перезавантажує з нуля — скрол і контекст поточного режиму не зберігаються.
Стрічка повідомлень
Повідомлення показуються хронологічно, згруповані по датах (розділювачі-дати типу Today, 27 Jul 2025).
Типи повідомлень
- Текст
- Фото — може бути позначка «оплачене/прочитане»
- Відео
TODO: перелік візуальних бейджів/індикаторів на повідомленні (оплачено/прочитано/інше) — уточнити повний набір.
Системні розділювачі
Today/ дата — поділ по дняхchat started— початок платного чату. Все між цим маркером і наступнимchat stopped(якщо є) — це платний чат і тригерить таски типуChat: active*(див. tasks-column).
Переклад повідомлень
Перекладач працює в обидва боки:
- Для вхідних — при наведенні на повідомлення з’являється іконка → клік → під оригіналом з’являється переклад (показується зв’язка оригінал + переклад)
- Для вихідних — оператор перекладає перед відправкою
Мова перекладу вибирається в полі вводу (EN у правому куті). Див. deepl-service.
Індикатори доставки
Поруч з повідомленням — час відправки/отримання. Інші явні статус-значки (доставлено / не доставлено / помилка) поки не видно в UI.
Поле вводу
Внизу — поле з placeholder Напишіть повідомлення.... Елементи:
- Смайлики
- Прикріпити фото
- Перекладач
- Вибір мови перекладу
- Кнопка відправки
Коли вводити не можна
- RU offline — знизу з’являється «RU наразі не онлайн. Надсилання повідомлень недоступне, доки він не буде онлайн.»
- RU у whitelist — писати вручну не можна (ведеться автоматично через chat-sender).
Ліміти відправки (Chat only)
| Ситуація | Ліміт |
|---|---|
| Звичайний (безкоштовний) чат, один і той самий RU | 1 повідомлення на 60 с |
| Між різними RU (одна TU) | мінімум 5 с між відправками |
| Активний (платний) чат | без обмежень |
Технічні деталі черги Chat — chat-queue.
Платний vs безкоштовний чат
- Безкоштовний — дефолтний стан. Повідомлення йдуть,
chat startedще не спрацював. - Платний — починається по подієвому маркеру
chat started(часто коли RU пише TU або відповідає у чаті). Платний може бути зупинений RU, або завершитись закриттям чату. - Таски формуються з урахуванням стану:
Chat: active,active-unanswered,finished-unanswered,finished-write-again(див. tasks-column).
Нюанси
- Перемикач Chat/Mail/Email — повний reset переглядуваного контексту.
- Клік на аватар RU і TU відкриває ту саму модалку (profile) — поля можуть відрізнятись, візуально подібно.
- Кольори повідомлень — RU і TU візуально розрізняються (різний відтінок фону). Системні маркери (
chat started, дата) йдуть окремим стилем.
Зв’язки
- Бек-логіка чату: chat
- Черга відправки: chat-queue
- Автоматичний сендер: chat-sender
- Переклад: deepl-service
- Таски чату: task-chat-service, tasks-column
- Сокет-події чату: lady-runner-tab