5

我正在与一家公司合作,该公司正试图使用​​各种语言向世界各国的人们发送 SMS 消息。

该公司有一个自定义编写的应用程序,它使用 SMPP 协议与各种电信公司的 SMSC 进行通信。

不同的电信公司已告知我们使用哪种 data_encoding 将 SMPP PDU 提交给 SMSC。

目前我们使用 7 位 GSM)、Latin-1 和 UCS-2 编码。我们正在使用每个电信公司告诉我们使用的编码。提交 SMPP PDU 的有效载荷已编码,并相应地设置 data_coding 参数(GSM 为 0x00,Latin-1 为 0x03,UCS-2 为 0x08)。

问题 1:我们用于向 SMSC 提交 SMPP PDU 的编码是否真的很重要?SMSC 不应该能够根据 data_coding 参数的内容从提交的 SMPP 编码转换为适当的编码吗?难道我们不能通过 SMPP 作为 UCS-2 提交所有消息,将 data_coding 参数设置为 0x08,并让 Telco 为我们处理到 SMS PDU 的转换吗?

目前,我们发送想要发送葡萄牙语短信。电信公司告诉我们使用 SMPP 的“SMSC 默认字母”来提交消息。进一步追问,他们说这与 GSM 默认字母表相同。这是令人担忧的,因为葡萄牙语字母表并未完全由 GSM 默认字母表表示。电信公司似乎只是将葡萄牙语字母音译为英语等价物。电信公司通知我们,“如果您发送带有 SMSC 无法识别的特殊字符(例如á、ó、ã)的 SMS,SMSC 会将这些字符编码为可能的最接近的字符。” 我觉得这有点不可能,因为 GSM 默认字母首先不支持这些字符。

问题2:如果使用GSM Default Alphabet,如何提交特殊字符,然后无法识别?作为 GSM 默认字母表提交的所有字符不应该符合 GSM 03.38 标准中定义的 7 位、128 个字母的字母表吗?

问题 3:由于电信公司要求我们使用“GSM 默认字母”,我们应该提交编码为 7 位压缩八位字节的 SMPP 有效负载,对吗?

我们的应用程序将文本存储为 UTF-8。由于葡萄牙电信公司要求我们提交带有包含 GSM 默认字母表的有效负载的 SMPP,我认为我们需要将 UTF-8 转换为 7 位 GSM 默认字母表。我目前的策略包括按值映射每个具有 GSM 默认等效值(总共 128 个字符)的 UTF-8 字符,然后将其他 UTF-8 字符音译为最接近的 GSM 默认字母等效值,否则使用问号。

问题 4:这是处理从 UTF-8 转换为 GSM 默认字母表的适当方法吗?似乎没有很多其他方法。有问题的应用程序在 Unix 环境中使用 Ruby。似乎没有支持 GSM 的现有库可用,因此自定义库似乎是唯一的方法。

我的研究发现了 GSM 锁定移位表的细节,以支持仅使用 7 位的其他语言。锁定移位表在 SMS PDU 的 UDH 部分中指定。

问题 5:如何通过 SMPP 使用锁定班次表发送 SMS 消息?是否需要修改 SMPP PDU 有效负载以包含指定锁定移位表的 UDH?data_coding 参数应该设置为什么?

如果有人能权威地回答这些问题,我会很高兴。

4

0 回答 0