Чат
(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 у правому куті). Див. DeepLService.
Індикатори доставки
Поруч з повідомленням — час відправки/отримання. Інші явні статус-значки (доставлено / не доставлено / помилка) поки не видно в UI.
Поле вводу
Внизу — поле з placeholder Напишіть повідомлення.... Елементи:
- Смайлики
- Прикріпити фото
- Перекладач
- Вибір мови перекладу
- Кнопка відправки
Коли вводити не можна
- RU offline — знизу з’являється «RU наразі не онлайн. Надсилання повідомлень недоступне, доки він не буде онлайн.»
- RU у whitelist — писати вручну не можна (ведеться автоматично через ChatSender).
Ліміти відправки (Chat only)
| Ситуація | Ліміт |
|---|---|
| Звичайний (безкоштовний) чат, один і той самий RU | 1 повідомлення на 60 с |
| Між різними RU (одна TU) | мінімум 5 с між відправками |
| Активний (платний) чат | без обмежень |
Mail має окремий ліміт (1 запит/5с, спільний з сендером) — див. Mail. Технічні деталі черги Chat — ChatQueue.
Платний 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
- Черга відправки: ChatQueue
- Автоматичний сендер: ChatSender
- Переклад: DeepLService
- Таски чату: TaskChatService, Tasks Column
- Сокет-події чату: LadyRunner-Tab