跳转到正文

文件夹 Webhook

可以将外部发送的文件自动接收到指定文件夹。每个文件夹都会生成专属的接收地址,外部向该地址发送数据后,数据会自动保存到文件夹中。


开始之前

  • 管理员设置:需要在设置 Webhook 策略中同时开启 启用入站 Webhook 和 允许用户签发 API 密钥。

在文件夹中创建 Webhook

  1. 选择要接收 Webhook 的文件夹名称旁的设置(⚙️)图标。 文件夹设置
  2. 在 Webhook 接收 选项卡中选择 添加 按钮。
  3. 选择认证方式和冲突策略。这两个值将在下文详细说明。 创建 Webhook
  4. 选择 创建 按钮后,会生成该文件夹专属的接收地址(Endpoint URL)。如果选择了 Secure,还会一并生成 签名密钥(signing secret)。这些值只在此时显示,之后无法再次查看,请复制并保存到安全的地方。使用 Simple 认证创建的 Webhook
  5. 按照界面上显示的接收地址和示例指南,在外部系统中设置 Webhook。各认证方式的请求示例请参见下文"选择认证方式"。
  6. 已设置 Webhook 的文件夹会显示 图标。

选择认证方式

创建 Webhook 时,选择 Simple 或 Secure。

认证方式行为
Simple接收地址(URL)本身就是认证信息。无需额外签名,只需向发放的地址发送 POST 请求即可保存文件。
Secure每次请求都必须计算 HMAC 签名,并通过 X-Webhook-Timestamp、X-Webhook-Nonce、X-Webhook-Signature 标头一同发送。即使接收地址泄露到外部,没有签名的请求也会被拒绝。

使用 Simple 创建的 Webhook 仅凭 URL 即可发送请求。

# Upload a file via multipart
curl -i -X POST "https://<接收地址>?filename=photo.jpg" \
  -F "file=@./photo.jpg"

使用 Secure 创建的 Webhook 必须将请求正文(对整个 multipart 正文,包括边界和各部分标头,计算得到的 SHA-256 哈希值)包含在签名中。 Secure Webhook 设置界面

# Upload a file via multipart (with HMAC signature)
TS=$(date +%s)
NONCE=$(cat /proc/sys/kernel/random/uuid)
BOUNDARY="------------------------$(cat /proc/sys/kernel/random/uuid)"
TMP=$(mktemp /tmp/multipart.XXXXXX)

# Build the raw multipart body first, then hash that body.
printf -- --%s$'\r\n' "$BOUNDARY" > "$TMP"
printf 'Content-Disposition: form-data; name="file"; filename="photo.jpg"' >> "$TMP"
printf $'\r\n' >> "$TMP"
printf 'Content-Type: application/octet-stream' >> "$TMP"
printf $'\r\n\r\n' >> "$TMP"
cat ./photo.jpg >> "$TMP"
printf $'\r\n' >> "$TMP"
printf -- --%s--$'\r\n' "$BOUNDARY" >> "$TMP"

BODY_SHA=$(sha256sum "$TMP" | awk '{print $1}')
SIG=$(printf 'POST\n<接收路径>\n%s\n%s\n%s' "$TS" "$NONCE" "$BODY_SHA" \
  | openssl dgst -sha256 -hmac "$SECRET" -binary | xxd -p -c 256)

curl -i -X POST "https://<接收地址>?filename=photo.jpg" \
  -H "Content-Type: multipart/form-data; boundary=$BOUNDARY" \
  -H "X-Webhook-Timestamp: $TS" \
  -H "X-Webhook-Nonce: $NONCE" \
  -H "X-Webhook-Signature: sha256=$SIG" \
  --data-binary @"$TMP"

rm -f "$TMP"

选择冲突策略

确定再次收到同名文件时的处理方式。在创建 Webhook 时选择;创建后也可以在同一界面中重新调整并选择 应用 来更改。

策略行为
拒绝如果已有同名文件,则不保存新收到的文件。
覆盖用新收到的文件替换现有文件。
重命名保留现有文件,将新收到的文件以其他名称保存。

指定文件名

上传文件的名称可通过以下两种方法之一指定。

  • 查询参数:?filename=report.json
  • HTTP 标头:X-Webhook-Filename: report.json

指定文件名的方法

保存到子文件夹

通过 Webhook 接收的文件会保存在创建 Webhook 的文件夹的正下方。如果要在文件名中附加子路径,将文件保存到该文件夹下的子文件夹中,请开启 Webhook 的 保存到子文件夹。

  1. 在 Webhook 列表中展开要设置的 Webhook。
  2. 在 保存到子文件夹 中选择 允许。
  3. 选择 应用。

文件名中指定以 Webhook 文件夹为基准的相对路径。不存在的文件夹会自动创建。

  • 查询参数:?filename=releases/1.0/a.zip
  • HTTP 标头:X-Webhook-Filename: releases/1.0/a.zip
规则说明
深度与长度子文件夹最多 8 层,单个名称最长 255 字节。
不可使用的路径包含 .. 的名称、以 / 开头或结尾的路径、反斜杠(\)以及以 . 开头的文件夹名称会被拒绝。
路径指定位置子路径只能通过查询参数或标头指定。multipart/form-data 文件项名称中写入的文件夹不会被使用。

查看接收到的数据

外部发送的数据会以文件形式累积在文件夹中。打开文件夹即可查看接收记录。

暂停和删除 Webhook

  • 可以在文件夹中暂停或删除 Webhook。将鼠标悬停在列表中的 Webhook 上,会出现 暂停、删除 按钮。 Webhook 列表中的暂停·删除按钮
  • 在 账户设置 的 我的 Webhook 选项卡中,可以一目了然地查看自己在哪些文件夹中设置了 Webhook。在此列表中也可以暂停或删除 Webhook。

指南

可以这样使用

  • 网站/页面监控:可以将 Zapier、n8n、Make 等工具定期截取的网站截图自动累积到文件夹中,以跟踪变更历史。
  • 保存业务自动化产出物:将 RPA、自动化工具生成的报告、发票、PDF 等无需人工干预直接保存到文件夹中。
  • 收集表单提交的附件:可以将 Google 表单、Typeform 等提交的附件自动汇集到一个文件夹中。
  • 保存构建/部署产物:可以自动接收 CI/CD 流水线生成的构建产物或测试报告。

相关文档