Sending Multi part message with AT Commands & PDU Mode Node.js

29 views Asked by At

Im attempting to send a multi part message with at commands, single part works fine and so do special characters but when its multi part so more than 160 characters it says its sent but nothing is received.

async  sendSMS(msisdn, message) {
    message += " ";
    
    // Determine if message uses characters outside the GSM 7-bit default alphabet
    const useUCS2 = !isGSMCharacterSet(message);

    // Set character set based on message content
    const characterSet = useUCS2 ? GSM.CharacterSet.UCS2 : GSM.CharacterSet.GSM;
    await this.setCharacterSet(characterSet);

    await this.setMessageFormat(GSM.MessageFormat.PDU);

    // Generate PDUs for the message. Assume generateSubmit handles segmentation if needed.
    const encoding = useUCS2 ? 'ucs2' : 'gsm';
    const pdus = smsPdu.generateSubmit(msisdn, message, { encoding });

    // Send each PDU segment sequentially
    const results = [];
    for (const pdu of pdus) {
        // Send length of the PDU in bytes, not the message length
        let length = pdu.length
        
        await this.runCommand(`AT+CMGS=${length}`);
        // Send the PDU and store the result
        const result = await this.runCommand(`${pdu.hex}${CTRL_Z}`);
        if (result.startsWith('+CMGS:')) {
            console.log('Segment sent successfully:', result);
        } else {
            console.error('Error sending segment:', result);
            break; // Consider handling this situation more gracefully
        }
        await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 2 seconds before sending the next part
        results.push(result);
    }

    return (results, pdus);
}

Thats my code to send commands its a fork of NodeGSM Module and im using node-sms-pdu to create the pdu This is the response from the server including the pdus but nothing is received Sending SMS COM18 79429010 testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest

Segment sent successfully: +CMGS: 149 Segment sent successfully: +CMGS: 150 Checking status for COM17 Sending SMS COM18 79429010 testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest

Segment sent successfully: +CMGS: 149 Segment sent successfully: +CMGS: 150 Checking status for COM17

response2: [ { buffer: <Buffer 00 41 00 08 81 97 24 09 01 00 00 a0 05 00 03 00 02 01 e8 e5 39 9d 5e 9e d3 e9 e5 39 9d 5e 9e d3 e9 e5 39 9d 5e 9e d3 e9 e5 39 9d 5e 9e d3 e9 e5 39 9d ... 102 more bytes>, hex: '0041000881972409010000A0050003000201E8E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9E5399D5E9ED3E9', length: 151, encoding: 'gsm' }, { buffer: <Buffer 00 41 00 08 81 97 24 09 01 00 00 17 05 00 03 00 02 02 ca 73 3a bd 3c a7 d3 cb 73 3a bd 3c a7 83 00>, hex: '004100088197240901000017050003000202CA733ABD3CA7D3CB733ABD3CA78300', length: 32, encoding: 'gsm' } ]

Message sent successfully to 79429010 from COM18. Message sent successfully to 79429010 from COM18.

Tried changing the timings between each message, changed the different modes, changed formatting of number or message and still nothing

1

There are 1 answers

0
Paul Azzopardi On

Solved - Issue was that node-gsm-pdu wasnt creating unique reference numbers, so i just changed the value from 00 to unique numbers everytime.