短信回执设置

本文详细介绍了如何在PDU串中设置短信回执,包括修改TP-SRR位实现状态报告请求,以及通过AT+CNMI指令配置短信接收模式,确保短信回执的正确接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

       在pdu串中设置短信回执的方法。就是在pdu-type这个8位位组一般都设置为11:包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)
二进制表示形式:0 0 0 10 0 01
TP-MTI:01
 TP-Message-Type-Indicator(消息类型指示符)
Bit1,0:01 指示为SMS-SUBMIT类型
TP-RD:0
TP-Reject-Duplicates(是否拒绝相同重复消息)
Bit2:0  指示短消息中心接受未转发的具有相同TP-MR的消息。
TP-VPF:10
 TP-Validity-Period-Format(有效期格式)
 Bit4,3:10 指示使用相对格式。
TP-SRR:0
 TP-Status-Report-Request
 Bit5:0  指示不使用状态报告。
TP-UDHI:0
 TP-User-Data-Header-Indicator(用户数据头标示)
 Bit6:0  指示这是一个SMS消息,没有用户数据头。EMS消息需要设置。
TP-RP:0
 TP-Reply-Path(回复路径)
 Bit7:0  指示没有设置回复路径。

只需要将bit5设置成1即可接收回执 即pdu-type为31
11点左右gsm modem到手马上接上电脑开始测试,结果令我哭啊!!!!!发了n条没有收到一个回执。只好再查资料,同时打开SMS with the SMS PDU-mode以及hesicong大大那里找来的开发文档开始啃,哈哈!皇天不负有心人啊!终于找到个和短信接收相关的at指令AT+CNMI=<mode>,<mt>,<bm>,<ds>,<brf>
参数:
 mode:
 0——缓存在终端
 1——直接发送到TE
mt:
 0——接收到新的SMS不返回事件
 1——如果接收到的SMS存储在na ,则返回
    +CMTI:<mem>,<index>
 2——除了Class2 SMS,新的SMS直接发送到终端,返回:
   +CMT:<length><CR><LF><PDU>
 3——Class3 SMS使用mt=2的方法返回,其他类型的使用mt=1的方法返回。
bm:
 0——小区广播不通知
 2——新的小区广播通知,返回
    +CBM:<length><CR><LF><pdu>
 3——Class3格式的小区广播通知,使用bm=2格式
ds:
 0——状态报告不通知
 1——新的状态报告通知,返回:
   +CDS:<length><CR><LF><pdu>
 2——如果新的状态报告存储到ME,则返回:
  +CDSI:<mem>,<index>
brf:
 1——始终为1

再次打开超级终端输入
at+cnmi? 
+CNMI:0,1,0,0,0
果然是这里的问题了
按照前面mode定义
重新设置cnmi
at+cnmi=1,1,0,1,1
OK
再发送一条短信返回OK后大概5s终端返回了
+CDS: 26
0006320D91683161721356F6506071415354005060714153640000
第一段000632意义不是很明白(哪位大大知道麻烦告诉一声◎◎)
0D接收方号码长度
683161721356F6接收方号码
50607141535400信息到达短信中心的时间
5060714153640000信息发送到接收方的时间

### 处理阿里云短信服务回执消息 对于阿里云短信服务中的回执消息处理,主要通过订阅`SmsReport`来实现。这允许开发者监控并获取已发送短信的状态更新。 #### 订阅短信状态报告 为了能够接收到短信的发送状态反馈,需要先完成对`SmsReport`的服务订阅操作。此过程涉及配置应用以监听来自阿里云的消息通知,并设置相应的回调地址用于接收这些数据[^1]。 ```xml <!-- Maven依赖 --> <dependencies> <!-- 阿里云核心SDK --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.7.1</version> </dependency> <!-- 短信API SDK --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> </dependency> </dependencies> ``` 一旦完成了必要的开发环境搭建工作之后,就可以着手编写具体的业务逻辑代码了。通常情况下,会创建一个专门用来处理这类事件的方法或类,以便更好地管理响应不同的情况。 #### 实现回执消息处理器 下面是一个简单的Java方法示例,展示了如何解析从阿里云接收到的JSON格式的回执信息: ```java import com.alibaba.fastjson.JSONObject; public class SmsReceiptHandler { public void handleReceipt(String receiptJson){ JSONObject jsonObject = JSONObject.parseObject(receiptJson); String phoneNumbers = jsonObject.getString("PhoneNumbers"); String sendStatus = jsonObject.getString("SendStatus"); Long reportTime = jsonObject.getLong("ReportTime"); System.out.println("手机号:" + phoneNumbers); System.out.println("发送状态:" + sendStatus); System.out.println("上报时间戳:" + reportTime); // 进一步处理... } } ``` 上述代码片段中使用到了阿里巴巴提供的Fastjson库来进行JSON字符串转对象的操作,从而方便提取出所需的关键字段值。实际应用场景下可以根据需求调整打印语句为更复杂的业务流程控制逻辑[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值