'USSD query issues

i am trying to make a simple ussd query to check balance and i have been struggling for hours. My brain hurts. this is my code

let serialportgsm = require('serialport-gsm')
const ussd = require('./node_modules/serialport-gsm/lib/functions/ussd.js');
let modem = serialportgsm.Modem();
ussd(modem);

let options = {
    baudRate: 115200,
    dataBits: 8,
    stopBits: 1,
    parity: 'none',
    rtscts: false,
    xon: false,
    xoff: false,
    xany: false,
    autoDeleteOnReceive: true,
    enableConcatenation: true,
    incomingCallIndication: true,
    incomingSMSIndication: true,
    pin: '',
    customInitCommand: '',
    cnmiCommand: 'AT+CNMI=2,1,0,2,1',
    logger: console
}


modem.open('/dev/ttyUSB0', options);

modem.on('open', () => {

    console.log(`Modem Sucessfully Opened`);

    modem.initializeModem(() => {

        modem.on('onNewIncomingUSSD', (data) => {
            console.log('onNewIncomingUSSD', {
                data
            });
        })

        async function main() {

            await modem.setModemMode(msg => {console.log('set pdu msg:', msg)}, 'PDU');

            let command = '*124#';
            try {
                let r = await modem.sendUSSD(command);
                console.log(r);
            } catch (err) {
                console.error(err);
                // handle the error here
            }
        }
        main();

    });
    

})

after running it,this is the output i get

Modem Sucessfully Opened
Modem Write: ATZ
Modem Received: ATZ
Activate Message Processing for: ATZ
Modem Received: 
Modem Received: OK
Call callback for: ATZ
Modem Write: ATE1
Modem Received: ATE1
Activate Message Processing for: ATE1
Modem Received: 
Modem Received: OK
Call callback for: ATE1
Modem Write: AT+CPIN?
Modem Received: AT+CPIN?
Activate Message Processing for: AT+CPIN?
Modem Received: 
Modem Received: +CPIN: READY
Call callback for: AT+CPIN?
Modem Received: 
Modem Received: OK
Modem Write: AT+CMEE=1;+CREG=2
Modem Received: AT+CMEE=1;+CREG=2
Activate Message Processing for: AT+CMEE=1;+CREG=2
Modem Received: 
Modem Received: OK
Call callback for: AT+CMEE=1;+CREG=2
Modem Write: AT+CLIP=1
Modem Received: AT+CLIP=1
Activate Message Processing for: AT+CLIP=1
Modem Received: 
Modem Received: OK
Call callback for: AT+CLIP=1
Modem Write: AT+CMGF=0
Modem Received: AT+CMGF=0
Activate Message Processing for: AT+CMGF=0
Modem Received: 
Modem Received: OK
Call callback for: AT+CMGF=0
Modem Write: AT+CUSD=1,"*124#",15
set pdu msg: { status: 'success', request: 'modemMode', data: 'PDU_Mode' }
Modem Received: AT+CUSD=1,"*124#",15
Activate Message Processing for: AT+CUSD=1,"*124#",15
Modem Received: 
Modem Received: +CME ERROR: 100

Then i tried changing the command to 7-bit gsm

*124# --> 2A31323423

and i get this output

Modem Sucessfully Opened
Modem Write: ATZ
Modem Received: ATZ
Activate Message Processing for: ATZ
Modem Received: 
Modem Received: OK
Call callback for: ATZ
Modem Write: ATE1
Modem Received: ATE1
Activate Message Processing for: ATE1
Modem Received: 
Modem Received: OK
Call callback for: ATE1
Modem Write: AT+CPIN?
Modem Received: AT+CPIN?
Activate Message Processing for: AT+CPIN?
Modem Received: 
Modem Received: +CPIN: READY
Call callback for: AT+CPIN?
Modem Received: 
Modem Received: OK
Modem Write: AT+CMEE=1;+CREG=2
Modem Received: AT+CMEE=1;+CREG=2
Activate Message Processing for: AT+CMEE=1;+CREG=2
Modem Received: 
Modem Received: OK
Call callback for: AT+CMEE=1;+CREG=2
Modem Write: AT+CLIP=1
Modem Received: AT+CLIP=1
Activate Message Processing for: AT+CLIP=1
Modem Received: 
Modem Received: OK
Call callback for: AT+CLIP=1
Modem Write: AT+CMGF=0
Modem Received: AT+CMGF=0
Activate Message Processing for: AT+CMGF=0
Modem Received: 
Modem Received: OK
Call callback for: AT+CMGF=0
Modem Write: AT+CUSD=1,"2A31323423",15
set pdu msg: { status: 'success', request: 'modemMode', data: 'PDU_Mode' }
Modem Received: AT+CUSD=1,"2A31323423",15
Activate Message Processing for: AT+CUSD=1,"2A31323423",15
Modem Received: 
Modem Received: OK
Call callback for: AT+CUSD=1,"2A31323423",15
Modem Write: AT+CNMI=2,1,0,2,1
{ status: 'success', request: 'ussd', data: 'OK' }
Modem Received: AT+CNMI=2,1,0,2,1
Activate Message Processing for: AT+CNMI=2,1,0,2,1
Modem Received: 
Modem Received: OK
Call callback for: AT+CNMI=2,1,0,2,1
Modem Received: 
Modem Received: +CUSD: 2
onNewIncomingUSSD {
  data: {
    status: 'Incoming USSD',
    data: {
      text: undefined,
      follow: 'terminated by network',
      followCode: '2'
    }
  }
}

'terminated by network'. I am not getting the balance message. I tried *124# on my mobile device too and it's a valid USSD. is there anything i am doing wrong? Please help

EDIT i am using this library btw : https://github.com/zabsalahid/serialport-gsm



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source