sqle icon indicating copy to clipboard operation
sqle copied to clipboard

API服务里,工单执行完成后,可以提供一个回调地址去通知调用API的服务

Open bxhbpdxhzGithub opened this issue 3 years ago • 1 comments

API服务里,工单执行完成后,可以提供一个回调地址去通知调用API的服务。 已有的工单系统,以API的方式接入后,工单执行完成了,要自己定时去查询结果,能不能在执行完成后,回调一个接口之类的,及时通知一下

bxhbpdxhzGithub avatar Apr 11 '22 06:04 bxhbpdxhzGithub

我们后续可以规划下

sjjian avatar Apr 14 '22 09:04 sjjian

需求细节

入口

平台管理员账号登录, 进入系统设置-消息推送,选择webhook配置

需求概要

  1. 用户点击“修改”,进行webhook配置
  • 选择是否开启webhook通知,启用此项后Webhook推送才会生效, 启停Webhook推送不会影响其他推送方式, 启用后如果工单状态发生变化,会向用户配置的 API 发送 POST 请求告知用户工单状态
  • 默认不开启,选择开启,用户需填写以下内容,并点击提交
    • webhook url:必填,用于工单消息推送的 API 地址
    • 最大重试次数:默认3次,取值范围0-5。如果发送失败,请求重试的最大次数;
    • 重试间隔:默认1秒,取值范围1-5。请求重试的发送间隔;
    • Token:选填字段,用于标识推送方。

注:

  • 会触发通知的事件有创建工单、审核工单、上线失败、上线成功、工单驳回
  • 开启该服务时,需要校验必填项,关闭服务时无需校验任何参数。
  1. 用户点击“测试”,如配置正确,能在api服务端收到正确的api调用信息 测试的文字模板:"This is a SQLE test notification\nIf you receive this message, it only means that the message can be pushed"

原型

入口 image

配置页面 image

开启配置后页面 image

ColdWaterLW avatar May 11 '23 03:05 ColdWaterLW

新增功能

  • 用户可以更新或查看当前的工单 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"
    }
}

jessun avatar May 18 '23 08:05 jessun