larvitsmpp
v0.4.0
Published
Simplified SMPP implementation
Downloads
73
Readme
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.