Мастер-документ точки входа для свежей сессии: тест на боевом liderra.ru,
порядок R1-R5, карта 26 планов, безопасность, эфир, вердикт GO/NO-GO.
Планы 24 помощь, 25 имперсонизация, 26 публичный API.
Поправка: F-DIGEST снята — была ошибкой чтения устаревшего комментария,
не отставанием локалки (она байт-в-байт с боевым a119aba8). Канон-схема
db/schema.sql:796 new_lead.email:true — дайджест вкл по умолчанию. План 20
и реестр обновлены. Тесты — только на проде.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7.3 KiB
Приёмка liderra.ru — ПУНКТ №24: «Помощь» — заявка в поддержку (G7-A)
Для исполнителя: формат PR1 (одобрен 20.06). Каждый шаг =
🔧 Код-факт (file:line)·🎬 Действие·📋 ОТЧЁТ (было→ожидали→стало + 📸/📝)·❌ Если не так. Техника «под капотом»; владельцу — человеческие карточки.
Цель: показать, что клиент может из кабинета обратиться в поддержку: заполняет короткую форму (имя/контакт/сообщение, частично предзаполнены из профиля), отправляет — заявка всегда сохраняется, даже если почта поддержки временно недоступна (письмо — дополнение, не условие). Плюс — живой чат поддержки, если он подключён.
Что снимаем глазами: раздел Помощь (форма → «Заявка отправлена»), чат-виджет. Живые 📸.
Источник сценария: свод проверок №24 (G7-A); новая фича деплоя 19.06.
🔧 Код-факты (подтверждено чтением 20.06)
- Заявка создаётся всегда —
storeсохраняетsupport_requests(сtenant_id) в транзакции, возвращает 201 — SupportRequestController.php:23-53, запись — :34-42. - Письмо — best-effort — заявка уже в БД; сбой SMTP не теряет её и не валит запрос (паттерн как код-письмо онбординга) — :19, :46-48.
- Валидация — поля имя/контакт/сообщение обязательны; пусто → 422 — :25-33.
- Изоляция (RLS) —
SET LOCAL app.current_tenant_id; клиент видит/создаёт только свои заявки — :35. - Чат-виджет JivoSite — виден, если задан
JIVO_WIDGET_ID(иначе скрыт).
Шаг 24-1 — Отправить заявку в поддержку
🔧 Код: store :23-53. 🎬 Действие (лок): в разделе Помощь заполнить форму (имя/контакт предзаполнены из профиля, дописать сообщение) → отправить.
📋 ОТЧЁТ:
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Форма | пустая/предзаполнена | после отправки — «Заявка отправлена» | (слот прогона) | 📸 Помощь (форма → алерт «отправлена») |
| Заявка в базе | нет | создана (со своим tenant_id) | (слот) | 📝 support_requests (своя строка) |
| Письмо поддержке | — | поставлено в очередь (best-effort) | (слот) | 📝 очередь письма (внутр.) |
💡 Что внутри: клиент может прямо из кабинета написать в поддержку — часть полей уже заполнена за него. Заявка сразу сохраняется в системе, а письмо поддержке — это дополнение: даже если почта на минуту откажет, обращение не потеряется.
❌ Если не так: заявка не сохранилась при сбое почты → дефект (best-effort нарушен).
Шаг 24-2 — Пустую форму не отправить (валидация)
🔧 Код: :25-33. 🎬 Действие (лок): отправить форму с пустыми полями.
📋 ОТЧЁТ:
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Пустая отправка | — | не принимается (просит заполнить) | (слот) | 📸 Помощь (ошибки полей) |
❌ Если не так: пустая заявка создаётся → мусор в поддержке.
Шаг 24-3 — Изоляция и чат-виджет
🔧 Код: RLS — :35; JivoSite — по JIVO_WIDGET_ID.
🎬 Действие (лок): проверить, что клиент видит только свои заявки; чат-виджет отображается при заданном ключе.
📋 ОТЧЁТ:
| Что | Было | Ожидалось | Стало (факт) | Чем подтверждаем |
|---|---|---|---|---|
| Чужие заявки | — | не видны (только свои) | (слот) | 📝 RLS: только свой tenant |
| Чат поддержки | — | виден, если ключ задан | (слот) | 📸 виджет чата (или его отсутствие без ключа) |
❌ Если не так: видны чужие заявки → утечка (связка с №16).
Verification №24 (выход из пункта)
- 📸 Заявка отправляется, показывается «Заявка отправлена».
- 📝 Запись
support_requestsсоздаётся всегда (даже при сбое почты). - 📸 Пустая форма не принимается (валидация).
- 📝 Изоляция: только свои заявки; 📸 чат-виджет при заданном ключе.
📸 vs 📝 в этом пункте
- 📸 Скриншот: Помощь (форма, алерт «отправлена», ошибки валидации), чат-виджет.
- 📝 Текст: запись в
support_requests, очередь письма, RLS — текстом.
Грабли
- Письмо best-effort — для проверки «заявка не теряется» сымитировать сбой почты (на dev MAIL в лог) и убедиться, что запись всё равно создана.
- Чат-виджет — только при заданном
JIVO_WIDGET_ID; без ключа его отсутствие — норма. - Уже показано в эфире (карточка 7) — здесь углубление best-effort/валидации/изоляции.