fix: 调整参数解析

This commit is contained in:
fuzhongyun 2025-11-14 11:45:26 +08:00
parent 3fb3ce649f
commit adcc078174
1 changed files with 26 additions and 20 deletions

View File

@ -36,7 +36,17 @@ func NewCallbackService(cfg *config.Config, gateway *gateway.Gateway, dingtalkCl
type Envelope struct { type Envelope struct {
Action string `json:"action"` Action string `json:"action"`
TaskID string `json:"task_id"` TaskID string `json:"task_id"`
Data map[string]string `json:"data"` Data json.RawMessage `json:"data"`
}
// bug_optimization_submit_done 工单完成回调
const ActionBugOptimizationSubmitDone = "bug_optimization_submit_done"
// BugOptimizationSubmitDoneData 工单完成回调数据
type BugOptimizationSubmitDoneData struct {
Receivers []string `json:"receivers"`
DetailPage string `json:"detail_page"`
Msg string `json:"msg"`
} }
// Callback 统一回调处理 // Callback 统一回调处理
@ -47,7 +57,7 @@ func (s *CallbackService) Callback(c *fiber.Ctx) error {
ts := strings.TrimSpace(c.Get("X-Timestamp")) ts := strings.TrimSpace(c.Get("X-Timestamp"))
// 时间窗口(如果提供了 ts 则校验,否则跳过),窗口 5 分钟 // 时间窗口(如果提供了 ts 则校验,否则跳过),窗口 5 分钟
if ts != "" && !validateTimestamp(ts, 300*time.Minute) { if ts != "" && !validateTimestamp(ts, 5*time.Minute) {
return errorcode.AuthNotFound return errorcode.AuthNotFound
} }
@ -59,7 +69,7 @@ func (s *CallbackService) Callback(c *fiber.Ctx) error {
if env.Action == "" || env.TaskID == "" { if env.Action == "" || env.TaskID == "" {
return errorcode.ParamErr("missing action/task_id") return errorcode.ParamErr("missing action/task_id")
} }
if len(env.Data) == 0 { if env.Data == nil {
return errorcode.ParamErr("missing data") return errorcode.ParamErr("missing data")
} }
@ -109,35 +119,31 @@ func parseInt64(s string) (int64, bool) {
func (s *CallbackService) handleDingTalkCallback(c *fiber.Ctx, env Envelope) error { func (s *CallbackService) handleDingTalkCallback(c *fiber.Ctx, env Envelope) error {
switch env.Action { switch env.Action {
// bug/优化完成回调 // bug/优化完成回调
case "bug_optimization_submit_done": case ActionBugOptimizationSubmitDone:
// 获取 session_id // 获取 session_id
sessionID, ok := s.botTool.GetSessionByTaskID(env.TaskID) sessionID, ok := s.botTool.GetSessionByTaskID(env.TaskID)
if !ok { if !ok {
return errorcode.ParamErr("missing session_id for task_id: %s", env.TaskID) return errorcode.ParamErr("missing session_id for task_id: %s", env.TaskID)
} }
// 获取接收者 var data BugOptimizationSubmitDoneData
receiverJson := env.Data["receivers"] if err := json.Unmarshal(env.Data, &data); err != nil {
if receiverJson == "" { return errorcode.ParamErr("invalid data type: %v", err)
return errorcode.ParamErr("missing receivers")
} }
var receiverIds []string
if err := json.Unmarshal([]byte(receiverJson), &receiverIds); err != nil { if len(data.Receivers) == 0 {
return errorcode.ParamErr("invalid receivers: %v", err)
}
if len(receiverIds) == 0 {
return errorcode.ParamErr("empty receivers") return errorcode.ParamErr("empty receivers")
} }
// 构建接收者 // 构建接收者
receivers := s.getDingtalkReceivers(c.Context(), receiverIds) receivers := s.getDingtalkReceivers(c.Context(), data.Receivers)
// 构建跳转链接 // 构建跳转链接
detailPage := env.Data["detail_page"] var detailPage string
if detailPage != "" { if data.DetailPage != "" {
detailPage = util.BuildJumpLink(detailPage, "去查看") detailPage = util.BuildJumpLink(data.DetailPage, "去查看")
} }
msg := env.Data["msg"] msg := data.Msg
msg = util.ReplacePlaceholder(msg, "receivers", receivers) msg = util.ReplacePlaceholder(msg, "receivers", receivers)
msg = util.ReplacePlaceholder(msg, "detail_page", detailPage) msg = util.ReplacePlaceholder(msg, "detail_page", detailPage)