问题
I have a USSD application that provides an interactive session for users, for example:
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 ...
I would like to test the USSD Server by using SMSLib to simulate the user.
Are there any example SMSLib code snippets that show how to perform an interactive USSD session with a USSD server?
回答1:
The code at this link gives an example of sending and receiving USSD data using smslib:
// 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(); } } }
来源:https://stackoverflow.com/questions/13268389/smslib-example-for-interactive-ussd-session