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 }