Поддержка

Troubleshooting

Диагностика и решение распространённых проблем.

Заявка не приходит

Проверяйте последовательно:

1

Заявка появилась в дашборде?

Дашборд → Сайт → Заявки. Если заявки нет — проблема в отправке, а не в уведомлении. Проверьте шаг 2.

Если заявка есть — проблема в доставке уведомления. Проверьте шаг 4.

2

Проверьте консоль браузера

Откройте DevTools → Network. Найдите запрос POST /api/c1/sites/…/submissions. Какой статус ответа?

  • 403 → CORS или домен не верифицирован → шаг 3
  • 400 → ошибка валидации или капчи → читайте тело ответа
  • 429 → rate limit → шаг 7
  • Нет запроса вообще → SDK не подключён или data-sitekey не указан
3

Проверьте домен в настройках сайта

Убедитесь что Origin запроса совпадает с доменом в списке разрешённых. Формат: https://example.com без trailing slash.

4

Проверьте статус доставки

Откройте заявку в дашборде → раздел Доставка. Какой статус у канала?

  • failed / exhausted → ошибка в канале → читайте сообщение ошибки
  • delivered — уведомление ушло, проблема на стороне получателя

Telegram не подключён / уведомление не приходит

  • Проверьте: @FormHookBot добавлен в чат/канал и имеет права администратора
  • chat_id указан правильно. Для каналов начинается с -100
  • Нажмите Тест в настройках канала — должно прийти тестовое сообщение
  • Если тест не проходит и ошибка «bot is not a member» — бот не в чате
  • Если ошибка «chat not found» — неверный chat_id

Как найти chat_id группы

bash
# Добавьте @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.comhttps://example.com

403 SITE_SUSPENDED

Сайт заблокирован администратором FormHook (нарушение правил использования). Обратитесь в поддержку: support@form-hook.com.

429 Rate Limited

  • Стандартный лимит: 100 запросов/секунду с одного IP
  • SDK бросает SUBMIT_RATE_LIMITED — покажите пользователю сообщение и попросите подождать
  • Если лимит срабатывает в продакшене без спама — обратитесь в поддержку для увеличения лимита
  • Включите капчу и honeypot — они останавливают ботов до достижения лимита
Не нашли решение? Напишите на support@form-hook.com с описанием проблемы, siteKey и кодом ошибки из консоли.