Нажатие кнопки ещё не означает, что заявка сохранена
Форма на сайте и CRM — два конца одного процесса. Посетителю нужно достоверное подтверждение, а команде — сохранённое обращение с контекстом для ответа. Уведомление помогает заметить заявку, но не должно быть её единственной копией.
Надёжная последовательность: проверить входные данные, проверить допустимость обращения, ограничить злоупотребления, сохранить запись и только после этого подтвердить получение. Уведомления можно отправлять после успешного сохранения. Если Telegram или email недоступен, команда должна увидеть проблему доставки; посетителю не нужно создавать вторую заявку.
Заранее определите поведение при повторе
Телефон может потерять соединение после записи в базу, но до получения ответа. Блокировка кнопки не решает этот случай. Ключ идемпотентности связывает повтор с тем же обращением. Уникальное ограничение в базе и сохранённый результат помогают вернуть прежнюю квитанцию. Повтор с тем же ключом, но другим содержимым не должен незаметно заменять исходный запрос.
| Сбой | Что видит посетитель | Что делает система |
|---|---|---|
| Неверное поле | Понятную подсказку для исправления | Не создаёт заявку |
| База недоступна | Честное сообщение о повторе, сохранённый черновик | Регистрирует ошибку сохранения |
| Ответ потерян после записи | Повтор возвращает прежнее подтверждение | Сохраняет одну заявку |
| Уведомление не доставлено | Подтверждение получения остаётся действительным | Повторяет доставку отдельно |
Передавайте полезный контекст
Обычно достаточно услуги, исходной страницы, языка, предпочтительного канала связи и сообщения. Собирайте только информацию, нужную для ответа. Привилегированные серверные ключи не должны попадать в браузер.
Проверка в интерфейсе помогает человеку заполнить форму, но не защищает сервер от прямого запроса. Нужны серверная валидация, ограничения размера и частоты запросов. Поле-ловушка может дополнить защиту от простых ботов, но не заменяет остальные меры.
Проверяйте путь до рабочего места сотрудника
Отправьте помеченную тестовую заявку с вымышленными данными. Найдите её в CRM, назначьте ответственного и убедитесь, что контекст не потерян. Повторите запрос после тайм-аута, сделайте быстрое двойное нажатие и проверьте заведомо неверные данные.
Отдельно проверьте, что пользователь без нужной роли не может читать обращения. Успешный ответ публичной функции не должен раскрывать чужие записи.
Проектируйте интеграции и бизнес-систему вокруг подтверждённого получения заявки. Декоративное сообщение «успешно» без сохранения не завершает процесс.
