Quicklinks
USSD stands for Unstrcutured Supplementary Services Data. It is a way of sending short commands from the mobile phone to the GSM network. It uses, like SMS, the signalling channel of the GSM connection. Unlike SMS, it does not use a store and forward architecture, but a session oriented connection. USSD text messages can be up to 182 bytes in length. Messages received on the mobile phone are not stored.
USSD is defined within the GSM standard in the documents:
USSD is most used to make it easy for the (prepaid) mobile user to query his prepaid balance using his mobile phone. It can also be used in mobile payments systems and information services such as weather forecasts and traffic information.
The plain SMPP protocol does not support the delivery of USSD data. To send USSD data you have to use a TLV parameter. TLV parameters were added to version 3.4 of the SMPP protocol to extend the protocol with enhanced features. TLV stands for Tag-Length-Value. A TLV parameters consists out of three fields, the first field, the tag specifies which option is used. The second parameter (Length) specifies the lengt of the Value field in bytes, and the Value field holds the actual value.
To send USSD requests and receive USSD notifications over SMPP, you have to use the "ussd_service_op" TLV parameter. If you want to send USSD requests over GSM click here.
The "ussd_service_op" parameter is defined as follows:
| Field | Size Octets | Type | Description |
| Parameter Tag | 2 | Integer | 0x0501 |
| Length | 2 | Integer | Length of value part in octets |
| Value | 1 | Integer | This value can be one of the following values: 0 = PSSD Indication 1 = PSSR Indication 2 = USSR Request 3 = USSN Request 4 to 15 = Reserved 16 = PSSD Response 17 = PSSR Response 18 = USSR Confirm 19 = USSN Confirm 20 to 31 = Reserved 32 to 255 = Vendor specific operations |
To send an USSD request, you have to send a submit_sm packet with this TLV with value "2". When you receive a deliver_sm packet with this TLV in response, the value will be "18".
The following code demonstrates how to send an USSD request using the SMS and MMS Toolkit:
Option Explicit Dim objSmsProtocol Dim objSmsMessage Dim objSmsConstants Dim strMessageReference Set objSmsProtocol = CreateObject ( "ActiveXperts.SmsProtocolSmpp" ) Set objSmsMessage = CreateObject ( "ActiveXperts.SmsMessage" ) Set objSmsConstants = CreateObject ( "ActiveXperts.SmsConstants" ) Wscript.Echo "ActiveXperts SMS and MMS Toolkit " & objSmsProtocol & " demo." Wscript.Echo "Expiration date: " & objSmsProtocol.ExpirationDate & vbCrLf ' Set server properties objSmsProtocol.Server = "localhost" ' Set this to your own SMPP server address objSmsProtocol.ServerPort = 2775 ' Set this to your own SMPP serve port objSmsProtocol.SystemID = "AX008" objSmsProtocol.SystemPassword = "812056" objSmsProtocol.SystemType = "SMPP" objSmsProtocol.ServerTimeout = 5000 objSmsProtocol.SystemMode = objSmsConstants.asSMPPMODE_TRANSCEIVER ' Set Logfile objSmsProtocol.LogFile = "c:\SmppLog_vbs_tlv.txt" ' Connect SMPP provider objSmsProtocol.Connect If objSmsProtocol.IsConnected = True Then objSmsMessage.Recipient = "+31638740160" objSmsMessage.Data = "*#100#" ' USSD Request objSmsMessage.ServiceType = "USSD" objSmsProtocol.SetTLVValue objSmsConstants.asSMPP_TLV_1BYTE, &H501, 2 WScript.Echo "Sending the message..." strMessageReference = objSmsProtocol.Send ( objSmsMessage ) ' Send the message End If ' Show the result If( objSmsProtocol.LastError <> 0 ) Then WScript.Echo "Failed to send message, error: " & objSmsProtocol.LastError & " (" &_ & objSmsProtocol.GetErrorDescription( objSmsProtocol.LastError ) & ")" WScript.Echo "To view the trace file, open " & objSmsProtocol.LogFile & "." Else WScript.Echo "Message successfully submitted" & vbCrLf & vbCrLf & "Message ID : " & strMessageReference End If objSmpp.Disconnect ' Disconnect WScript.Echo "Disconnected."
There are many working samples included with the product. You can also find them on the ActiveXperts FTP site: ftp.activexperts-labs.com/samples/mobile-messaging-component.