diff --git a/src/modules/rdb/cron/sender_im.go b/src/modules/rdb/cron/sender_im.go index b42e51ec..894d8530 100644 --- a/src/modules/rdb/cron/sender_im.go +++ b/src/modules/rdb/cron/sender_im.go @@ -2,6 +2,7 @@ package cron import ( "path" + "regexp" "strings" "time" @@ -163,12 +164,22 @@ func sendImByDingTalkRobot(message *dataobj.Message) { } } - for tokenUser := range set { - err := dingtalk.RobotSend(tokenUser, message.Content) - if err != nil { - logger.Warningf("im dingtalk_robot send to %s fail: %v", tokenUser, err) + req := regexp.MustCompile("^1[0-9]{10}$") + var atUser []string + var tokenUser []string + for user := range set { + if req.MatchString(user){ + atUser = append(atUser, user) } else { - logger.Infof("im dingtalk_robot send to %s succ", tokenUser) + tokenUser = append(tokenUser, user) + } + } + for _, u := range tokenUser { + err := dingtalk.RobotSend(u, message.Content, atUser) + if err != nil { + logger.Warningf("im dingtalk_robot send to %s fail: %v", u, err) + } else { + logger.Infof("im dingtalk_robot send to %s succ", u) } } } diff --git a/src/modules/rdb/dingtalk/dingtalk.go b/src/modules/rdb/dingtalk/dingtalk.go index 36a9a3e4..ba1b15ac 100644 --- a/src/modules/rdb/dingtalk/dingtalk.go +++ b/src/modules/rdb/dingtalk/dingtalk.go @@ -16,14 +16,20 @@ type Result struct { type dingReqData struct { Msgtype string `json:"msgtype"` Text *textContent `json:"text"` + At *atContent `json:"at"` } type textContent struct { Content string `json:"content"` } +type atContent struct { + AtMobiles []string `json:"atMobiles"` + IsAtAll bool `json:"isAtAll"` +} + // RobotSend robot发送信息 -func RobotSend(tokenUser, sendContent string) error { +func RobotSend(tokenUser, sendContent string, atUser []string) error { url := "https://oapi.dingtalk.com/robot/send?access_token=" + tokenUser dingReqData := new(dingReqData) @@ -31,6 +37,10 @@ func RobotSend(tokenUser, sendContent string) error { reqContent := new(textContent) reqContent.Content = sendContent dingReqData.Text = reqContent + reqAtContent := new(atContent) + reqAtContent.IsAtAll = false + reqAtContent.AtMobiles = atUser + dingReqData.At = reqAtContent content, err := json.Marshal(dingReqData) if err != nil {