2

我有一个为用户提供交互式会话的 USSD 应用程序,例如:

User> Dial USSD Shortcode
Serv> Return Main Menu
User> Select Option 1, e.g. "View Movie Times"
Serv> Return List of Cities
User> Select Option 3, e.g. Mumbai
Serv> Return List of Cinemas
User> etc ...

我想通过使用 SMSLib 来模拟用户来测试 USSD 服务器。

是否有任何示例 SMSLib 代码片段显示如何与 USSD 服务器执行交互式 USSD 会话?

4

1 回答 1

2

链接中的代码给出了使用 smslib 发送和接收 USSD 数据的示例:

// SendUSSD.java - Sample application.
//
// This application shows you the basic procedure for sending messages.
// You will find how to send synchronous and asynchronous messages.
//
// For asynchronous dispatch, the example application sets a callback
// notification, to see what's happened with messages.

package examples.modem;

import org.smslib.AGateway;
import org.smslib.AGateway.Protocols;
import org.smslib.IUSSDNotification;
import org.smslib.Library;
import org.smslib.Service;
import org.smslib.USSDResponse;
import org.smslib.modem.SerialModemGateway;

public class SendUSSD
{
        public void doIt() throws Exception
        {
                Service srv;
      USSDNotification ussdNotification = new USSDNotification();
                System.out.println("Example: Send USSD Command from a serial gsm modem.");
                System.out.println(Library.getLibraryDescription());
                System.out.println("Version: " + Library.getLibraryVersion());
                srv = new Service();
                SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM4", 19200, "Huawei", "E220");
                gateway.setProtocol(Protocols.PDU);
      gateway.setInbound(true);
                gateway.setOutbound(true);
                gateway.setSimPin("0000");
      srv.setUSSDNotification(ussdNotification);
                srv.addGateway(gateway);
                srv.startService();
                System.out.println();
                System.out.println("Modem Information:");
                System.out.println("  Manufacturer: " + gateway.getManufacturer());
                System.out.println("  Model: " + gateway.getModel());
                System.out.println("  Serial No: " + gateway.getSerialNo());
                System.out.println("  SIM IMSI: " + gateway.getImsi());
                System.out.println("  Signal Level: " + gateway.getSignalLevel() + "%");
                System.out.println("  Battery Level: " + gateway.getBatteryLevel() + "%");
                System.out.println();

      String resp = gateway.sendUSSDCommand("*888#"); // not working
//      String resp = gateway.sendCustomATCommand("AT+CUSD=1,\"*888#\",15\r"); // working
      System.out.println(resp);

      System.out.println("Now Sleeping - Hit <enter> to terminate.");
                System.in.read();
                srv.stopService();
        }

   public class USSDNotification implements IUSSDNotification
   {
      public void process(AGateway gateway, USSDResponse response) {
                        System.out.println("USSD handler called from Gateway: " + gateway.getGatewayId());
                        System.out.println(response);
      }
   }

        public static void main(String args[])
        {
                SendUSSD app = new SendUSSD();
                try
                {
                        app.doIt();
                }
                catch (Exception e)
                {
                        e.printStackTrace();
                }
        }
}
于 2012-11-09T20:33:05.217 回答