用途:接收并校验 Formstack Forms 的表单提交 Webhook。Formstack 通过表单构建器中的 WebHook 提交动作(“Send Data to an External URL”)在每次提交时向你的端点发送一次 HTTP POST。本技能仅覆盖 Formstack Forms,不涉及 Formstack Documents、Formstack Sign 或 Salesforce 打包产品。
主要能力:说明如何校验 X-FS-Signature 头。签名可选且默认关闭,仅当表单所有者在该 WebHook 上设置 HMAC Key 时才发送。算法为对原始请求体字节做 HMAC-SHA256,密钥为 WebHook 的 HMAC Key,输出小写十六进制;不签名时间戳、nonce、URL 或方法。头名默认 X-FS-Signature,可通过“Custom HMAC Header”覆盖,应从配置读取。生产环境应失败关闭:无密钥或无头即拒绝。
关键陷阱:默认内容类型为 application/x-www-form-urlencoded,摘要覆盖原始 urlencoded 字节,而非解析后重新编码的表单。必须先捕获原始请求体再解析,并同时覆盖 JSON 内容类型。
载荷与路由:没有固定 schema,body 是提交字段键到值的扁平映射,键为表单自身字段标签,因表单而异。键格式由 postDataFieldKeys 配置(field_names 默认、field_ids、api_friendly_field_names、internal_labels、internal_labels_api_friendly)。使用默认标签时重复标签会折叠,仅保留最后一次出现,建议用字段 ID。元数据键包括 FormID 与 UniqueID(均为字符串),建议以 FormID 路由、UniqueID 作幂等键。可通过 GET https://www.formstack.com/api/v2025/forms/{formId}/webhooks/openapi 获取该表单的 OpenAPI schema。
限制:没有事件类型,不存在 form.submitted 等事件名,唯一过滤是 Routing Logic。签名内容无时间戳与 nonce,捕获的投递可无限重放,应做幂等处理并仅用 HTTPS。Shared Secret(HandshakeKey)是静态令牌,可重放且会进入日志,优先使用 HMAC Key。Formstack 未公开重试策略、超时或投递 ID,应快速返回 2xx 并异步处理。
用法:UI 在 Form Settings → Emails & Actions → Advance Settings → Add Webhook 配置;API 使用 v2025 端点创建 WebHook,需 OAuth2 或 Personal Access Token(与 HMAC Key 不同)。本地开发可用 npx hookdeck-cli listen 3000 formstack --path /webhooks/formstack。环境变量为 FORMSTACK_HMAC_KEY 与 FORMSTACK_SIGNATURE_HEADER。