in notification-dingtalk/dingtalk_notification.go [75:138]
func (n *Notification) Notify(msg plugin.NotificationMessage) {
log.Debugf("try to send notification %+v", msg)
if !n.Config.Notification {
return
}
// get user config
userConfig, err := n.getUserConfig(msg.ReceiverUserID)
if err != nil {
log.Errorf("get user config failed: %v", err)
return
}
if userConfig == nil {
log.Debugf("user %s has no config", msg.ReceiverUserID)
return
}
// check if the notification is enabled
switch msg.Type {
case plugin.NotificationNewQuestion:
if !userConfig.AllNewQuestions {
log.Debugf("user %s not config the new question", msg.ReceiverUserID)
return
}
case plugin.NotificationNewQuestionFollowedTag:
if !userConfig.NewQuestionsForFollowingTags {
log.Debugf("user %s not config the new question followed tag", msg.ReceiverUserID)
return
}
default:
if !userConfig.InboxNotifications {
log.Debugf("user %s not config the inbox notification", msg.ReceiverUserID)
return
}
}
log.Debugf("user %s config the notification", msg.ReceiverUserID)
if len(userConfig.WebhookURL) == 0 {
log.Errorf("user %s has no webhook url", msg.ReceiverUserID)
return
}
notificationMsg, notificationTitle := renderNotification(msg)
// no need to send empty message
if len(notificationMsg) == 0 {
log.Debugf("this type of notification will be drop, the type is %s", msg.Type)
return
}
// Create a Resty Client
client := resty.New()
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(NewWebhookReq(notificationMsg, notificationTitle)).
Post(userConfig.WebhookURL)
if err != nil {
log.Errorf("send message failed: %v %v", err, resp)
} else {
log.Infof("send message to %s success, resp: %s", msg.ReceiverUserID, resp.String())
}
}