You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:15:02