chatId(собеседник) AND deliveryId=D-7301 · по умолчанию канал открыт со всей историей; здесь переключайте собеседника табамиПара виртуальная. Первое сообщение материализует канал — оно уйдёт клиенту с меткой D-7301.
platform_incident), привязанные к нашим доставкам. Открывают админы города/страны или система; служба — сторона-участник, отвечает в беседе тикета.ticketId: сообщения тикета несут метку INC-…, как обычные сообщения несут deliveryId.| ID | Тема | Severity | Связка | Статус | Агент платформы | SLA | Создан |
|---|---|---|---|---|---|---|---|
| INC-311 | Просрочка доставки D-7301 | high | D-7301 · #4821 | open | Азамат · админ города | +22 мин | сегодня 14:28 |
| INC-306 | Спор по адресу доставки | medium | D-7298 · #4805 | in progress | Азамат · админ города | — | сегодня 12:40 |
| INC-299 | Клиент не принял заказ | medium | D-7285 · #4790 | resolved | Салтанат · админ города | — | вчера 19:15 |
| INC-290 | Жалоба на поведение курьера | low | D-7280 · #4771 | resolved | Азамат · админ города | — | 07.07 16:02 |
Одна пара участников = один чат. История канала сквозная через все доставки: вчера курьер вёз D-7288, сегодня — D-7301, но переписка одна и та же. Чат создаётся лениво — при первом сообщении.
Каждое сообщение несёт свой контекст, а не весь чат: { chatId, orderId?, orderShortId?, deliveryId?, ticketId? }. В ленте он виден как чип у сообщения. Клик по чипу включает фильтр канала.
Пока в паре нет ни одного сообщения, она виртуальная — видна в списке, но чата в базе ещё нет. Первое сообщение материализует канал. Так UI всегда показывает полный набор собеседников без пустых чатов.
Все сообщения пары по порядку, разделённые датами; у каждого — чип его доставки/заказа/тикета. Композер тегирует новое сообщение текущей активной доставкой.
chatId AND deliveryIdТот же канал, но показаны только сообщения одной доставки: чип «D-7301 ✕» в шапке, композер авто-тегирует новые этой доставкой. Крестик снимает фильтр. Данные — те же сообщения.
Участник со стороны службы — организация. Пишет диспетчер, платформа фиксирует senderMemberId. Исходящие подписаны автором — «Нурлан»; входящие от ресторана — «Тандыр · Айзада». Контрагент видит «Boomerang Go», команда — кто именно отвечал.
courierIdorgId · memberIdorgId · memberIduserIdmemberIdorgIdСлужба ↔ курьер / клиент / вендор. Долгоживущие каналы: не закрываются, доступны и после доставки. Сообщения помечены deliveryId.
ticketIdИнцидент (platform_incident) открывают SuperAdmin (админы города/страны) или система. Его беседа — это тот же канал, отфильтрованный по ticketId; сообщения несут метку INC-…. Статусом управляет платформа, служба — сторона.
Unread — свойство канала пары, не доставки и не сообщения. В списке каналов показывается число, в табах и карточках собеседников по доставке — точка «есть непрочитанное»: фильтр по доставке не меняет счётчик канала.
Пара «клиент ↔ курьер» доступна для письма только пока есть активная общая доставка. Вне её канал write-locked: история видна, композер заблокирован. Пары со службой такого ограничения не имеют.
Клик по каналу из карточки доставки открывает канал целиком (вся история пары). Фильтр по этой доставке — опциональный вид поверх, включается кнопкой или кликом по чипу.
Как выглядят пограничные случаи, которые встречаются в работе диспетчера.
Нет непрочитанных переписок. Новые сообщения появятся здесь автоматически.
Сообщение не ушло (нет сети / ошибка сервера) — остаётся в ленте с пометкой не отправлено и кнопкой Повторить. Ничего не теряется, порядок сохраняется.