博客
把表单提交发送到 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 应用。对大多数团队来说,这正是重点所在:立即收到一条干净的消息,无需再做任何配置。
一行代码上线可用的表单
欧盟托管,提交记录永久保存,所有套餐均支持推送通知。
免费开始无需信用卡 · 阅读文档