diff --git a/pkg/services/alerting/notifiers/dingding.go b/pkg/services/alerting/notifiers/dingding.go
index bf1b721f753..ce932b7a799 100644
--- a/pkg/services/alerting/notifiers/dingding.go
+++ b/pkg/services/alerting/notifiers/dingding.go
@@ -10,12 +10,17 @@ import (
"github.com/grafana/grafana/pkg/services/alerting"
)
+const DefaultDingdingMsgType = "link"
const DingdingOptionsTemplate = `
DingDing settings
Url
+
+ MessageType
+
+
`
func init() {
@@ -35,8 +40,11 @@ func NewDingDingNotifier(model *m.AlertNotification) (alerting.Notifier, error)
return nil, alerting.ValidationError{Reason: "Could not find url property in settings"}
}
+ msgType := model.Settings.Get("msgType").MustString(DefaultDingdingMsgType)
+
return &DingDingNotifier{
NotifierBase: NewNotifierBase(model),
+ MsgType: msgType,
Url: url,
log: log.New("alerting.notifier.dingding"),
}, nil
@@ -44,8 +52,9 @@ func NewDingDingNotifier(model *m.AlertNotification) (alerting.Notifier, error)
type DingDingNotifier struct {
NotifierBase
- Url string
- log log.Logger
+ MsgType string
+ Url string
+ log log.Logger
}
func (this *DingDingNotifier) Notify(evalContext *alerting.EvalContext) error {
@@ -69,15 +78,29 @@ func (this *DingDingNotifier) Notify(evalContext *alerting.EvalContext) error {
message += fmt.Sprintf("\\n%2d. %s value %s", i+1, match.Metric, match.Value)
}
- bodyStr := `{
- "msgtype": "link",
- "link": {
- "text": "` + message + `",
- "title": "` + title + `",
- "picUrl": "` + picUrl + `",
- "messageUrl": "` + messageUrl + `"
- }
- }`
+ var bodyStr string
+ if this.MsgType == "actionCard" {
+ bodyStr = `{
+ "msgtype": "actionCard",
+ "actionCard": {
+ "text": "` + message + `",
+ "title": "` + title + `",
+ "singleTitle": "More",
+ "singleURL": "` + messageUrl + `"
+ }
+ }`
+ } else {
+ bodyStr = `{
+ "msgtype": "link",
+ "link": {
+ "text": "` + message + `",
+ "title": "` + title + `",
+ "picUrl": "` + picUrl + `",
+ "messageUrl": "` + messageUrl + `"
+ }
+ }`
+ }
+
bodyJSON, err := simplejson.NewJson([]byte(bodyStr))
if err != nil {