Перейти к содержимому
FFormhook
Назад к блогу

Блог

Отправка данных формы в Slack (без кода)

· 4 мин чтения

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

У email по-прежнему есть своё место - это бумажный след. Но в качестве первого канала уведомлений обычно побеждает Slack: это инструмент, в который команда и так уже смотрит, никому не нужно помнить о проверке почты, а новое сообщение в канале видят все, кто в нём состоит, а не только тот, в чей ящик оно попало.

Самостоятельный путь

Slack не принимает напрямую сырой POST-запрос HTML-формы, так что доставить туда отправку самостоятельно означает написать небольшой промежуточный приёмник. Обычно это serverless-функция (Cloudflare Worker, функция Vercel, AWS Lambda), которая:

  • Принимает POST-запрос формы и проверяет, что это действительно похоже на отправку, а не на спам.
  • Переформатирует названия и значения полей в формат сообщений Slack - либо простую строку text, либо массив blocks, если нужно, чтобы выглядело нативно.
  • Экранирует пользовательский ввод, чтобы сообщение с символами &, < или > не сломало рендеринг mrkdwn в Slack.
  • Отправляет результат POST-запросом на URL входящего вебхука Slack и обрабатывает случай, когда этот POST не удался или истёк по таймауту - вебхуки Slack не бывают безгранично надёжными, так что наивная реализация будет тихо терять отправки при любом сбое.

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

Путь без кода

Formhook полностью убирает необходимость в приёмнике. В настройках вашей формы добавьте вебхук и вставьте URL вашего входящего вебхука Slack (тот, что вы получаете из собственного приложения Slack «Incoming Webhooks» - https://hooks.slack.com/services/...). Formhook автоматически распознаёт этот хост и путь и с этого момента форматирует каждую отправку как нативное сообщение Slack - без кода, без сопоставления полей, без риска ошибиться в экранировании.

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

{
  "text": "New submission to Contact form",
  "blocks": [
    {
      "type": "header",
      "text": { "type": "plain_text", "text": "New submission: Contact form" }
    },
    {
      "type": "section",
      "fields": [
        { "type": "mrkdwn", "text": "*name*\nJane Doe" },
        { "type": "mrkdwn", "text": "*email*\njane@example.com" },
        { "type": "mrkdwn", "text": "*message*\nCan you send a quote for..." }
      ]
    }
  ]
}

Тот же трюк для Discord и Microsoft Teams

Определение по URL работает точно так же для двух других чат-инструментов, которые команды часто просят подключить. Вставьте URL вебхука Discord - и отправки будут приходить в виде оформленного Discord-эмбеда; вставьте URL вебхука Microsoft Teams - и они придут в виде нативной карточки Teams. В обоих случаях используется одно и то же поле в панели управления - Formhook смотрит на хост и путь URL, чтобы решить, как форматировать полезную нагрузку, так что смена чат-инструмента команды в будущем сводится к вставке другого URL, а не к перестройке чего-либо.

Всё, что не относится к этим трём сервисам, всё равно работает: вставьте любой другой URL, и Formhook перейдёт на обычный JSON POST-запрос с HMAC-подписью, чтобы вы могли убедиться, что он действительно пришёл от Formhook.

Чего это не делает

Стоит быть точным насчёт границ функциональности: это публикует отформатированное сообщение в канале при поступлении отправки. Это не создаёт треды, не добавляет интерактивные кнопки и не добавляет слэш-команду - это уведомление, а не приложение для Slack. Для большинства команд именно в этом и есть смысл: одно чистое сообщение, немедленно, без необходимости что-либо ещё настраивать.

Как начать

Если у вас уже есть форма, указывающая на Formhook, это двухминутное дополнение: создайте входящий вебхук в Slack, вставьте URL в настройки вебхука вашей формы, и следующая отправка появится в канале. Если вы начинаете с нуля, документация расскажет о настройке самой формы, а на странице тарифов указаны лимиты бесплатного тарифа (250 отправок в месяц, без привязки карты), если вы просто хотите попробовать.

Рабочая форма в одну строку

Размещение в ЕС, отправки хранятся вечно, push-уведомления на любом тарифе.

Начать бесплатно

Без банковской карты · читайте документацию

Читать дальше