how to get balance by USSD commands?

motevalizadeh picture motevalizadeh · Aug 29, 2013 · Viewed 23.8k times · Source

I have tired to search how to send USSD command on Google. I want to check may balance from operator.

All of the samples I have seen use commands like this:

 "AT+CUSD=1,\"*140*1#\"\r\n";

It seems to be correct. I am using something like this that I think works. I have a D-Link GSM modem, and when I send this command using it, it makes some noise on my speaker, which I believe tells me something happened.

my modem have it's own windows application when i disconnected modem by my own application,i check it by modem's application and in USSD tab i can found the result of my commands that i sent by myself application.

then that command works fine but i 'm confuse what is happens when i sent my command it return me "OK" and do not return operator answer and how my modem's application can read that answer????????

i test these commands but can not get result and my modem just return somethings like this: "AT+CUSD=1,\"*140*1#\"\r\n\OK\r\n" only.

1) "AT+CUSD=1,\"*140*1#\",15\r\n"

2) "AT+CUSD=1,\"*140*1#\",1\r\n"

3) "AT+CUSD=1,\"*140*1#\",15\r"

4) "AT+CUSD=1,\"*140*1#\",1\r"

5) "AT+CUSD=1,\"*140*1#\""

i think reading command's result maybe has difference command or i should set some config on my modem .

it is very interesting for me that my modem do not return error to me and always return OK.

Answer

Onsongo Moseti picture Onsongo Moseti · Sep 30, 2013

You need to set the Message format to AT+CMGF=0, before sending your USSD Command. This is PDU Mode (http://www.smartposition.nl/resources/sms_pdu.html). I was stumped using AT+CMGF=1, which is Text mode, before I decided to try AT+CMGF=0.

Worked like Magic.

So:

  1. Set Message Format to PDU (AT+CMGF=0)
  2. Execute Your USSD Command (AT+CUSD=1,*544*2*3#,15) - example message
  3. Read response from the Port.

I am assuming that you know already how to form your AT Commands and Read the response from the Port.