Batele Курьер — чаты и поддержка (мобилка)

Демо · эпик batele-microservices#481 · issue batele-turbo#18 · реализация batele_pro_flutter (io_ui, Nunito Sans, зелёный #21C64F). Модель v3: чат НЕ привязан к заказу — это долгоживущий канал ПАРЫ участников (одна пара = один чат, сквозная история через все заказы и доставки). Контекст живёт на сообщении: message = {id, chatId, orderId?, orderShortId?, deliveryId?, ticketId?} — показывается чипом на сообщении. Два вида: (а) вся история пары с чипами доставок/заказов; (б) фильтр chatId+deliveryId — шапка-чип «D-7301 ✕», видны только сообщения доставки, композер авто-тегирует новые. Клик по чипу сообщения → включает фильтр (б). Пары создаются лениво; завершение доставки чат НЕ закрывает. kGreen — основной акцент UI; kPrimary #102DC6 в палитре есть, но в UI не используется. Легенда: курьер Бакыт Т. · клиент Айгерим А. · ресторан «Тандыр» · служба Boomerang Go · заказ #4821 / доставка D-7301 (+ прошлые D-7288, D-7295).

Экран 1  Инбокс «Чаты» · пары

13:42

Чаты

Активная доставка · D-7301

B

Boomerang Go · моя служба

Жди 5 минут и вези обратно

D-7301
14:31 2
Т

Тандыр · ресторан

Заказ готов, можно забирать

D-7301
14:07
А

Айгерим А. · клиент

Вы уже близко?

D-7301
14:28

Ранее · история пар не исчезает

П

Плов-Центр · ресторан

Спасибо, буду заказывать ещё 🙌

D-7288
вчера
Д

Данияр К. · клиент

Оставил у консьержа, спасибо

D-7295
вчера

Список — пары участников, не доставки. Превью показывает последнее сообщение и чип его контекста.

Инбокс = пары, не доставки. Одна пара = один сквозной чат; прошлые доставки (D-7288, D-7295) остаются в списке — история не исчезает, писать в старую пару можно.

Экран 2  Служба · сквозной чат

13:42
B

Boomerang Go

Моя служба · сквозной чат

Нажмите чип доставки — покажем только её переписку
Вчера

Забрал заказ в «Плов-Центр», еду к клиенту

18:40

Boomerang Go · Нурлан

Принято 👍 отметил в системе

18:41
Сегодня

Клиент не отвечает уже 10 минут. Что делать?

14:30

Boomerang Go · Нурлан

Жди 5 минут и вези обратно на филиал. Отметь «клиент недоступен».

14:31
Сообщение…

Сквозной чат пары «курьер ↔ служба»: сообщения вчерашней доставки D-7288 и сегодняшней D-7301 в одной ленте, у каждого — чип доставки (message.deliveryId). Разделители дат. Тап по чипу → фильтр-режим (экран 3).

Экран 3  Служба · фильтр D-7301

13:42
B

Boomerang Go

Моя служба

Фильтр: D-7301 только эта доставка
Сегодня · доставка D-7301

Клиент не отвечает уже 10 минут. Что делать?

14:30

Boomerang Go · Нурлан

Жди 5 минут и вези обратно на филиал. Отметь «клиент недоступен».

14:31

Понял, жду

14:32
Новое сообщение уйдёт с меткой D-7301
Сообщение по D-7301…

Опционально: тап по чипу сообщения — показать только эту доставку. Отдельный фильтр-режим chatId + deliveryId: шапка-чип «D-7301 ✕» (снять — вернуться к сквозному), видны только сообщения доставки, композер авто-тегирует новые. Табы «Клиент / Заведение / Служба» переключают канал в том же контексте; unread на табах — точка (счётчик на канал, не на контекст).

Экран 4  Из доставки · сегмент чата

Т
13:42

#D-7301 · #4821

6.3 км · 14:05–14:45

Вся история канала · новые — с меткой D-7301
Вчера

Спасибо, всё вовремя привезли 🙏

19:24
Сегодня

Вы уже близко?

14:28

5 минут, подъезжаю по Джалу

14:29
Уйдёт с меткой D-7301
Написать клиенту…

Вход из доставки: карта + sheet, под шапкой — табы «Клиент / Заведение / Служба» (активный подчёркнут зелёным, у соседнего — точка непрочитанного на канал). По умолчанию видна вся история канала (в ленте и прошлая доставка D-7288) — фильтр не включён; чип D-7301 = только авто-тег композера («новое уйдёт с меткой D-7301»). Быстрое переключение вендор→курьер→служба в контексте доставки.

Экран 5  Клиент · передача · офлайн

13:42
А

Айгерим А.

был(а) недавно · клиент

Фильтр:D-7301

Нет сети — отправим автоматически

Оставьте, пожалуйста, у двери 🙏

14:30
14:33

Оставил у двери, как договаривались

в очереди14:33

Заказ у вас под дверью 👍

Уйдёт с меткой D-7301
Сообщение…

Пара «курьер ↔ клиент» в фильтре D-7301. Фото передачи; офлайн-баннер и ошибка — soft-red; сообщения в очереди (часики), «Повторить». Композер помечает новые сообщения D-7301.

Экран 6  Ресторан · чипы заказов

13:42
Т

Тандыр

Филиал «Центр» · ресторан · сквозной

Курьер Бакыт Т. назначен · доставка D-7301 · 14:03

Тандыр · Айзада

Заказ почти готов, ещё пару минут 🙌

14:05

Какой из двух пакетов #4821? На полке стоят два

14:06

Тандыр · Айзада

Тот, что с зелёной наклейкой 🟢 второй — не ваш

14:07

Забрал, спасибо! Поехал 🚗

14:08
Сообщение…

Пара «курьер ↔ ресторан» — организация: подпись «Тандыр · Айзада» (senderMemberId). Контекст на сообщении — чип заказа «#4821» (orderShortId), не доставки.

Экран 7  Новая пара · пусто

13:42
Н

Нургиза Б.

клиент · доставка D-7302

виртуальный

Нет сообщений

Пары с Нургизой Б. ещё не было. Напишите первым — чат создастся, дальнейшие доставки лягут в эту же пару.

Пара создастся при первом сообщении
Первое сообщение уйдёт с меткой D-7302
Написать клиенту…

Ленивое создание пары: пара «курьер ↔ Нургиза» не существует, пока не отправлено первое сообщение. Дальше все её заказы/доставки лягут в этот же сквозной чат.

Экран 8  История пары · прошлая доставка

13:42
П

Плов-Центр

ресторан · сквозной чат

Вчера

Плов-Центр · Азиз

Спасибо за доставку, буду заказывать ещё 🙌

18:52
Доставка D-7288 завершена · чат остаётся открытым

Спасибо! Хорошего вечера 🙂

18:53
Сообщение…

Архива больше нет. Завершение доставки D-7288 не закрывает пару — системное сообщение по центру, но чат остаётся открытым: композер активен, писать в старую пару можно (следующий заказ продолжит эту же ленту).

Экран 9  Push · экран блокировки

13:42

14:29

пятница, 10 июля

А

Айгерим А.

сейчас

Доставка D-7301 · Заказ #4821

Вы уже близко?

B

Boomerang Go · Нурлан

1 мин

Доставка D-7301

Жди 5 минут и вези обратно

Пуш уходит только офлайн-получателю (typing/read/presence/unread — по WebSocket). Заголовок = автор пары, вторая строка = контекст сообщения (доставка/заказ), тело = текст.