本文为您介绍Node.js调用短信消息API的操作流程。
简介
当您使用短信的API接口发送短信后,可以通过使用MNS的Queue模型来接收短信的回执消息,假如服务出现异常情况时(如网络问题),导致消息回执未成功获取,还可以通过短信发送状态查询API接口进行一定的补偿(目前支持30天内发送记录的查询)。
注意 使用短信服务新版SDK调用API接口,请查看新版SDK参考和API参考。
消息的订阅
- 云通信的所有业务消息都通过MNS消息服务向外发送。用户每订阅一个类别的消息(比如上行短信消息SmsUp),系统都会为用户分配一个独立的消息队列。
- 用户可以通过阿里云账号拿到一个临时的token用于获取队列中的消息。用户可以下载demo,编写简单的消息处理类即可完成消息处理的任务。
- 在页面上订阅消息,订阅完消息后,能拿到消息队列名称(queueName)。比如:Alicom-Queue-xxxxxx-SmsReport 。队列名字每个用户都不同。
路径:短信产品进入控制台→应用开发→接口调用→云通信消息接收→短信状态报告接收→向右滑动 (MNS消息队列消费模式。接收消息队列信息,请下载消息服务SDK进行程序编写,详见API文档)位置如下图所有示;点击进入控制台。
消息类型
短信提供2种消息类型SmsReport(短信回执报告消息)和SmsUp(上行短信消息)。
- 通过订阅SmsReport短信状态报告,可以获知每条短信的发送情况,了解短信是否达到终端用户的状态与相关信息。
- 通过订阅SmsUp上行短信消息,可以获知终端用户回复短信的内容。
短信回执消息SmsReport消息体格式
名称 | 类型 | 描述 | 示例 | 是否必须 |
---|---|---|---|---|
phone_number | String | 短信接收号码。 | 13000000000 | 可选 |
success | Boolean | 发送是否成功。 | true | 必须 |
biz_id | String | 发送回执ID。 | 1234^345 | 必须 |
out_id | String | 调用发送短信接口时传的outId。 | 123456 | 可选 |
send_time | String | 转发给运营商的时间。 | 2017-06-01 10:00:00 | 必须 |
report_time | String | 收到运营商回执的时间。 | 2017-06-01 10:00:05 | 可选 |
err_code | String | 错误码。 | UNKNOW | 可选 |
err_msg | String | 错误信息。 | 未知异常 | 可选 |
sms_size | String | 140字节算一条短信,短信长度超过140字节时会拆分成多条短信发送。 | 1,2,3 | 可选 |
上行短信消息SmsUp
名称 | 类型 | 描述 | 示例 | 是否必须 |
---|---|---|---|---|
phone_number | String | 短信接收号码。 | 13000000000 | 可选 |
content | String | 短信内容。 | true | 必须 |
sign_name | String | 短信签名。 | 【阿里云】 | 必须 |
send_time | String | 时间。 | 2017-06-01 10:00:00 | 必须 |
dest_code | String | 扩展码。 | 123456 | 必须 |
sequence_id | String | 消息序列ID。 | 123456 | 必须 |
技术对接步骤
1:下载SDK工具包
$ npm install @alicloud/sms-sdk --save
SDK&DEMO[下载地址]
编写样例代码
/**
* 云通信基础能力业务短信发送、查询详情以及消费消息示例,供参考。
* Created on 2017-07-31
*/
const SMSClient =require('@alicloud/sms-sdk')
// ACCESS_KEY_ID/ACCESS_KEY_SECRET 根据实际申请的账号信息进行替换
const accessKeyId = 'yourAccessKeyId'
const secretAccessKey = 'yourAccessKeySecret'
//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName,不用填最后面一段
const queueName = 'Alicom-Queue-1092397003988387-'
//初始化sms_client
let smsClient = new SMSClient({accessKeyId, secretAccessKey})
//短信回执报告
smsClient.receiveMsg(0, queueName).then(function (res) {
//消息体需要base64解码
let {code, body}=res
if (code === 200) {
//处理消息体,messagebody
console.log(body)
}
}, function (err) {
console.log(err)
})
//短信上行报告
smsClient.receiveMsg(1, queueName).then(function (res) {
//消息体需要base64解码
let {code, body}=res
if (code === 200) {
//处理消息体,messagebody
console.log(body)
}
}, function (err) {
console.log(err)
})
在文档使用中是否遇到以下问题
更多建议
匿名提交