摘要:使用我用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命令时,每次我得到不同的结果。我没想到的东西,或者我没有要求的东西。例如:
当我们从手机上运行命令时,我们会更加有趣,我们会像预期的那样收回响应!无论我们运行多少次。我们得到了我们期望的独特回应。
我已经检查了什么: 我试过以下没有结果:
- 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对此有支持,但我仍然无法找到为什么这个命令本身不起作用。