SMPP提交长消息和消息拆分

 yueloong 发布于 2023-02-03 10:47

我们正在使用SMPP cloud-hopper库将SMS长消息短信发送到SMS网关 Innovativetxt.com,但看起来我们拆分后的长消息TO 140字节各部分.每条消息中的字符数达到134个字符.

但是行业标准是一种153字符应为GSM编码长消息的每一部分.当我们通过140字节分割时,只有134个字符,我们做错了吗?如果我们尝试提交大于140字节的消息,网关提供商会使用消息超大邮件正文拒绝它.

应将消息拆分为每个153个字符,然后再分配给SMSC,而不是每个消息140字节.

拆分长消息的最佳方法是什么?通过消息大小,即140字节或消息字符计数?

任何人都可以通过cloudhopper或其他基于Java的库来解决相同的问题.

1 个回答
  • 这是一个常见的混乱.你正在做的一切正确.消息长度可以是160个字符(7位GSM 03.38),140个字符(8位拉丁语),70个字符(16位UCS-2).注意:160*7 == 140*8 == 70*16.

    拆分长消息时,其他信息(如总部件号和部件索引)将存储在消息正文中,即所谓的用户数据头(UDH).此标题也会发生.因此,使用UDH,您可以使用153个GSM字符(7位),134个字符/字节(8位)有效负载或67个2字节 - unicode字符(16位)

    另请参见http://www.nowsms.com/long-sms-text-messages-and-the-160-character-limit

    对于Contatenated消息8位,UDH长度为6个字节,与您的情况相同.

    UDH结构

    0x05: Length of UDH (5 bytes to follow)
    0x00: Concatenated message Information Element (8-bit reference number)
    0x03: Length of Information Element data (3 bytes to follow)
    0xXX: Reference number for this concatenated message
    0xYY: Number of fragments in the concatenated message
    0xZZ: Fragment number/index within the concatenated message
    
    Total message length, bits: 160*7 = 140*8 = 1120
    UDH length, bits: 6*8 = 48
    Left payload, bits: 1120-48 = 1072
    
    For GSM 03.38 you get 1072/7 = 153 GSM (7-bit) chars + 1 filling unused bit.
    For Latin you get 1072/8 = 134 (8-bit) chars.
    For UCS-2 you get 1072/16 = 67 (16-bit) chars.
    

    如您所见,153个GSM字符等于134个字节减去1个比特.这些134个字符可能就是Java报告的内容.但是,一旦分割了长文本消息,最终会得到包含文本和UDH的二进制消息.你应该将消息视为二进制.我建议你从结果部分中进行二进制转储并进行调查.

    2023-02-03 10:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有