An open API service indexing awesome lists of open source software.

https://github.com/sasaxie/qcloundsms-go

腾讯云短信SDK
https://github.com/sasaxie/qcloundsms-go

go golang sms sms-sdk tencent tencent-cloud

Last synced: 5 months ago
JSON representation

腾讯云短信SDK

Awesome Lists containing this project

README

          

腾讯云短信 Golang SDK
===

## 腾讯短信服务

目前`腾讯云短信`为客户提供`国内短信`、`国内语音`和`海外短信`三大服务,腾讯云短信SDK支持以下操作:

### 国内短信

国内短信支持操作:

- 单发短信
- 指定模板单发短信
- 群发短信
- 指定模板群发短信
- 拉取短信回执和短信回复状态

> `Note` 短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387)开通权限,量大客户可以使用此功能批量拉取,其他客户不建议使用。

### 海外短信

海外短信支持操作:

- 单发短信
- 指定模板单发短信
- 群发短信
- 指定模板群发短信
- 拉取短信回执和短信回复状态

> `Note` 海外短信和国内短信使用同一接口,只需替换相应的国家码与手机号码,每次请求群发接口手机号码需全部为国内或者海外手机号码。

### 语音通知

语音通知支持操作:

- 发送语音验证码
- 发送语音通知
- 上传语音文件
- 按语音文件fid发送语音通知
- 指定模板发送语音通知类

## 开发

### 准备

在开始开发云短信应用之前,需要准备如下信息:

- [x] 获取SDK AppID和AppKey

云短信应用SDK `AppID`和`AppKey`可在[短信控制台](https://console.cloud.tencent.com/sms)的应用信息里获取,如您尚未添加应用,请到[短信控制台](https://console.cloud.tencent.com/sms)中添加应用。

- [x] 申请签名

一个完整的短信由短信`签名`和短信正文内容两部分组成,短信`签名`须申请和审核,`签名`可在[短信控制台](https://console.cloud.tencent.com/sms)的相应服务模块`内容配置`中进行申请。

- [x] 申请模板

同样短信或语音正文内容`模板`须申请和审核,`模板`可在[短信控制台](https://console.cloud.tencent.com/sms)的相应服务模块`内容配置`中进行申请。

### 安装

```shell
go get github.com/sasaxie/qcloundsms-go
```

### 文档

若您对接口存在疑问,可以查阅:

* [API开发指南](https://cloud.tencent.com/document/product/382/13297)
* [SDK文档](https://qcloudsms.github.io/qcloudsms_java/)
* [错误码](https://cloud.tencent.com/document/product/382/3771)

### 示例

- **准备必要参数**

```golang
// 短信应用SDK AppID
var appid int = 1400009099 // 1400开头

// 短信应用SDK AppKey
appkey := "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"

// 需要发送短信的手机号码
phoneNumbers := make([]string, 0)
phoneNumbers = append(phoneNumbers, "21212313123")
phoneNumbers = append(phoneNumbers, "12345678902")
phoneNumbers = append(phoneNumbers, "12345678903")

// 短信模板ID,需要在短信应用中申请
templateId := 7839 // NOTE: 这里的模板ID`7839`只是一个示例,真实的模板ID需要在短信控制台中申请

// 签名
smsSign := "腾讯云"; // NOTE: 这里的签名"腾讯云"只是一个示例,真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID`
```

- **单发短信,已通过测试**

```golang
func TestSingleSender_Send(t *testing.T) {
singleSender := NewSingleSender(appID, appKey)
result, err := singleSender.Send(0, "86", phoneNumbers[0], "【腾讯云】您的验证码是: 5678", "", "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 如需发送海外短信,同样可以使用此接口,只需将国家码 `86` 改写成对应国家码号。
> `Note` 无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。

- **指定模板ID单发短信,已通过测试**

```golang
func TestSingleSender_SendWithParam(t *testing.T) {
// 短信模版内容
params := make([]string, 0)
params = append(params, "5789")

// 短信模版ID,需要在短信应用中申请
// NOTE: 这里的模版`7839`只是一个示例,
// 真实的模版ID需要在短信控制台中申请
templateId := 7839

// 签名
// NOTE: 这里的签名"腾讯云"只是一个示例,
// 真实的签名需要在短信控制台中申请,另外
// 签名参数使用的示`签名内容`,而不是`签名ID`
smsSign := "腾讯云"

singleSender := NewSingleSender(appID, appKey)

result, err := singleSender.SendWithParam("86", phoneNumbers[0], templateId, params, smsSign, "", "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。

- **群发,已通过测试**

```golang
func TestMultiSender_Send(t *testing.T) {
multiSender := NewMultiSender(appID, appKey)

result, err := multiSender.Send(0, "86", phoneNumbers, "【腾讯云】您的验证码是: 5678", "", "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。

- **指定模板ID群发,已通过测试**

```golang
func TestMultiSender_SendWithParam(t *testing.T) {
// 短信模版内容
params := make([]string, 0)
params = append(params, "5789")

// 短信模版ID,需要在短信应用中申请
// NOTE: 这里的模版`7839`只是一个示例,
// 真实的模版ID需要在短信控制台中申请
templateId := 7839

// 签名
// NOTE: 这里的签名"腾讯云"只是一个示例,
// 真实的签名需要在短信控制台中申请,另外
// 签名参数使用的示`签名内容`,而不是`签名ID`
smsSign := "腾讯云"

multiSender := NewMultiSender(appID, appKey)

result, err := multiSender.SendWithParam("86", phoneNumbers, templateId, params, smsSign, "", "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 群发一次请求最多支持200个号码,如有对号码数量有特殊需求请联系腾讯云短信技术支持(QQ:3012203387)。
> `Note` 无论单发/群发短信还是指定模板ID单发/群发短信都需要从控制台中申请模板并且模板已经审核通过,才可能下发成功,否则返回失败。

- **发送语音验证码,已通过测试**

```golang
func TestVoiceVerifySender_Send(t *testing.T) {
sender := NewVoiceVerifyCodeSender(appID, appKey)
result, err := sender.Send("86", phoneNumbers[0], "5678", 2, "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 语音验证码发送只需提供验证码数字,例如当msg=“5678”时,您收到的语音通知为“您的语音验证码是5678”,如需自定义内容,可以使用语音通知。

- **发送语音通知,已通过测试**

```golang
func TestVoicePromptSender_Send(t *testing.T) {
sender := NewVoicePromptSender(appID, appKey)
result, err := sender.Send("86", "12345678902", 2, 2, "5678", "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

- **拉取短信回执以及回复,已通过测试**

```golang
func TestStatusPuller(t *testing.T) {
// Note: 短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387)开通权限
maxNum := 10 // 单次拉取最大量

puller := NewStatusPuller(appID, appKey)
result, err := puller.PullCallback(maxNum)
if err != nil {
t.Error(err)
} else {
t.Log(result)
}

result, err = puller.PullReply(maxNum)
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387)开通权限,量大客户可以使用此功能批量拉取,其他客户不建议使用。

- **拉取单个手机短信状态,已通过测试**

```golang
func TestMobileStatusPuller(t *testing.T) {
beginTime := time.Now().Unix() - 3600 // 开始时间(unix timestamp)
endTime := time.Now().Unix() // 结束时间(unix timestamp)
maxNum := 10 // 单次拉取最大量
puller := NewMobileStatusPuller(appID, appKey)
result, err := puller.PullCallback("86", "12345678902", beginTime, endTime, maxNum)
if err != nil {
t.Error(err)
} else {
t.Log(result)
}

result, err = puller.PullReply("86", "12345678902", beginTime, endTime, maxNum)
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

- **发送国际短信**

海外短信与国内短信发送类似, 发送海外短信只需替换相应国家码。

- **上传语音文件,未通过测试,POST Body数据有问题,Golang生成的参数已通过Postman测试**

```golang
func TestVoiceFileUploader_Upload(t *testing.T) {
// Note: 语音文件大小上传限制400K字节
filename := "../resource/example.mp3"
fileContent, err := ioutil.ReadFile(filename)
if err != nil {
t.Error(err)
return
}

uploader := NewVoiceFileUploader(appID, appKey)
result, err := uploader.Upload(fileContent, MP3)
if err != nil {
t.Error(err)
return
} else {
t.Log(result)
}
}
```

> `Note` '语音文件上传'功能需要联系腾讯云短信技术支持(QQ:3012203387)才能开通

- **查询语音文件审核状态,已通过测试**

```golang
func TestStatusVoiceFile_Get(t *testing.T) {
// Note: 这里fid来自`上传语音文件`接口返回的响应,要按语音
// 文件fid发送语音通知,需要先上传语音文件获取fid
fid := "2d86ecd5cee47fbe8fb06b358e334facef44bf77.mp3"

file := NewStatusVoiceFile(appID, appKey)

// result里会带有语音文件审核状态status, {0: 待审核, 1: 通过, 2: 拒绝, 3: 语音文件不存在}
result, err := file.Get(fid)
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` '查询语音文件审核状态'功能需要联系腾讯云短信技术支持(QQ:3012203387)才能开通

- **按语音文件fid发送语音通知,已通过测试**

```golang
func TestFileVoiceSender_Send(t *testing.T) {
// Note: 这里fid来自`上传语音文件`接口返回的响应,要按语音
// 文件fid发送语音通知,需要先上传语音文件获取fid
fid := "2d86ecd5cee47fbe8fb06b358e334facef44bf77.mp3"

sender := NewFileVoiceSender(appID, appKey)

result, err := sender.Send("86", phoneNumbers[0], fid, 2, "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 按'语音文件fid发送语音通知'功能需要联系腾讯云短信技术支持(QQ:3012203387)才能开通

- **指定模板发送语音通知,已通过测试**

```golang
func TestTtsVoiceSender_Send(t *testing.T) {
// 短信模版内容
params := make([]string, 0)
params = append(params, "5789")

// 需要发送短信的手机号码
phoneNumber := "12345678902"

// 短信模版ID,需要在短信应用中申请
// NOTE: 这里的模版`7839`只是一个示例,
// 真实的模版ID需要在短信控制台中申请
templateId := 7839

// 播放次数
// NOTE: 可选,最多3次,默认2次
playTimes := 1

ttsVoiceSender := NewTtsVoiceSender(appID, appKey)

result, err := ttsVoiceSender.Send("86", phoneNumber, templateId, params, playTimes, "")
if err != nil {
t.Error(err)
} else {
t.Log(result)
}
}
```

> `Note` 注意上面的这个示例代码均已通过实际测试,可以直接编译和运行,但是AppID、AppKey、手机号等参数需要作相应修改。