Сообщество / DevOps

Нажала дважды — это две заявки или одна нервная рука?

N
nina_test
Junior
Сообщения: 2
Репутация: 0
Дата регистрации:
31.10.2026
АВТОР ТЕМЫ31 окт. 2026 г., 09:00 (GMT+3)
Гоняю учебную форму заявки: имя, телефон, кнопка «Отправить». Нажала два раза подряд, как сделал бы человек с медленным интернетом. В таблице появились две одинаковые строки с разницей меньше секунды. С этим всё понятно: дубль.

А если человек через минуту отправит то же самое снова, потому что не увидел подтверждения? Или потому что правда хочет вторую заявку? Как вы отличаете новое намерение: по токену при открытии формы, по окну времени или по совпадению полей?
0
ruslan_krd
Junior
Сообщения: 71
Репутация: 65
Дата регистрации:
16.08.2026
31 окт. 2026 г., 15:07 (GMT+3)
Двойной клик за секунду — это действительно техника, тут токен при открытии формы закрывает вопрос, и спорить не о чем.

А вот повтор через минуту я бы не отдавал коду на окончательное решение. Картина знакомая: человек отправил заявку, не увидел «спасибо», отправил ещё раз. Менеджер видит две строки и звонит дважды. Во второй раз ему отвечают: «Я же только что вам всё сказал». Неловко, но никто ничего не потерял.

Обратная ошибка хуже. Если система сама решила, что это дубль, и молча выкинула строку, а человек на самом деле хотел вторую заявку, например для коллеги со своего телефона, об этом никто не узнает. Клиент просто не дождётся звонка.

Поэтому я бы разделил так. Токен отсекает то, что точно дубль. Совпадение телефона в каком-нибудь окне, хоть час, хоть сутки, ничего не удаляет, а ставит пометку «возможный повтор» рядом с первой заявкой. Объединяет их уже человек, у которого обе перед глазами. Окно подберёте под то, как быстро у вас реально перезванивают.

И отдельно: если люди жмут второй раз, потому что не видят подтверждения, начинать стоит с экрана после отправки. Это дешевле любой дедупликации)
0
S
sasha_par
Junior
Сообщения: 14
Репутация: 11
Дата регистрации:
24.09.2026
31 окт. 2026 г., 16:00 (GMT+3)

ruslan_krd писал:
если люди жмут второй раз, потому что не видят подтверждения, начинать стоит с экрана после отправки



вот это да. я лендинги собираю, и самый частый дубль у меня делаю я сам)) жму «отправить», ничего не происходит, жму ещё раз, а потом в таблице две строки «тест тест 123». если даже автор формы не верит своей кнопке, посетитель тем более не поверит.

что я теперь ставлю почти по умолчанию, без всякой магии:
— сразу после клика кнопка неактивна и пишет «отправляем…», чтобы было видно, что нажатие засчитано;
— после ответа сервера форма пропадает целиком, а на её месте крупное «спасибо, перезвоним» с тем номером, который человек ввёл. так он видит, что номер записался правильно, и опечатку заметит сам;
— если сервер не ответил, честно пишу «не отправилось, попробуйте ещё раз», а не оставляю тишину.

с токеном это друг другу не мешает: токен ловит то, что всё-таки проскочило. но после такого экрана повторов через минуту обычно становится заметно меньше, а пометка «возможный повтор» уже ловит редкие случаи.

у меня пара франкоязычных клиентов, там ещё отдельно слежу, чтобы «merci» не осталось английским «thank you» после копипасты. а то подтверждение есть, но человек сомневается, туда ли попал)
0
V
vlad_dv
Junior
Сообщения: 12
Репутация: 10
Дата регистрации:
26.09.2026
31 окт. 2026 г., 16:02 (GMT+3)

sasha_par писал:
если сервер не ответил, честно пишу «не отправилось, попробуйте ещё раз»



Вот тут я бы поправил формулировку. «Сервер не ответил» и «не отправилось» — не одно и то же, а отсюда у меня этих дублей больше всего.

У вас сейчас вечер, у меня одиннадцать, почти ночь, и я как раз из тех посетителей, на которых такие формы ломаются. До европейских серверов отсюда обычно двести с чем-то миллисекунд, по мобильному в автобусе бывает заметно хуже, с провалами. Типичная картина: жму «отправить», кнопка честно пишет «отправляем…», запрос уходит, сервер его принимает и пишет строку в таблицу. А ответ обратно теряется где-то между тоннелем и сменой вышки. Фронт ждёт, срабатывает таймаут, и мне показывают «не отправилось, попробуйте ещё раз». Я пробую. В таблице две строки, и вторую я сделал не нервной рукой, а потому что форма сама меня попросила.

Поэтому я бы разделил два сообщения:
— сервер ответил ошибкой — тогда да, «не отправилось»;
— ответа не дождались — «не удалось подтвердить отправку», и повторная кнопка отправляет тот же токен, который выдали при открытии формы, а не новый.

Тогда повтор после таймаута безопасен. Если первая попытка дошла, сервер видит знакомый токен и просто возвращает «уже есть, спасибо». Если не дошла, записывает как новую. Человек ничего про это не знает, ему показывают одно и то же «спасибо, перезвоним».

Главное — не генерировать новый токен на каждый клик «попробовать ещё раз». Я видел, как токен перевыпускали при каждом сабмите, «чтобы был свежий», и вся защита от двойного клика переставала работать ровно там, где она нужна, на плохой связи. Токен живёт, пока живёт эта форма на экране, и меняется после успешной отправки, когда форма уже исчезла.

И пометка «возможный повтор» от ruslan_krd тут хорошо дополняет: токен ловит технические повторы, а через минуту с новой вкладки — уже человеческий случай, его пусть смотрит менеджер.

Проверить у себя легко, не надо ехать во Владивосток) В devtools браузера включить медленную сеть, нажать отправить и на середине запроса отключить сеть совсем. Если после этого в таблице появилась строка, а на экране «не отправилось» — ровно мой случай из автобуса.
0