从华为调制解调器通过AT命令执行USSD不会产生预期的结果

时间:2016-10-30 09:20:06

标签: gsm at-command ussd

摘要:使用我用javascript(node.js)编写的程序,为特定的MNO(移动网络运营商)服务发送USSD命令不会返回预期的输出。令我惊讶的是,命令返回'OK'并且输出是可读的,但它不是我要求的。使用相同的程序,如果我发送MNO的其他命令,比如检查可用余额,我会得到预期的输出。

详细信息: 我运行以下命令(来自putty和我的程序)发送USSD代码:

AT+CUSD=1,"GSM ENCODED STRING",15

我得到了一些东西:

+CUSD: 0,"GSM ENCODED STRING",15

我们编写了一个npm模块,用于编码和解码GSM 7位类型的USSD(ussd-pdu-text-converter)并使用相同的模块,我们可以对USSD命令进行编码,并将从MNO返回的消息解码为人 - 可读格式。

运行USSD可以正常运行MNO提供的操作,例如检查可用余额。我们发送USSD,并收到包含我们所需信息的回复。无论我们运行命令多少次,我们都会获得相同的输出。

当我们想要使用MNO提供的第三方服务(类似于来电回铃音或CRBT)时,问题就出现了。当我使用putty和我们的程序为这样的服务运行USSD命令时,每次我得到不同的结果。我没想到的东西,或者我没有要求的东西。例如:

  • 您没有使用此服务的余额
  • 您尚未注册此服务
  • 您的余额为AFN 3000。
  • 您的余额为AFN 40。

当我们从手机上运行命令时,我们会更加有趣,我们会像预期的那样收回响应!无论我们运行多少次。我们得到了我们期望的独特回应。

我已经检查了什么: 我试过以下没有结果:

- AT+CSCS="IRA"
- AT+CSCS="UCS2"
- AT+CSCS="GSM"
- AT+CUSD=1,"GSM ENCODED COMMAND"
- AT+CUSD=1,"GSM ENCODED COMMAND",15
- AT+CUSD=1,"GSM ENCODED COMMAND",32

我的问题:

手机可能认为在我们的程序中没有做的情况/算法是什么,因此我们得到了奇怪的输出?有什么建议怎么解决?

更新:我可以解决这个问题,并将ussd命令分解为两步USSD命令,当然MNO对此有支持,但我仍然无法找到为什么这个命令本身不起作用。

0 个答案:

没有答案