跳转到内容
FFormhook
返回博客

博客

把表单提交发送到 Slack(无需代码)

· 1 分钟阅读

落入共享收件箱的联系表单提交,要等到有人碰巧查看时才会被读到--对于一个小团队来说,这可能意味着数小时之后,甚至要等到有人转发才会被看到。而发布到 Slack 的提交,通常会在接下来的三十秒内被读到,因为 Slack 正是团队本来就在盯着的地方。同样的线索,同样的消息,响应速度却大不相同。

邮件仍然有其用武之地--它是书面记录。但作为第一通知渠道,Slack 通常更胜一筹:这是团队本来就在使用的工具,没有人需要记得去查收件箱,而频道里的一条新消息会被频道里的所有人看到,而不只是消息落入其收件箱的那个人。

DIY 方式

Slack 不会直接接受原始的 HTML 表单 POST 请求,所以要自己把提交内容送到那里,就意味着要在中间编写一个小的接收端。通常这是一个无服务器函数(Cloudflare Worker、Vercel 函数、AWS Lambda),它需要:

  • 接收表单的 POST 请求,并校验它确实像是一次提交而不是垃圾内容。
  • 把字段名称和值重新格式化为 Slack 的消息格式--可以是简单的 text 字符串,也可以是 blocks 数组(如果想要原生的观感)。
  • 转义用户输入,以免消息中包含 &<> 时破坏 Slack 的 mrkdwn 渲染。
  • 把结果 POST 到 Slack 的传入 Webhook(Incoming Webhook)URL,并处理该 POST 失败或超时的情况--Slack 的 webhook 并非绝对可靠,因此一个简单粗糙的实现会在出现小故障时悄悄丢失提交。

这些都不算稀奇--这是一个下午的实打实工程量,而且这又多了一个需要部署、监控,并在字段名变化或 Slack 调整格式规则时最终需要维护的服务。如果你已经有相应的基础设施并且乐在其中,这样做是合理的;但如果你想要的只是"有人填表时通知团队",这就是额外负担。

零代码方式

Formhook 完全省去了接收端这一环。在你表单的设置里添加一个 webhook,粘贴你的 Slack传入 Webhook URL(从 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 检测机制的工作方式完全相同。粘贴一个 Discord webhook URL,提交内容就会以格式化的 Discord 嵌入消息形式送达;粘贴一个 Microsoft Teams webhook URL,则会以原生的 Teams 卡片形式送达。无论哪种情况,都只是在控制台里填同一个字段--Formhook 会根据 URL 的主机名和路径来决定如何格式化载荷,所以以后团队更换聊天工具,只需粘贴另一个 URL,而不用重新搭建任何东西。

不属于这三种的 URL 依然可以正常使用:粘贴任意其他 URL,Formhook 会回退为通用的 JSON POST,并附带 HMAC 签名,让你可以验证它确实来自 Formhook。

它不能做什么

有必要说清楚范围:这个功能是在提交到达时把一条格式化的消息发布到频道里。它不会创建话题串,不会添加交互按钮,也不会添加斜杠命令--它是通知,不是一个 Slack 应用。对大多数团队来说,这正是重点所在:立即收到一条干净的消息,无需再做任何配置。

开始使用

如果你已经有一个指向 Formhook 的表单,这只是两分钟就能完成的附加操作:在 Slack 里创建一个传入 Webhook,把 URL 粘贴到表单的 webhook 设置里,下一次提交就会出现在频道里。如果你是从零开始,文档介绍了如何搭建表单本身,而定价页面列出了免费层的限制(每月 250 次提交,无需信用卡),供你先试用。

一行代码上线可用的表单

欧盟托管,提交记录永久保存,所有套餐均支持推送通知。

免费开始

无需信用卡 · 阅读文档

继续阅读