Troubleshooting
Диагностика и решение распространённых проблем.
Заявка не приходит
Проверяйте последовательно:
Заявка появилась в дашборде?
Дашборд → Сайт → Заявки. Если заявки нет — проблема в отправке, а не в уведомлении. Проверьте шаг 2.
Если заявка есть — проблема в доставке уведомления. Проверьте шаг 4.
Проверьте консоль браузера
Откройте DevTools → Network. Найдите запрос POST /api/c1/sites/…/submissions. Какой статус ответа?
- →
403→ CORS или домен не верифицирован → шаг 3 - →
400→ ошибка валидации или капчи → читайте тело ответа - →
429→ rate limit → шаг 7 - →Нет запроса вообще → SDK не подключён или
data-sitekeyне указан
Проверьте домен в настройках сайта
Убедитесь что Origin запроса совпадает с доменом в списке разрешённых. Формат: https://example.com без trailing slash.
Проверьте статус доставки
Откройте заявку в дашборде → раздел Доставка. Какой статус у канала?
- →
failed/exhausted→ ошибка в канале → читайте сообщение ошибки - →
delivered— уведомление ушло, проблема на стороне получателя
Telegram не подключён / уведомление не приходит
- →Проверьте:
@FormHookBotдобавлен в чат/канал и имеет права администратора - →
chat_idуказан правильно. Для каналов начинается с-100 - →Нажмите Тест в настройках канала — должно прийти тестовое сообщение
- →Если тест не проходит и ошибка «bot is not a member» — бот не в чате
- →Если ошибка «chat not found» — неверный
chat_id
Как найти chat_id группы
# Добавьте @JsonDumpBot в группу, он вернёт JSON с chat.id
# Или используйте getUpdates через API вашего бота:
curl https://api.telegram.org/bot<TOKEN>/getUpdates Webhook возвращает ошибку
- →Убедитесь что URL доступен из интернета (не localhost без тоннеля)
- →Endpoint должен вернуть HTTP 2xx в течение 10 секунд — иначе считается ошибкой
- →Проверьте заголовки CORS — FormHook шлёт с
Content-Type: application/json - →Для отладки используйте webhook.site — временный URL для перехвата запросов
- →Проверьте HMAC-подпись — см. Webhook HMAC
Domain verification failed
- →TXT-запись должна распространиться — подождите до 24 часов
- →Проверьте запись:
dig TXT _formhook-verification.example.com - →Скопируйте значение из дашборда точно, без пробелов и кавычек
- →Имя записи:
_formhook-verification(не@, не корень) - →Если регистратор добавляет домен автоматически: имя должно быть
_formhook-verificationбез.example.com
Captcha failed / CAPTCHA_ANSWER_INVALID
- →Challenge истекает через 5 минут — пересоздайте если пользователь долго заполнял форму
- →При прямом HTTP: сначала получите challenge, потом отправляйте заявку
- →Один challenge — одна заявка. После использования challenge недействителен
- →Если капча включена в настройках — поле
captcha_challenge_idобязательно - →После ошибки
CAPTCHA_ANSWER_INVALIDвызовитеformhook.reset(widgetId)— challenge одноразовый
CORS issue (403 CORS_FORBIDDEN)
- →Добавьте
Originвашего сайта в список разрешённых: Сайт → Настройки → Разрешённые домены - →Формат:
https://example.com— с протоколом, без trailing slash - →Для localhost:
http://localhost:3000(точный порт) - →Поддомены добавляются отдельно:
https://www.example.com≠https://example.com
403 SITE_SUSPENDED
Сайт заблокирован администратором FormHook (нарушение правил использования). Обратитесь в поддержку: support@form-hook.com.
429 Rate Limited
- →Стандартный лимит: 100 запросов/секунду с одного IP
- →SDK бросает
SUBMIT_RATE_LIMITED— покажите пользователю сообщение и попросите подождать - →Если лимит срабатывает в продакшене без спама — обратитесь в поддержку для увеличения лимита
- →Включите капчу и honeypot — они останавливают ботов до достижения лимита
siteKey и кодом ошибки из консоли.