将提交发布到 Microsoft Teams 或 Discord 频道
在表单的“投递”标签页添加一个 Webhook 端点,选择“Teams 消息”或“Discord 消息”,并粘贴你拥有的 Webhook 地址。这是一种载荷格式,不是原生的 Teams 或 Discord 集成。
本文由机器翻译。 阅读英文原文

每当表单收到一条提交,FormFlow 就可以向 Microsoft Teams 频道或 Discord 频道发布一条简短消息。它通过 Webhook 端点来实现,这与把提交转发到你拥有的任意 URL 是同一种机制,区别只在于“发送为”的选择。这不是原生的 Teams 或 Discord 集成:没有需要安装的应用,也没有频道选择器。你粘贴一个 Webhook 地址,FormFlow 就向它发送一条符合该服务要求格式的消息。针对 Slack 的同类设置见通过 Webhook 将提交发送到 Slack。Teams 和 Discord 这两种格式一同随 v1.73.12 版本发布。
事先需要准备什么
你团队中一个你可以编辑的表单。
对于 Teams:用模板 "Post to a channel when a webhook request is received" 创建的 Teams 工作流,并把 "Who can trigger" 设为 "Anyone"。请按照 Microsoft 自己的文档在 Teams 中创建;本文只涉及 FormFlow 这一侧。
对于 Discord:频道“集成”设置中的 Webhook URL。不支持论坛频道和媒体频道。
一个 https 地址。FormFlow 拒绝将纯 http 用于 Webhook 端点。
添加端点
打开表单,进入其“投递”标签页。
找到“Webhook 端点”,选择“添加端点”。
在标有“发送为”的字段中选择“Teams 消息”或“Discord 消息”。默认值是“FormFlow JSON(签名)”,所以这一处选择就是聊天端点与普通 Webhook 之间的全部区别。
URL 字段现在的标签是“传入 Webhook URL”。把 Teams 工作流的 URL 或 Discord 的 Webhook URL 粘贴进去。该字段在输入时会被遮蔽,你可以将其显示出来,核对你粘贴的内容。
保持“交付”开启。它默认开启;关闭它即可停止向该端点投递。
保存表单。
“发送为”下方的帮助文字会说明所选格式应粘贴哪种地址,并指出该地址以加密方式存储,且绝不会通过电子邮件再发送出去。端点折叠后的行显示的是格式名称而不是地址,因此 URL 不会以明文形式出现在整个页面上。
发送测试
每个端点行都有一个“发送测试”操作。它会向该行的地址发送一行文字 "FormFlow test — submissions from this form will arrive here.":在 Teams 中是一张卡片,在 Discord 中是一条消息。请求成功时,你会看到“测试已交付。”;失败时,你会看到“测试交付失败。”,并附上接收方自己的错误文本(截断为 300 个字符)。
Teams 会在其工作流运行之前就接受请求,所以“测试已交付。”只表示 Teams 收下了请求,并不表示卡片已经出现。首次测试发送后,请查看频道。
有两个条件。先保存表单:从未保存过的端点无法测试,该操作会告诉你这一点。此外,每个人每小时最多可发送 20 次测试投递,失败的也计算在内。测试只是一个按钮,而不是关卡:无论你是否点过它,端点都会投递提交。
频道里会收到什么
这条消息是门铃,而不是记录本身。两种格式都用各自服务能读懂的语法表达同样的内容:表单名称、最多五个答案、有多少字段未显示,以及指向你面板中该提交的链接。
在 Teams 中
一张卡片,第一行是 "New submission — " 加上表单名称。
最多五个答案,每行一个,每个由粗体标签和值组成。
当表单的答案超过五个时,会有类似 "and 3 more fields" 的一行。
一个 View submission 按钮,点击后在你的面板中打开该提交。
每个答案、标签和表单名称都以纯文本发送。Teams 会渲染标题或事实列表中的 markdown,所以 FormFlow 不会用它们承载提交者输入的任何内容:提交者无法向卡片中添加链接。同样不会发送任何提及,因此在答案里输入 <at> 不会通知任何人。标签、值和表单名称各自截断为 200 个字符。
在 Discord 中
粗体的第一行:"New submission — " 加上表单名称。
最多五个答案,每行一个,每个由粗体标签和值组成。
当表单的答案超过五个时,会有一行斜体的 "and 3 more fields" 之类的文字。
末尾是一个 View submission 链接,点击后在你的面板中打开该提交。
答案中的 markdown 字符会被转义,因此提交者无法制造粗体标签、标题、隐藏链接或代码块。消息会告诉 Discord 不要解析任何提及,所以包含 @everyone 的答案不会通知任何人,同时它还要求 Discord 不显示链接预览。Discord 会拒绝超过 2000 个字符的消息;FormFlow 会在达到该上限之前截短答案,因此指向该提交的链接会被保留。下面是 FormFlow 为一个有两个答案的表单发送的文本:
**New submission — Contact form**
**Name:** Ada Lovelace
**Message:** Can you send a quote
[View submission](<link to the Submission in your panel>)在这两个服务中,值内部的空白都会被折叠,所以一个值永远只占一行。
需要了解的限制
单向。FormFlow 负责发送;Teams 或 Discord 中的任何内容都不会回传到 FormFlow。
最多五个答案,每个最多 200 个字符。要查看完整的提交,请使用链接或提交收件箱。
Teams 和 Discord 会忽略签名。每种 Webhook 格式都会签名,但这两个服务都不校验,所以这些端点没有可复制的签名密钥。
FormFlow 归类为垃圾内容的提交不会被转发。只有被接受且非垃圾的提交才会到达 Webhook 端点。
重试、退避和停用对所有 Webhook 格式都是通用的。持续失败的接收方可能导致其端点被停用,所以如果消息不再到达,请检查该行。
不支持 Discord 的论坛频道和媒体频道。
该地址是一种凭据。任何持有 Teams 工作流 URL 或 Discord Webhook URL 的人都可以向该频道发帖。请像对待密码一样对待它,一旦泄露,请在 Teams 或 Discord 中重新创建一个。
这不会决定什么
它不会替你选择频道,也不会替你管理 Teams 或 Discord:你粘贴的地址决定消息落在哪里,而这是在对应服务中配置的。它不会把聊天变成你的收件箱;阅读、搜索和导出提交仍然在 FormFlow 中完成。它也不会让消息成为数据的副本。如果你需要把每个字段都作为结构化数据交付,请改为再添加一个使用默认 FormFlow JSON 格式的端点,参见将提交发送到 Webhook,并重试接收方漏掉的内容。