Поддержка

Демо · эпик batele-microservices#481 · issue batele-turbo#18 · реализация web/root (shadcn)

Дашборд поддержки

Два контура root-консоли: инциденты платформы (споры и проблемы по заказам/доставкам/курьерам, часть открывается авто-системой) и общая поддержка пользователей. Маршрутизация по городу — вы видите Бишкек. Сегодня, 14:45.
Открытые
7
инциденты 3 · поддержка 4
Не назначено
1
TS-87 · ждёт агента
SLA просрочен
1
первый ответ · TS-87
Ср. первый ответ
9 мин
цель 15 мин
Решено сегодня
12
инц. 5 · подд. 7
Инциденты платформы
2
Open
1
Pending
1
Resolved
1
Closed

1 создан авто-системой сегодня · severity: high 1 medium 2

Общая поддержка
3
Open
1
Pending
7
Resolved
1
Closed

1 просрочен SLA · 1 без агента (TS-87)

Авто-инциденты за сегодня
3
Просрочка доставки
событие «доставка не завершена > 20 мин»
×2
Отмена после оплаты
событие «order.cancelled с paid=true»
×1
Авто-открытие. Доменные события платформы создают инцидент без участия пользователя: назначается severity, город берётся из заказа/доставки, backing-чат открывается сразу. Правила — на экране «Как это работает».
Горит SLA
1 просрочен
TS-87 Не приходит SMS-код
первый ответ · не назначен
просрочен 12 мин

Первый ответ — 15 мин, решение — 4 ч. Просрочка подсвечивается и попадает сюда.

Инциденты платформы

Проблемы и споры по клиентам, курьерам, компаниям, заказам и доставкам. Открываются пользователями и авто-системой по доменным событиям. Клик по строке — карточка инцидента с беседой.
ВсеOpenPendingResolvedClosed
IDТемаSeverityОбъектГородСтатусАгентSLAСозданИсточник
Severity задаётся при открытии (авто-правилом или агентом) и влияет на приоритет очереди: high просрочки и потерянные заказы, medium споры оплаты, low мелкие расхождения. Маршрутизация — по cityId: админ города видит свой город, админ страны — все.

INC-311 Просрочка доставки D-7301 high open

Создан авто-системой 14:28 · объект — доставка D-7301 · заказ #4821 · ресторан «Тандыр» · клиент Айгерим А.
B
Boomerang Go · Нурлан
онлайн · КурСлужба · участник канала (пара с SuperAdmin)
Фильтр канала по тикету: INC-311 один канал SuperAdmin ↔ Boomerang Go · показаны только сообщения с ticketId INC-311
Инцидент создан автоматически · Система · 14:28
Событие: просрочка доставки
Доставка D-7301 не завершена спустя 22 мин после ожидаемого времени (порог правила — 20 мин). Заказ #4821 · «Тандыр» → Айгерим А. · курьер Бакыт Т. · служба Boomerang Go. Severity назначен high, город — Бишкек. ticketId INC-311 orderId #4821 deliveryId D-7301
Назначен агент: Азамат Ж. · 14:30
Здравствуйте! Вижу авто-инцидент по доставке D-7301 — просрочка 22 минуты. Что с курьером, когда клиент получит заказ?
INC-311 #4821 D-7301
Вы · Азамат · агент · 14:33 ✓✓
Курьер Бакыт застрял в пробке на Чуй — авария перекрыла две полосы. ETA 14:50, клиента предупредили звонком. Заказ целый, довезём.
INC-311 D-7301
Boomerang Go · Нурлан · 14:41
Внутренняя заметка · видно только агентам
Азамат: Позвонил диспетчеру службы, ETA подтвердили. Если не доставят к 15:00 — эскалирую до высокого приоритета и оформлю компенсацию клиенту из фонда качества. INC-311
Вы · Азамат · заметка · 14:43
B Boomerang Go печатает
Ответ Внутренняя заметка
Отвечаете как Азамат · админ города
Заметка видна только агентам, сторона её не получит

Общая поддержка

Обращения любых пользователей платформы в поддержку: клиенты, курьеры, сотрудники организаций. Каждый тикет — карточка + backing-чат. Клик по строке — тикет с беседой.
ВсеOpenPendingResolvedClosed
IDТемаКто открылКатегорияСтатусАгентSLAСоздан
TS-87 Не приходит SMS-код клиент Авторизация open — не назначен просрочен 12 мин 14:17
TS-87 без агента и с просроченным SLA. Пока тикет не назначен, первый ответ не считается — таймер горит и уходит в красный. «Взять в работу» назначает вас агентом, открывает беседу и запускает отсчёт ответа. Непросмотренные и просроченные — вверх очереди.

TS-88 Не могу оплатить картой open

Открыт клиентом Айгерим А. · категория «Оплата» · агент Салтанат К. · связан с заказом #4821.
А
Айгерим А.
Клиент · участник канала (пара с SuperAdmin) · +996 555 74-21-08
Фильтр канала по тикету: TS-88 один канал SuperAdmin ↔ Айгерим А. · её прошлые обращения (TS-71 и др.) — соседние фильтры того же канала
Тикет открыт клиентом · 14:36
Здравствуйте! Не могу оплатить заказ картой — на шаге оплаты пишет «ошибка транзакции». Карта рабочая, в других приложениях платит. Прикладываю скрин. ✕ Ошибка транзакции · код 402 оплата_ошибка.png · 248 КБ
TS-88 #4821
Айгерим А. · 14:36
Здравствуйте! Вижу обращение, проверяю платёжный шлюз по вашему заказу #4821. Вернёмся с ответом в течение 15 минут.
TS-88 #4821
Вы · Салтанат · агент · 14:41 ✓✓
Новые сообщения
Спасибо! Жду. Заказ ещё висит в корзине, боюсь что цены изменятся.
TS-88 #4821
Айгерим А. · 14:44
Ответ Внутренняя заметка
Отвечаете как Салтанат · админ города
Заметка видна только агентам

Назначено мне

Тикеты и инциденты с вами как агентом — из обоих контуров. Сортировка по SLA: горящие выше. Азамат Ж. · админ города Бишкек.
По SLAПо новизнеПо статусу
INC-311Просрочка доставки D-7301 highopen D-7301
Boomerang Go · Нурлан: курьер застрял в пробке на Чуй, ETA 14:50, клиента предупредили…
1 решение 3:43
TS-90Жалоба на курьера pending клиент · Айгерим А.
Айгерим А.: курьер нагрубил и бросил пакет у подъезда, не позвонил. Приложила фото…
2 первый ✓ 14:09
Оба контура в одном списке. «Назначено мне» смешивает инциденты и поддержку, где вы — назначенный агент. Значок непрочитанного и таймер SLA — на каждой карточке; клик открывает беседу.

Как это работает

Модель чатов v3: чат — долгоживущий канал пары участников (не привязан к заказу), контекст лежит на сообщении, а тикет/инцидент — фильтр канала по ticketId. Ниже: контуры, участники, авто-инциденты, маршрутизация, SLA и статусы. Эпик batele-microservices#481 · apps/support поверх apps/chat.

Три контура поддержки

Root-консоль обслуживает два из трёх. Третий (поддержка вендора) живёт в консоли вендора и здесь не показывается.

platform_incident
Инциденты платформы

Проблемы и споры по клиентам, курьерам, компаниям, заказам, доставкам. Открывают пользователи и авто-система. Агенты — админы города/страны. Есть severity.

platform_support
Общая поддержка

Любой пользователь платформы ↔ поддержка. Вопросы по оплате, авторизации, аккаунту, выплатам. Агенты — админы города/страны.

vendor_support
Поддержка вендора не здесь

Клиент ↔ поддержка конкретного вендора. Агенты — сотрудники вендора. Управляется в консоли вендора, в root не входит.

Модель v3: канал пары · контекст на сообщении · тикет = фильтр по ticketId

Чат — долгоживущий канал пары участников, он не привязан к заказу. Контекст лежит на сообщении. Тикет и инцидент — не отдельный чат, а фильтр канала по ticketId: у пользователя один канал с поддержкой, обращения TS-88 / TS-71 — соседние фильтры внутри него.

Канал · chat
долгоживущий канал пары · chatId · не привязан к заказу · агент входит как role=agent
Сообщение · message
{ id, chatId, orderId?, orderShortId?, deliveryId?, ticketId? } — контекст на сообщении
Тикет / инцидент = фильтр по ticketId
deskType · subjectType · status · priority · category · cityId · assignedAgentId · SLA
Типы участников канала: Курьер КурСлужба Вендор Клиент SuperAdmin SuperOrg. Агенты платформы участвуют как SuperAdmin (админ города/страны) и SuperOrg — на стороне поддержки платформы.
Один канал — много тикетов. Пример: канал SuperAdmin ↔ Айгерим А. живёт постоянно; TS-88 «Оплата» и TS-71 «Возврат» — разные ticketId в этом же канале. Экран тикета показывает канал, отфильтрованный по его ticketId; фильтр-чип в шапке снимается, открывая всю историю.
openedByActor хранит, кто открыл тикет: пользователь (клиент/курьер/сотрудник) или система (авто-инцидент по доменному событию).

Авто-инциденты по доменным событиям

Система платформы открывает инцидент без участия человека, когда наступает событие. Город берётся из заказа/доставки, назначается severity, backing-чат создаётся сразу.

СобытиеПравилоSeverityОбъект
Просрочка доставкидоставка не завершена спустя > 20 мин после ETAhighdelivery
Отмена после оплатыorder.cancelled при paid=truemediumorder
Спор по оплатедвойное списание / чарджбек / расхождение суммmediumorder

Маршрутизация по городу

Тикет привязан к cityId (из заказа/доставки или профиля пользователя). Админ города видит очередь только своего города; админ страны — все города. Так очереди Бишкека и Оша не смешиваются.

Азамат Ж. — админ города
видит очередь Бишкека
Админ страны
видит все города Кыргызстана

SLA

Первый ответ15 минут
Решение4 часа

Отсчёт первого ответа стартует при назначении агента; неназначенный тикет копит просрочку. Решение — от создания до статуса Resolved.

Просрочка подсвечивается и попадает в Дашборд. Красный таймер в очереди, карточка «Горит SLA», счётчик «SLA просрочен» и красный бейдж на пункте меню. Пример — TS-87: без агента, первый ответ просрочен на 12 минут.

Статусная модель

open

Тикет активен, работа идёт. Авто-инциденты и новые обращения стартуют здесь.

pending

Ждём ответа стороны (клиента/службы) или внешнего действия. SLA решения продолжает идти.

resolved

Проблема решена, ответ дан. Остаётся окно на возврат, если клиент напишет снова.

closed

Тикет закрыт. Канал пары остаётся открытым — read-only только у фильтр-вида этого тикета. Новое сообщение пользователя = новый ticketId в том же канале.

Read-only — только у фильтр-вида закрытого тикета

Закрытие тикета не закрывает канал. Только чтение относится к срезу канала по закрытому ticketId — сама переписка пары живёт дальше. «Переоткрытие» — это новый ticketId в том же канале, история не теряется.

Фильтр закрытого тикета (TS-88 · closed) — этот срез только для чтения. Канал SuperAdmin ↔ Айгерим открыт; новое обращение откроет новый ticketId.
Эскалация тикета в инцидент. Если общий тикет оказался платформенной проблемой (например, сбой оплаты у многих), в том же канале пары создаётся INC контура platform_incident — новый ticketId с привязкой объекта (orderId/deliveryId), участников и назначением severity. Сообщения переносятся простановкой нового ticketId, канал не дублируется — см. кнопку на экране тикета TS-88.