MDD Sim Gateway v1.3.14
新增:超长短信自动合并
超过一条短信长度的文本,现在会作为一条完整消息收到,不再是散开的好几条。
运营商的短信中心会把长文本拆成多条独立的 SMS-DELIVER,每条带一个说明"我是第几段"的头部(UDH)。引擎里的 Asterisk 其实已经解出了这个头部,却直接丢弃,于是每一段都变成了独立的一条消息——而且顺序还是乱的(分段不保证按顺序送达),每一段各推送一次通知。
现在引擎会把分段的 编号/总数/序号 暴露出来,控制面据此缓冲并拼回原文,只入库一次、只通知一次。
其他行为:
- 重复推送会被吸收:运营商没收到确认时会重推分段,不会因此产生重复消息,也不会让同一条消息被拼装两次。
- 缺段不会丢:某一段始终没到的话,三分钟后仍会把已收到的内容入库,缺口用
[…]标出,而不是无限期扣住。 - 单条短信不受影响:普通短信不带分段头部,走的还是原来的代码路径。
升级提示:此功能需要重新构建引擎镜像。控制面可以先单独升级——旧引擎不发送分段字段,控制面会按单条处理,行为与升级前一致,两边可以分开部署。
Added: multi-part SMS reassembly
A text longer than one SMS now arrives as one message instead of several.
The SMSC splits such a text into separate SMS-DELIVER PDUs, each carrying a User Data Header saying which part it is. Asterisk already unpacked that header and then discarded it, so every part surfaced as its own message — out of order, since parts are not delivered in sequence, each raising its own notification.
The engine now exposes each part's reference/total/sequence, and the control plane buffers the parts until the whole text can be assembled, then stores and notifies once.
- Re-pushed parts are absorbed. Parts a carrier re-sends when an acknowledgement is missed cannot duplicate a message or complete a group twice.
- A missing part does not lose the message. After three minutes the rest is stored with the gap marked
[…]rather than held indefinitely. - Single-part SMS is untouched. An ordinary message carries no concatenation header and takes exactly the previous code path.
Upgrade note: this requires a rebuilt engine image. The control plane can be updated on its own — an older engine sends no segment fields and is treated as single-part, so the two halves deploy independently.
Full Changelog: v1.3.13...v1.3.14