Files
goodBaby/drivers/dingtalk/dingtalk.go
T

53 lines
1.4 KiB
Go
Raw Normal View History

2026-07-26 22:19:41 +08:00
// Package dingtalk 提供钉钉自定义机器人的提醒与规则执行能力
2026-04-05 10:36:22 +08:00
package dingtalk
2026-04-05 22:28:38 +08:00
import (
2026-09-12 15:32:27 +08:00
"context"
2026-07-26 22:19:41 +08:00
"fmt"
2026-04-05 10:36:22 +08:00
2026-04-05 22:28:38 +08:00
"github.com/CatchZeng/dingtalk/pkg/dingtalk"
2026-09-12 15:32:27 +08:00
"github.com/ssdomei232/goodBaby/internal/retry"
2026-04-05 22:28:38 +08:00
"github.com/ssdomei232/goodBaby/model"
)
2026-09-12 15:32:27 +08:00
// ErrNoUserConfig 表示用户没有配置钉钉提醒
var ErrNoUserConfig = fmt.Errorf("用户未配置钉钉机器人")
2026-07-26 22:19:41 +08:00
// SendDingTalkMsg 使用用户配置的钉钉机器人发送提醒
//
// 用户没有配置钉钉机器人时返回 ErrNoUserConfig
func SendDingTalkMsg(user *model.User, title string, msg string) error {
2026-09-12 15:32:27 +08:00
if user.DingTalkConfig == nil {
2026-07-26 22:19:41 +08:00
return ErrNoUserConfig
2026-04-05 22:28:38 +08:00
}
2026-07-26 22:19:41 +08:00
2026-09-12 15:32:27 +08:00
config, err := ParseAccountConfig(*user.DingTalkConfig)
if err != nil {
return err
}
2026-07-26 22:19:41 +08:00
2026-09-12 15:32:27 +08:00
if err := send(config, title, msg); err != nil {
2026-07-26 22:19:41 +08:00
return fmt.Errorf("发送钉钉消息失败: %w", err)
}
return nil
2026-04-05 22:28:38 +08:00
}
2026-09-12 15:32:27 +08:00
// SendMessage 用规则里配置的机器人发送消息
func SendMessage(ctx context.Context, config *DingTalkRuleConfig) error {
if err := retry.Do(ctx, func() error {
return send(&config.DingTalkConfig, config.Title, config.Msg)
}); err != nil {
return fmt.Errorf("发送钉钉消息失败: %w", err)
}
return nil
}
// send 调用一次机器人接口
func send(config *DingTalkConfig, title, msg string) error {
client := dingtalk.NewClient(config.AccessToken, config.Secret)
message := dingtalk.NewMarkdownMessage().SetMarkdown(title, msg)
_, _, err := client.Send(message)
return err
}