Sms 如何在SMPP中正确表示消息类

Sms 如何在SMPP中正确表示消息类,sms,network-protocols,gsm,smpp,Sms,Network Protocols,Gsm,Smpp,我目前正试图弄清楚sms类在SMPP中是如何正确表示的。然而,我现在完全被标准和它的文档搞糊涂了 在正常短信中,我们有 Class0:显示在显示屏上的闪存短信 类别1:存储在sim卡上或设备内部的正常短信 查看SMPP规范,我首先在submit\u sm操作中找到参数data\u coding,该参数用于设置通过MAP发送的DCS。据我所知,如果我们想要显式地设置消息类,我们需要将这个参数的前四位设置为1,然后两位表示编码,然后另外两位表示消息类。因此,对于Class1 Sms,我们将设置1

我目前正试图弄清楚sms类在SMPP中是如何正确表示的。然而,我现在完全被标准和它的文档搞糊涂了

在正常短信中,我们有

  • Class0:显示在显示屏上的闪存短信
  • 类别1:存储在sim卡上或设备内部的正常短信
查看SMPP规范,我首先在
submit\u sm
操作中找到参数
data\u coding
,该参数用于设置通过MAP发送的DCS。据我所知,如果我们想要显式地设置消息类,我们需要将这个参数的前四位设置为1,然后两位表示编码,然后另外两位表示消息类。因此,对于Class1 Sms,我们将设置
1111xx01
。到目前为止这是正确的吗

如果我们试图设置此DCS,但目前我们也将数据编码设置为“8位数据”。似乎有几部手机无法理解这一点。这是在任何地方指定的,我们可以只更改它,还是在发送其他消息类时需要特殊编码

当我们尝试使用SMPPv3.4推荐的设置消息类的方法时,会出现更多的混淆。由于3.4,在
submit\u sm
操作中有一个可选参数,称为
dest\u addr\u subunit
。根据标准,此参数应设置为0表示未知,1表示MS显示,2表示移动设备等。如果我看一下,与GSM消息类别相比,参数似乎移动了1。类0编码为1,类1编码为2,依此类推。这是正确的还是有更复杂的映射

另外,如果我们设置了
dest\u addr\u subunit
,我们还需要设置DCS吗,或者我们可以将此参数保留为默认值吗?

我建议阅读详细的DCS(数据编码方案)说明的规范

如果DCS位7654为00xx,则应检查DCS的位4

  • 位4==0-此消息没有消息类(保留位1和0)
  • 位4==1-位1和0包含消息类
因此,您应该根据3GPP TS 23.038规范设置数据\u编码SMPP参数,以正确处理消息类


默认情况下,GSM SMS消息没有消息类,这与消息类=1不同。

因此,如果我正确理解本文档,主要的混淆来自以下事实:消息类可以通过scheme
1111xxyy
表示,其中
xx
是编码,
yy
是消息类或方案
00c10xyy
其中
c
表示压缩
x
表示编码,
yy
表示消息类别。让我感到困惑的是,这两种方法似乎完全相同,在我们的例子中,其中一种似乎并不适用于所有设备。通常我使用以下表示:
0001ccmm
,其中
cc
是一种编码(
00
用于默认GSM)而
mm
是消息类``表示(
00
用于flash SMS)因此,对于7bit flash SMS,示例将是
00010000
。选项
11110cm
是可能的,但我从未在实践中使用过这个选项。我已经测试了
0001C00
,它对Android上的0级消息(“flash”消息)不起作用<代码>1111cc00按预期工作。