Блог
Отправка данных формы в 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-уведомления на любом тарифе.
Начать бесплатноБез банковской карты · читайте документацию
Читать дальше
- Push-уведомления для форм: почему email-оповещений недостаточноEmail-оповещения об отправках форм теряются в потоке писем. Веб-push доходит до телефона и компьютера мгновенно - как это работает и как настроить.
- AJAX-отправка формы: отправить форму без перезагрузки страницыОбычная отправка HTML-формы перезагружает страницу. Рассказываем, как отправлять её через fetch() вместо этого - встроенные состояния успеха/ошибки, прогрессивное улучшение и доступные обновления статуса.
- Что такое бэкенд форм? (И когда он вам нужен)Бэкенд форм принимает, хранит и пересылает отправки форм вашего сайта, чтобы вам не пришлось запускать сервер. Вот как это работает и когда он вам нужен.