larvitsmpp

0.4.0 • Public • Published

Build Status Dependencies Coverage Status

Larv IT SMPP

This is a simplified implementation of the SMPP protocol.

Installation

npm install larvitsmpp

Client

Simplest possible

This will setup a client that connects to localhost, port 2775 without username or password and send a message.

const larvitsmpp = require('larvitsmpp');
 
larvitsmpp.client(function(err, clientSession) {
    clientSession.sendSms({
        'from': '46701113311',
        'to': '46709771337',
        'message': 'Hello world'
    });
 
    // Gracefully close connection
    clientSession.unbind();
});

Some connection parameters and DLR

This will setup a client that connects to given host, port with username and password, send a password and retrieve a DLR and with a custom log driver, compatible with winston.

const larvitsmpp = require('larvitsmpp');
const LUtils = require('larvitutils');
const lUtils = new LUtils();
const log    = new lUtils.Log('debug');
 
larvitsmpp.client({
    'host':     'smpp.somewhere.com',
    'port':     2775,
    'username': 'foo',
    'password': 'bar',
    'log':      log
}, function(err, clientSession) {
    if (err) {
        throw err;
    }
 
    clientSession.sendSms({
        'from':    '46701113311',
        'to':      '46709771337',
        'message': '«baff»',
        'dlr':     true
    }, function(err, smsId, retPduObj) {
        if (err) {
            throw err;
        }
 
        console.log('Return PDU object:');
        console.log(retPduObj);
    });
 
    clientSession.on('dlr', function(dlr, dlrPduObj) {
        console.log('DLR received:');
        console.log(dlr);
 
        console.log('DLR PDU object:');
        console.log(dlrPduObj);
 
        // Gracefully close connection
        clientSession.unbind();
    });
});

Server

Simplest possible

This will setup a password less server on localhost, port 2775 and console.log() incomming commands.

const larvitsmpp = require('larvitsmpp');
 
larvitsmpp.server(function(err, serverSession) {
    if (err) {
        throw err;
    }
 
    serverSession.on('data', function(data) {
        console.log('command: ' + data.command);
    });
});

With auth and custom logging, returning smsId and DLR

Example code below:

const larvitsmpp = require('larvitsmpp');
const LUtils = require('larvitutils');
const lUtils = new LUtils();
const log    = new lUtils.Log('debug');
 
// This should of course be replaced with your preferred auth system
function checkuserpass(username, password, cb) {
    if (username === 'foo' && password === 'bar') {
        // The last parameter is just user meta data that will be attached to the session as "userData" and is optional
        cb(null, true, {'username': 'foo', 'userId': 123});
    } else {
        cb(null, false);
    }
}
 
larvitsmpp.server({
    'checkuserpass': checkuserpass,
    'log':           log
}, function(err, serverSession) {
    if (err) {
        throw err;
    }
 
    // Incoming SMS!
    serverSession.on('sms', function(sms) {
        // It is important to run the sms.resp() since this is a part of the protocol
        sms.sendResp(
            // Status code
            // Default is ESME_ROK == no error
            // See SMPP spec for all available status codes
            // For example: ESME_RINVDSTADR == "Invalid destination address".
            'ESME_ROK'
        );
 
        // Oh, the sms sender wants a dlr (delivery report), send it!
        if (sms.dlr === true) {
            sms.sendDlr(); // Equalent to sms.sendDlr('DELIVERED');
 
            // To send a negative delivery report for example do:
            sms.sendDlr('UNDELIVERABLE');
            // Possible values are:
            // SCHEDULED
            // ENROUTE
            // DELIVERED <-- Default
            // EXPIRED
            // DELETED
            // UNDELIVERABLE
            // ACCEPTED
            // UNKNOWN
            // REJECTED
            // SKIPPED
        }
    });
});

Session Events

connect

Triggered when the socket is connected to a client. This is server specific.

data

Triggered when data is comming in on the socket.

close

Triggered when the socket is closed.

error

Generic error event.

sms

Incoming SMS.

incomingPdu

Incoming PDU.

incomingPduObj

Incoming PDU Object. Same as incomingPdu, but it have been converted into an object instead of a buffer.

Session commands

send

Send a PDU to the remote.

Readme

Keywords

Package Sidebar

Install

npm i larvitsmpp

Weekly Downloads

55

Version

0.4.0

License

MIT

Unpacked Size

144 kB

Total Files

18

Last publish

Collaborators

  • lilleman