如何使用node-smpp接收message_payload及160字符以上长短信
node-smpp 接收超过160字符长短信的处理方法
首先确认:node-smpp 不需要额外的全局开关来解析message_payload参数,无法获取长短信通常是SMPP版本配置缺失、或者服务器采用了分段短信下发两种情况,对应处理方式如下:
1. 配置SMPP版本支持message_payload
message_payload是SMPP 3.4版本才正式引入的TLV参数,如果你在绑定SMPP服务器时没有指定对应接口版本,服务器默认不会通过message_payload下发长短信,绑定示例代码如下:
const smpp = require('smpp'); // 建立SMPP连接 const session = smpp.connect('smpp://<SMPP服务器地址>:<端口>'); // 发起绑定请求时指定interface_version为0x34(对应SMPP 3.4) session.bind_transceiver({ system_id: '<你的系统ID>', password: '<你的鉴权密码>', interface_version: 0x34 }, (resPdu) => { if (resPdu.command_status === 0) { console.log('SMPP服务绑定成功'); } });
2. 从PDU中直接读取message_payload
绑定成功后,node-smpp会自动解析所有合法的TLV参数,你可以在deliver_sm事件回调中直接读取该字段,注意要根据实际使用的编码格式做内容转换:
session.on('deliver_sm', (pdu) => { // 判断是否存在完整的长短信payload if (pdu.message_payload) { // 示例为UCS2编码,中文场景也可能是GBK编码,可根据data_coding字段判断编码类型 const fullSmsContent = pdu.message_payload.toString('ucs2'); console.log('长短信内容:', fullSmsContent); } // 回复接收确认 session.send(pdu.response()); });
3. 处理分段下发的长短信
如果SMPP服务器没有采用message_payload下发长短信,会自动将超过长度的短信拆分为多段带UDH头的短短信,你需要自行实现拼接逻辑:
- 从
pdu.short_message的前缀提取UDH头,读取长短信唯一标识、总段数、当前段序号三个核心字段 - 用缓存结构(如Map)按唯一标识存储各段内容,收集齐所有段后按顺序拼接,即可得到完整的长短信内容
内容的提问来源于stack exchange,提问作者Marek Wrzosowski
相关产品推荐
相关产品推荐

