npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

websmscom

v1.0.3

Published

Send text or binary SMS messages over websms.com.

Downloads

96

Readme

websmscom.js

SMS text/binary messaging tool for node.js

websmscom.js module provides an easy-to-use API for sending SMS text and binary messages through websms.com API (https://api.websms.com) and is also usable as command line tool directly from bash.

An example code of how to use this nodejs module in your own scripts can be found in examples/send_sms.js .

Features:

  • Text Messages
  • Binary Messages
  • Confirmation of Delivery
  • Answers to SMS can be forwarded
  • Usable in modules and from command line

See websms.com website to register for an account.

For general API specification of the server (nodejs independent) visit: https://api.websms.com

Installation

Install with npm:

$ npm install websmscom

also see INSTALL file

Test

test for successful installation

$ npm test websmscom

Usage

  1. require
var websms = require('websmscom');
  1. Create a client object (once)
var myClient = new websms.Client(gatewayUrl, username, password);
  1. Create a Message object (or many)
var myMessage = new websms.TextMessage(recipientAddressList, unicodeMessageText, [creationFailedCallback]);
  1. Send Message object over Client
myClient.send(myMessage, maxSmsPerMessage, isTest, callback);

Parameters explained:

  • gatewayUrl : {string} URL used to connect to websms API like 'https://api.websms.com'

  • username : {string}username used in basic authentication. This is your websms.com account username

  • password : {string} password used in basic authentication This is your websms.com account password

  • recipientAddressList : {Array} of strings containing message recipient mobile numbers (MSISDN) like ['4367612345678','4369912345678']

  • unicodeMessageText : {string} messageContent string sent that will be included in JSON object and sent as charset utf-8 to API. Special characters should be escaped as unicode. Euro sign is \u20AC.

  • creationFailedCallback : {Function} function that is called when creation of message failed

  • maxSmsPerMessage : {Number} integer number 1-255 telling how many concatenated sms parts are the limit for sending this message. (in case the text is longer than what fits into multiple sms)

  • isTest : {boolean} false to really send sms. true to just test interface connection and process

  • callback : {Function} callback at error or success


Full Example

Send a TextMessage

var websms = require('websmscom');
var myMessage;

// Set your account data
username              = "your_username";
password              = "your_password";
gatewayUrl            = "https://api.websms.com";
recipientAddressList  = ['4367612345678'];
unicodeMessageText    = 'Willkommen zur BusinessPlatform SDK von websms.com! Diese Nachricht enth\u00E4lt 160 Zeichen. Sonderzeichen: \u00E4\u00F6\u00FC\u00DF. Eurozeichen: \u20ac. Das Ende wird nun ausgez\u00E4hlt43210';
maxSmsPerMessage      = 1;
isTest                = true; // true: do not send sms for real, just test interface

// 1. Create a client object
var myClient = new websms.Client(gatewayUrl, username, password);

// 2. Create a Message object
try {

  myMessage = new websms.TextMessage(recipientAddressList, unicodeMessageText, creationFailedCallback);

} catch (e) {

  console.log('Caught message creation error: ', e.message, e.stack);
  return;

}

// 3. Send Message object over Client
myClient.send(myMessage, maxSmsPerMessage, isTest, callback);

// Finished


function callback(errorObject, apiResponse) {
  console.log(ApiReponse, apiResponse);
}

You can also prevent the throwing of exceptions by just setting

websms.doThrowMessageCreationError = false;

Create a BinaryMessage

This example sends 2 sms messages as one concatenated message, using a user data header (first 6 bytes):

See [http://en.wikipedia.org/wiki/Concatenated_SMS]

var segment_1 = new Buffer([0x05,0x00,0x03,0xfc,0x02,0x01, 0x5a,0x75,0x73,0x61,0x6d,0x6d,0x65,0x6e]).toString('base64');
var segment_2 = new Buffer([0x05,0x00,0x03,0xfc,0x02,0x02, 0x67,0x65,0x66,0xc3,0xbc,0x67,0x74,0x2e]).toString('base64');

var messageContentSegments = [segment_1, segment_2];
var userDataHeaderPresent  = true;

var binaryMessage = new websms.BinaryMessage(recipientAddressList, messageContentSegments, userDataHeaderPresent, creationFailedCallback);

From Command Line

In case you installed it globally, it can also be used as a command line tool:

$ npm install -g websmscom
$ websmscom --send --u myUsername --p myPassword --r=43676123456789,43699123456789 --m="Service X is strill running!"
USAGE:

   node websmscom <parameters>

   You can also write parameters like this: --id="--sample id--" or --v=false

 Parameter:

   --h, --help          this screen      (flag)
   --send               Send SMS         (flag)
   --moduletest         Run module tests (flag)

   --u "<username>"     Authentication user name
   --p "<password>"     Authentication password
   --r "<recipients>"   Comma-delimited recipient list
                        like: --r 4367612345678,4367612345679
   --m  "<message>"     Text Message in unicode. Eurosign is e.G. \u20ac

   --t                              (optional) Do not send sms, just test interface (flag)
   --v                              (optional) Verbose flag
   --s "<senderAddress>"            (optional) Sender Address (needs to be set for account)
   --st "<senderAddressType>"       (optional) type of sender address
   --f                              (optional) send as flash sms (flag)
   --c "<notificationCallbackUrl>"  (optional) notificationCallbackUrl
   --id "<clientMessageId>"         (optional) custom message id attached to message
   --pri <int>                      (optional) message priority 1-9
   --max <int>                      (optional) MaxSmsPerMessage, default: 1
   --g "<gatewayUrl>"               (optional) gateway url different from https://api.websms.com

Quick Message Construction

You don't need to use setter methods, it's also possible create a message with all properties at once:

myMessage = new websms.TextMessage({
       'recipientAddressList'    : recipientAddressList,
       'messageContent'          : "Hello World!",
       'senderAddress'           : "AlphanumericSender",
       'senderAddressType'       : 'alphanumeric',  // also possible values: 'shortcode', 'international', 'national
       'sendAsFlashSms'          : true,
       'priority'                : 1,
       'notificationCallbackUrl' : 'https://my_server_for_send_notification',
       'clientMessageId'         : "My custom message id",
       'callback'                : callback
    });

Callback function format

transferredCallback(apiResponse, messageObject)

function (apiResponse, messageObject) {
    console.log("\n---- transferredCallback function called with ApiResponse:\n", apiResponse);
    console.log('\n---- Related messageObject:\n', messageObject);
    var statusCode      = apiResponse.statusCode;
    var statusMessage   = apiResponse.statusMessage;
    var transferId      = apiResponse.transferId;
    var clientMessageId = apiResponse.clientMessageId;
};

notTransferredCallback(errorObj, messageObject)

function (errorObj, messageObject){

    console.log("\n---- notTransferredCallback function called.\n");

    if (errorObj.cause === 'parameter' ||
        errorObj.cause === 'authorization' ||
        errorObj.cause === 'connection' ||
        errorObj.cause === 'unknown') {
    
        console.log(errorObj.message);
        //console.log("\n---- errorObj:\n", errorObj);
        
    } else if (errorObj.cause === 'api') {
    
        // API responded, but some limit was hit 
        // statusCode and statusMessage are readable,
        // see API docs for codes
        var apiResponse = errorObj.apiResponse;
        
        var statusCode    = apiResponse.statusCode;
        var statusMessage = apiResponse.statusMessage;
        
        console.log('\n---- apiResponse:\n', apiResponse);
    }
    console.log('\n---- Related messageObject:\n', messageObject);
};

creationFailedCallback(errorObj, incompleteMessageObject)

function (errorObj, incompleteMessageObject) {
    console.log("\n---- creationFailedCallback function called with errorObj:\n", errorObj);
    console.log("incompleteMessageObject:", incompleteMessageObject);
};

Properties

websms.isDebug = true/false

boolean - set to true to see more logging. Logging is done via function websms.log which you can overwrite

websms.doThrowMessageCreationError = true/false

boolean - set to false if you do not want to have thrown errors at message creation (creationFailedCallback is called everytime then given)

Functions

websms.log

passes arguments to console.log() when websms.isDebug = true

Classes

Client

new websms.Client(gatewayUrl, user, password)

Methods/Functions
 Client.send(messageObject, maxSmsPerMessage, isTest, transferredCallback, notTransferredCallback)
 

TextMessage

new websms.TextMessage(recipientAddressList, messageContent, creationFailedCallback)

Methods/Functions
 TextMessage.getMessageContent()
 TextMessage.setMessageContent(messageContent)

BinaryMessage

new websms.BinaryMessage(recipientAddressList, messageContentSegments, uerDataHeaderPresent, creationFailedCallback)

Methods/Functions
 BinaryMessage.getMessageContent()
 BinaryMessage.setMessageContent(messageContentSegments)
 BinaryMessage.getUserDataHeader()
 BinaryMessage.setUserDataHeader(userDataHeader)

Message

Base class for all messages (every message inherits from Event.Emitter)

Methods/Functions
 Message.getRecipientAddressList()
 Message.setRecipientAddressList(recipentAddressList)
 Message.checkRecipientAddressList(recipentAddressList)
 Message.getData()
 Message.getSenderAddress()
 Message.setSenderAddress(senderAddress)
 Message.getSenderAddressType()
 Message.setSenderAddressType(senderAddressType)
 Message.getSendAsFlashSms()
 Message.setSendAsFlashSms(sendAsFlashSms)
 Message.getNotificationCallbackUrl()
 Message.setNotificationCallbackUrl(notificationCallbackUrl)
 Message.getClientMessageId()
 Message.setClientMessageId(clientMessageId)
 Message.getPriority()
 Message.setPriority(priority)

errorObj

Generated by function websmscom.getErrorObj out of given obj

Sample object:

{
  message       : "<error message string>",
  messageObject : <TextMessage or BinaryMessage object affected>,
  apiResponse   : <ApiResponse Object in case there was an API Response>,
  error         : <Error>,  //Javascript Error() object
  throwError    : <boolean> 
}

default properties are: 'throwError': true/false boolean - will result in thrown error (default true at message object creation) 'message' : Error message

apiResponse

Sample object:

{
 statusCode : 2000,
 statusMessage : 'OK',
 transferId : '005097e89a000466fe56';
 clientMessageId : "<when defined in transferred message by user>";
}

Contributors

  • Gerd Reifenauer (Author) @reifi
  • Georg Hinteregger

Contact

For any further questions into detail the contact-email is [email protected]

License

(The MIT License)

Copyright (c) 2012 sms.at mobile internet services gmbh

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Additionally:

  • Also available for C++, Java, Perl, Python, Ruby and more...