- config.py: n8n_project_form_podrobnee_webhook (из .env) - CHANGELOG_MINIAPP.md: описание переменной, эндпоинт пока не добавлен
8.7 KiB
8.7 KiB
Доработки мини-приложения Clientright (TG/MAX и веб)
Консультации, CRM, кнопка «Назад» (2026-02-25)
Консультации
- Страница «Консультации»: список тикетов из тех же данных, что и «Мои обращения» (общий контекст
DraftsContext), без отдельного эндпоинта списка. - По клику на тикет — запрос
POST /api/v1/consultations/ticket-detail(session +ticket_id), вызов вебхука «подробнее» (n8n_ticket_form_podrobnee_webhook), ответ показывается карточкой с полями: заголовок, статус, категория, описание, решение, приоритет (русские подписи). - Убраны подпись «Тикеты из CRM» и кнопка «Назад к списку» — возврат только через кнопку «Назад» в баре.
- Кнопка «Назад» в баре на консультациях: подписка на
miniapp:goBackвConsultations.tsx— в детали тикета возврат к списку, со списка переход на «Мои обращения» (onNavigate('/')).
Поддержка
- Кнопка «Назад» в баре в чате поддержки: на маршруте
/supportкнопка «Назад» больше не отключается (BottomBar.tsx— убранisSupportиз условия отключения). - В
Support.tsxдобавлена подписка наminiapp:goBack: в режиме чата — возврат к списку обращений, в списке — переход на «Мои обращения» (onNavigate('/')).
CRM и дашборд
- n8n: Code-нода нормализации ответа CRM — из
projects_jsonиtickets_jsonформируется массив элементов с полями для фронта (type_code,payload,status_code). Файлdocs/n8n_CODE_CRM_NORMALIZE.js, на выходе объект с полемcrm_items. - n8n: разворот ответа в плоский список —
docs/n8n_CODE_FLATTEN_DATA.jsразворачивает элементы вида{ crm_items: [...] }в плоский массив вdata. - Дашборд по категориям: при клике по плиткам («В работе», «Решены» и т.д.) список фильтруется в том числе для элементов из CRM: добавлены
isFromCrm(),getItemCategory()поstatus_code/payload, расширенSTATUS_CONFIGдляactive/completed/rejected. - Карточка обращения: у контейнера и Card заданы
width: '100%'иboxSizing: 'border-box'вStepDraftSelection.tsx.
Бэкенд
- В
config.py— переменнаяn8n_ticket_form_podrobnee_webhookдля вебхука «подробнее» по тикету. - В
config.py— переменнаяn8n_project_form_podrobnee_webhook(N8N_PROJECT_FORM_PODROBNEE_WEBHOOKв .env) для вебхука «подробнее» по делу/проекту из CRM (по project_id). Эндпоинт, вызывающий этот хук, пока не добавлен — зарезервировано под будущий case-detail. - Модуль
backend/app/api/consultations.py: эндпоинтPOST /api/v1/consultations/ticket-detail(session +ticket_id), вызов вебхука, ответ как есть.
Системные баннеры на экране приветствия (2026-02)
- Баннер «Профиль не заполнен» вынесен в отдельную зону справа от текста «Теперь ты в системе — можно продолжать» (на десктопе — колонка ~260px), чтобы не занимал полстраницы и не сдвигал контент.
- Реализовано единое место для системных баннеров: массив
systemBanners, при одном баннере показывается один Alert, при нескольких — карусель (Ant Design Carousel). В будущем сюда можно добавлять другие критические уведомления. - Мобильная вёрстка: баннер на всю ширину, нормальный перенос текста (без разбиения по слогам), кнопка «Заполнить профиль» переносится под текст, крестик закрытия остаётся в первой строке справа (через
orderиflex-wrap). - Профиль: убрана дублирующая ссылка «Домой» из шапки карточки профиля — навигация остаётся через нижний бар.
UI и навигация
- «Мои обращения»: дашборд с плитками по статусам (На рассмотрении, В работе, Решённые, Отклонённые, Все), заголовок переименован с «Жалобы потребителей».
- Убрана внешняя рамка у дашборда; карточки с hover-эффектом (подъём, тень), единая высота плиток, прозрачный фон у иконок.
- Список обращений по категориям в виде карточек с hover; фильтр по выбранной категории.
- Кнопка «Назад» перенесена в нижний бар; убраны дублирующие кнопки «Назад» из контента (описание, документы).
Telegram и MAX
- Выход: корректное закрытие приложения — в TG вызывается
Telegram.WebApp.close(), в MAX —window.WebApp.close()/postEvent('web_app_close'). Определение платформы по initData/URL. - Подключение скриптов по платформе: при наличии
tgWebAppData/tgWebAppVersionв URL грузится толькоtelegram-web-app.js, иначе — толькоmax-web-app.js(устранены ошибки UnsupportedEvent в MAX). - В TG/MAX не показывается экран ввода телефона — шаг «Вход» только для обычного веба; раннее определение платформы (опрос
WebApp.initData), флагplatformCheckedчтобы не мелькал телефон до определения.
Сессия и авторизация
- Сессию не сбрасывать при сетевых/временных ошибках
session/verify— удалятьsession_tokenтолько при явном ответеvalid: false. - При нажатии «Назад» с авторизованного пользователя не вести на шаг «Вход» — переход на дашборд «Мои обращения» или на
/hello. - Переход на «Подать обращение» через роут
/newиpushStateдля стабильного флоу без возврата на телефон.
Исправления
- TDZ-ошибка (пустой экран после перехода с /hello):
useEffectдляminiapp:goBackперенесён после объявленияprevStep(useCallback). - Тостер «Добро пожаловать!» показывается только в вебе (не в TG/MAX), проверка по
Telegram.WebApp.initDataиWebApp.initData.
Отладка и логи
- Клиентский логгер
miniappLogger: сбор событий, ошибок, отправка наPOST /api/v1/utils/client-log; идентификация бандла (build/moduleUrl); очистка логов при смене сборки. - Бэкенд: приём логов в
main.py, запись вlogs/cursor-debug-*.log(NDJSON), без PII.
Файлы
- Новые:
StepComplaintsDashboard.tsx/.css,StepDraftSelection.css,miniappLogger.ts. - Правки:
ClaimForm.tsx,HelloAuth.tsx,BottomBar.tsx,StepDescription.tsx,StepWizardPlan.tsx,StepDraftSelection.tsx,App.tsx,main.tsx,index.html,main.py,api/claims.py,ClaimForm.css,BottomBar.css,Dockerfile.prod.