sqle
sqle copied to clipboard
API服务里,工单执行完成后,可以提供一个回调地址去通知调用API的服务
API服务里,工单执行完成后,可以提供一个回调地址去通知调用API的服务。 已有的工单系统,以API的方式接入后,工单执行完成了,要自己定时去查询结果,能不能在执行完成后,回调一个接口之类的,及时通知一下
我们后续可以规划下
需求细节
入口
平台管理员账号登录, 进入系统设置-消息推送,选择webhook配置
需求概要
- 用户点击“修改”,进行webhook配置
- 选择是否开启webhook通知,启用此项后Webhook推送才会生效, 启停Webhook推送不会影响其他推送方式, 启用后如果工单状态发生变化,会向用户配置的 API 发送 POST 请求告知用户工单状态
- 默认不开启,选择开启,用户需填写以下内容,并点击提交
- webhook url:必填,用于工单消息推送的 API 地址
- 最大重试次数:默认3次,取值范围0-5。如果发送失败,请求重试的最大次数;
- 重试间隔:默认1秒,取值范围1-5。请求重试的发送间隔;
- Token:选填字段,用于标识推送方。
注:
- 会触发通知的事件有创建工单、审核工单、上线失败、上线成功、工单驳回
- 开启该服务时,需要校验必填项,关闭服务时无需校验任何参数。
- 用户点击“测试”,如配置正确,能在api服务端收到正确的api调用信息
测试的文字模板:
"This is a SQLE test notification\nIf you receive this message, it only means that the message can be pushed"
原型
入口
配置页面
开启配置后页面
新增功能
- 用户可以更新或查看当前的工单 webhook 配置;
- 用户可以通过【测试】按钮对该 webhook 发送测试请求;
- 在配置完成 webhook API 后,同其他工单通知方式相似:在工单处理的不同阶段中,向指定的 URL 发送 Post 请求。
sqle POST 请求的主要格式如下
POST / HTTP/1.1
Host: 192.168.21.34:8000
Accept-Encoding: gzip
Authorization: Bearer test123
Content-Length: 239
User-Agent: Go-http-client/1.1
{"event":"workflow","action":"create","timestamp":"2023-05-18T15:45:25+08:00","payload":{"workflow":{"project_name":"test_project","workflow_id":"1658637666259832832","workflow_subject":"test_workflow","workflow_status":"wait_for_audit"}}}
其中
- "event" 恒为 "workflow"(目前 sqle 只支持工单通知);
- "action" 可能的取值有 ["create", "approve", "reject", "exec_success", "exec_failed"]。分别对应「工单创建」、「审核通过」、「审核驳回」、「上线成功」、「上线失败」;
- "timestamp" 表示请求发出的时间,RFC3339 格式;
- "payload" 表示该请求的主要业务内容,目前仅支持工单;
- "workflow" 表示该工单的当前信息,与 sqle 后端数据库中记录保持一致;
此外
- 用户配置的 token 会被放置在请求 Header 中的 Authorization 字段。参考规范:https://datatracker.ietf.org/doc/html/rfc6750 。sqle 对 token 字段没有任何限制。需要接受端根据自身情况决定是否使用 token;
- 接收请求的服务端在收到请求后,需要返回 200 响应。否则 sqle 会打印返回 body 中的文本信息。
- 在发送测试请求时,请确保接收请求的服务端运行正常。否则可能出现如下问题
{
"code": 0,
"message": "ok",
"data": {
"send_error_message": "Post \"http://192.168.21.34:8000\": dial tcp 192.168.21.34:8000: connect: connection refused"
}
}