Files
TaskPool/internal/sdk/messenger/channels/helpers.go
T
2026-05-12 18:42:18 +08:00

66 lines
2.1 KiB
Go

package channels
import (
"encoding/json"
"fmt"
"strings"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v4/client"
"github.com/alibabacloud-go/tea/tea"
)
// replaceBodyPlaceholder 替换自定义 webhook body 中的 TEXT 占位符
func replaceBodyPlaceholder(body string, content string) string {
data, _ := json.Marshal(content)
dataStr := strings.Trim(string(data), "\"")
return strings.Replace(body, "TEXT", dataStr, -1)
}
// createAliyunSMSClient 创建阿里云短信客户端 (V2.0)
func createAliyunSMSClient(accessKeyId, accessKeySecret, regionId string) (*dysmsapi.Client, error) {
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyId),
AccessKeySecret: tea.String(accessKeySecret),
RegionId: tea.String(regionId),
}
// 设置端点,通常为 dysmsapi.aliyuncs.com
config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
return dysmsapi.NewClient(config)
}
// sendAliyunSMS 发送短信 (V2.0)
func sendAliyunSMS(client *dysmsapi.Client, phoneNumber, signName, templateCode, content string, extra map[string]any) (string, error) {
templateParam := map[string]interface{}{
"content": content,
}
for k, v := range extra {
templateParam[k] = v
}
templateParamJSON, _ := json.Marshal(templateParam)
request := &dysmsapi.SendSmsRequest{
PhoneNumbers: tea.String(phoneNumber),
SignName: tea.String(signName),
TemplateCode: tea.String(templateCode),
TemplateParam: tea.String(string(templateParamJSON)),
}
response, err := client.SendSms(request)
if err != nil {
return "", fmt.Errorf("发送短信失败: %s", err.Error())
}
if response.Body == nil || tea.StringValue(response.Body.Code) != "OK" {
msg := "Unknown Error"
code := "Unknown Code"
if response.Body != nil {
msg = tea.StringValue(response.Body.Message)
code = tea.StringValue(response.Body.Code)
}
return "", fmt.Errorf("发送失败: %s - %s", code, msg)
}
return fmt.Sprintf("RequestId: %s, BizId: %s", tea.StringValue(response.Body.RequestId), tea.StringValue(response.Body.BizId)), nil
}