如何通过自动化流程使用移动提供商 USSD 代码服务?

How to use a mobile provider's UUSD code service via an automated process?

如果我有移动运营商的 SIM 卡 - 例如南非的 Vodacom,我可以通过拨打 *111# 使用他们的 USSD 服务。然后我可以使用我的移动 phone 键盘浏览选项。

我想创建一个自动执行此操作的脚本。有办法吗?

我发现这在 Android 应用程序 (Make USSD call in android) 上是可行的。有没有一种方法可以在不先从该运营商购买 SIM 卡的情况下使用该运营商的 UUSD 服务? (即 运行 来自 http/tcp 上的服务器)。

要访问 USSD 菜单,您需要连接到移动网络。 USSD 不是互联网,甚至也不是数据网络。 USSD 在移动信令网上传输。因此,您需要有一张 SIM 卡。

要通过脚本在 USSD 菜单上导航,您可能需要几个步骤。

  • 您需要将 GSM 设备连接到您的计算机。 USB 调制解调器可以,但所有调制解调器都没有此功能。我一直在使用华为180E型号。

  • 您需要通过串行线路与调制解调器通信。在 Linux 上,USB 调制解调器可以作为 tty 设备访问,通常在 /dev/ttyUSB0 上(没有绝对规则:一些型号只定义 2 个设备,一些模型定义 4 个)。对于测试,您可以使用一些终端软件。我使用 miniterm.py,一个 Python 程序,但 minicom 可能和许多其他程序一样正常。对于自动化,您可能需要一个适合您首选语言的串行库。在命令行上,有 atinout 但我没有设法使其正常工作, socat - /dev/ttyUSB0 应该也可以。

  • 最后,要与您的调制解调器通话,您需要使用 Hayes Modem AT 命令。您可以阅读 AT 命令参考 [3GPP 27.007][1],第 7.15 章以获得正式文档,但基本上,发送到调制解调器(没有 #... 部分):

    ATZ                     # to reset the modem
    AT+CUST=2               # to close any ongoing USSD session
    AT+CUSD=1,"#111#",15    # to initiate the navigation
    

    如果你得到了菜单,那很好;如果不是,好吧,事情并不绝望,但它可能会更加困难,因为您可能需要使用字符编码。

    [1]: https://www.etsi.org/deliver/etsi_ts/127000_127099/127007/10.03.00_60 (/ts_127007v100300p.pdf