先看一下
您需要准备
- 一个接受 JSON 格式 POST 请求的地址,以
https://开头。大多数自动化工具都会提供(见示例)。 - 您的 UAT Studio 工作区的管理员权限。
连接您的 webhook
获取流程的地址
先在您使用的工具中创建接收端,并复制其地址。想在搭建之前先看看消息?打开 webhook.site:它会提供一个临时地址,并显示发送到该地址的所有内容。请仅用于测试数据。
在 UAT Studio 中添加 webhook
打开您的工作区,点击 Connections,在 Add a connection 下选择 Webhook,然后点击 Add。再填写:
- Webhook address:第 1 步中的地址。
- Send automatically:
- Only when I click Send on an issue(默认):由管理员决定发送哪些问题。
- Every new issue and every status change, by itself:所有内容都会立即发送。
点击 Save settings。Send automatically 下的选项在更改后会立即保存。

添加密钥(可选,推荐)
为了让您的流程确认消息确实来自 UAT Studio,请设定一个较长的随机密钥(至少 8 个字符,最好 32 个或更多),粘贴到 Secret (optional) 下,然后点击 Store token。此后每条消息都会带有以下标头:
Authorization: Bearer <您的密钥>
让您的流程拒绝没有正确标头的消息。密钥会加密存储,无法读取;粘贴新密钥即可替换。
测试连接
点击 Test connection。UAT Studio 会发送:
{ "event": "test", "message": "Test message from UAT Studio" }
200 到 299 之间的任何响应都视为成功;您会看到 The webhook answered 200。请确保您的流程能接受或跳过测试事件,且不报错。
何时发送
| 事件 | 时机 |
|---|---|
issue.sent | 管理员在问题上点击 Send to Webhook。只要连接为 On 就始终可用。 |
issue.created | 测试人员报告新问题。仅当 Send automatically 设为每个新问题时。 |
issue.status_changed | 问题状态发生变化,例如变为 Ready for retest 或 Closed。仅在开启 Send automatically 时。包含 from 和 to。 |
test | 您点击 Test connection。 |
作为重复项合并到另一问题中的问题,不会发送新的 issue.created。
发送内容
一个带有 Content-Type: application/json 的 POST 请求。所有问题事件的结构都相同:
{
"event": "issue.status_changed",
"project": { "id": "6b1f…", "name": "CRM UAT" },
"issue": {
"id": "a41c…",
"key": "ISS-012",
"title": "Save button greyed out",
"description": "After changing the phone number, Save stays grey.",
"severity": "High",
"priority": "High",
"status": "Ready for retest",
"assignee": "Dev team",
"ticket": "PORTAL-41",
"ticket_url": "https://acme.atlassian.net/browse/PORTAL-41"
},
"test_case": { "num": 4, "title": "Edit a contact", "step": 3 },
"reported_by": "Tess Tester",
"from": "In progress",
"to": "Ready for retest",
"url": "https://app.uat.studio/p/6b1f…/issues"
}
| 字段 | 含义 |
|---|---|
event | issue.sent、issue.created、issue.status_changed 或 test。 |
project | UAT 项目:id 和名称。 |
issue.key | UAT Studio 中的编号,例如 ISS-012。使用 issue.id 在后续消息中识别同一个问题。 |
issue.severity | Critical、High、Medium 或 Low。issue.priority:High、Medium 或 Low。 |
issue.status | UAT Studio 中的状态:New、In progress、Ready for retest、Closed 或 Rejected。 |
issue.ticket | 关联的 Jira 或 Azure DevOps 工单(如有);否则为 null。 |
test_case | 发现问题时所在的测试和步骤编号;测试之外的问题为 null。使用 issue.sent 时,还包括该步骤的 action 和 expected 结果。 |
reported_by | 发现该问题的测试人员姓名。 |
from、to | 仅用于 issue.status_changed:旧状态和新状态。 |
url | UAT Studio 中该项目的问题列表。打开需要登录。 |
字段可能为 null,我们以后也可能增加字段,因此请让您的流程忽略无法识别的内容。截图和文件从不发送;它们保留在 UAT Studio 中。
搭建接收端
Power Automate
- 创建一个 Instant cloud flow,触发器为 When an HTTP request is received,适用于 Anyone。
- 在 Request Body JSON Schema 下点击 Use sample payload to generate schema,并粘贴上面的示例。
- 针对
event添加一个 Condition(例如:is not equal totest),然后添加所需的操作:Planner 任务、Excel 中的一行、一封邮件、SharePoint 中的一个项目。 - 保存流程。触发器现在会显示 HTTP URL:这就是 webhook 地址。
注意:HTTP 触发器在 Power Automate 中属于高级连接器。如果只是在 Teams 频道中发布内容,则不需要它:请使用 Microsoft Teams 连接。
Zapier
创建一个触发器为 Webhooks by Zapier › Catch Hook 的 Zap,复制地址,在 UAT Studio 中点击 Test connection,然后发送一个问题,让 Zapier 识别字段。再添加所需的操作,例如在 Slack 中发送消息。
Make
以 Webhooks › Custom webhook 开始一个场景,复制地址,并在从 UAT Studio 发送问题之前点击 Redetermine data structure。
您自己的服务
接受 JSON 格式的 POST 请求,用您的密钥校验 Authorization 标头,迅速返回 200,耗时的处理放到之后进行。发送失败后消息不会重发,因此请记录您收到的内容。
出现问题时
| 您看到 | 处理方法 |
|---|---|
| webhook 返回 401 或 403 | 您的流程拒绝了消息:请检查两端的密钥,或确认该流程允许任何人调用。 |
| webhook 返回 404 | 地址有误,或流程已被删除或关闭。请重新复制地址。 |
| webhook 返回 400 或 500 | 您的流程不接受该消息。通常是因为它无法处理 test 事件,或值为 null 的字段。请查看流程的运行历史。 |
| 新问题没有任何消息到达 | 请检查 Send automatically 是否设为每个新问题,并确认连接为 On。然后手动发送一个问题,查看流程的响应。 |
| 没有 Send to Webhook 按钮 | 只有管理员能看到它,且仅当连接为 On 时才显示。 |
| 您的套餐不包含连接功能 | Team、Business、Partner 和 Enterprise 套餐包含连接功能,Project 套餐可作为附加组件购买。您的管理员可以在 Plan & billing 中升级。 |
仍未解决?请将您看到的提示信息发送至 [email protected]。切勿将密钥本身发送给我们。
哪些数据会离开 UAT Studio
- 消息仅通过 HTTPS 发送。
- 消息包含问题文本、测试和测试人员姓名,从不包含文件或截图。请只发送到您的组织信任、可以处理这些信息的服务。
- 密钥加密存储(AES-256),解密密钥与数据库分开保存。任何人都无法读取它。
- 将连接切换为 Off 或将其删除,就不会再发送任何内容。
