Перейти к содержимому
FormFlow

Отправляйте Отправки на вебхук и повторяйте то, что пропустил приёмник

Добавьте в Форму конечную точку вебхука, проверьте подпись на приёмнике и воспользуйтесь «Повторить неудачные доставки» после сбоя. Что FormFlow повторяет сам и чего не отправит заново.

Эта статья переведена машинным способом. Читать оригинал на английском

Screenshot of the Delivery tab of a seeded FormFlow form with one webhook endpoint added: Send as FormFlow JSON (signed), an endpoint URL and the Delivering switch on, with icons to send a test, retry and delete. It is where this tutorial adds its webhook.

Вебхук отправляет каждую принятую Отправку на принадлежащий вам URL в течение нескольких секунд, так что лид может попасть в вашу CRM или в ваш собственный код, не дожидаясь сводки по email. Вебхуки есть в FormFlow начиная с v1.0.0. В этом руководстве добавляется конечная точка, показано, что получает ваш приёмник и как это проверить, а затем разобрано самое важное в день, когда приёмник недоступен: что FormFlow повторяет сам и как отправить остальное заново с помощью «Повторить неудачные доставки».

Что вам понадобится

Приёмник под вашим контролем, который принимает POST с телом JSON. Его адрес должен быть https и разрешаться только в публичные адреса. Панель отклоняет всё остальное при сохранении, поэтому адрес localhost не подойдёт, и для проверки обычно используют туннель.

Добавьте конечную точку

  1. Откройте Форму в панели и перейдите на вкладку «Доставка».

  2. В разделе «Конечные точки вебхуков» нажмите «Добавить конечную точку».

  3. Оставьте в «Отправлять как» вариант «FormFlow JSON (с подписью)». Другой вариант, «Сообщение в Slack», принимает URL входящего вебхука Slack.

  4. Вставьте адрес вашего приёмника в «URL конечной точки» и оставьте «Доставка» включённой.

  5. Сохраните Форму. Уведомление «Скопируйте секреты подписи вебхуков сейчас» показывает URL и секрет каждой новой конечной точки. Оно остаётся на экране, пока вы его не закроете, и сообщает, что секреты больше не показываются. Сохраните секрет в своём менеджере секретов. Чтобы получить новый, удалите конечную точку и добавьте её снова.

  6. Нажмите «Отправить тест» в строке конечной точки. Вы получите «Тестовое сообщение доставлено» или «Не удалось доставить тестовое сообщение» с собственным текстом ошибки вашего приёмника. Сначала строка должна быть сохранена, а кнопка ограничена 20 тестовыми доставками в час.

Затем отправьте настоящую Отправку и откройте её в панели. В её таблице «Запросы на доставку» перечислен каждый получатель, которому причитается эта Отправка, со статусом «В ожидании», «Арендовано», «Доставлено» или «Завершено с ошибкой», числом попыток, ID доставки и последней ошибкой.

Что получает ваш приёмник

Один POST на каждую Отправку, не являющуюся спамом. Тело — небольшой документ JSON, и вместе с ним приходят три заголовка. Вот его структура с условными значениями:

{
  "id": "SUBMISSION_UUID",
  "form": { "id": "FORM_UUID", "name": "Contact Us" },
  "submitted_at": "2026-10-08T09:00:00+00:00",
  "data": { "name": "Ada Lovelace", "email": "ada@example.com" }
}
  • X-FormFlow-Timestamp — время попытки в секундах.

  • X-FormFlow-Signature-256 — это sha256= и затем HMAC-SHA256 от метки времени, точки и исходного тела, с ключом в виде секрета конечной точки.

  • X-FormFlow-Delivery-Id идентифицирует доставку. При каждом повторе он остаётся тем же.

Проверяйте подпись, прежде чем доверять запросу, — по исходному телу, а не по перекодированной копии. Версия на PHP в том виде, в каком её даёт документация API FormFlow:

function formflow_verify(string $rawBody, string $timestamp, string $signature, string $secret): bool
{
    if (abs(time() - (int) $timestamp) > 300) {
        return false;
    }

    $expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);

    return hash_equals($expected, $signature);
}

Что FormFlow повторяет сам

FormFlow ждёт ответа до 10 секунд. Любой ответ 2xx считается доставленным. Тайм-аут, обрыв соединения, ответ 408, 429 или 5xx повторяются — всего до шести попыток, с паузами в 10 секунд, 1 минуту, 5 минут, 30 минут и 2 часа между ними. Любой другой ответ, включая 3xx или 4xx, считается окончательным отказом и автоматически не повторяется. FormFlow не следует за перенаправлениями, поэтому конечная точка, отвечающая перенаправлением, считается неудачной. Укажите для конечной точки её окончательный адрес.

Если конечная точка продолжает просить повтор и попытки заканчиваются, FormFlow выключает для неё «Доставку» и сообщает владельцам Команды по email. Доставка, у которой попытки закончились, отображается как «Завершено с ошибкой». Панель управления также продолжает показывать вебхук с выключенной пересылкой вместе с серией его сбоев, пока какая-нибудь доставка не пройдёт успешно.

Повторите то, что пропустил приёмник

До v1.33 для каждой пропущенной Отправки требовалось своё «Повторить сейчас». Теперь одно нажатие охватывает конечную точку. Релиз описан в Списке изменений. Порядок важен:

  1. Сначала исправьте приёмник. Каждая неудачная доставка получает ещё одну попытку, поэтому повтор на всё ещё неисправный приёмник просто снова провалится.

  2. На вкладке «Доставка» проверьте переключатель «Доставка» у конечной точки. Если FormFlow его выключил, включите и сохраните Форму. Повтор для выключенной конечной точки отклоняется с сообщением «Включите «Доставка» и сохраните форму, затем повторите.»

  3. Нажмите «Повторить неудачные доставки» в строке конечной точки и подтвердите. В диалоге сказано, что каждая неудачная доставка, которую ещё можно отправить, снова ставится в очередь с исходным ID доставки и исходными данными.

  4. Уведомление сообщает, сколько доставок поставлено в очередь. Одно нажатие ставит в очередь не более 500. Если остались ещё, там сказано нажать снова.

  5. Откройте Отправку и проверьте её таблицу «Запросы на доставку». Число попыток выросло, а статус должен дойти до «Доставлено».

Если вы меняете URL, секрет или формат конечной точки, она начинает с чистого листа. Доставки, сделанные до изменения, не отправляются повторно, а начиная с v1.35.1 панель управления больше не засчитывает старые сбои против нового адреса. Если выключить и включить конечную точку, ничего не меняя, её история сбоев сохраняется.

Ограничения, о которых стоит знать

  • Новая конечная точка получает только те Отправки, которые поступили после её настройки. Те, что у вас уже есть, ей не отправляются.

  • Спам не пересылается.

  • «Повторить неудачные доставки» отправляет заново только те доставки, которые ещё можно отправить, и только на конечную точку в её нынешнем виде.

  • Доставка происходит как минимум один раз. Ваш приёмник должен терпимо относиться к повторам.