transport.js 2.13 KB
"use strict";

const request = require('request');
const uuidv4 = require('uuid/v4');

const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');

const modems = require('./modems');

function send(partner, msg, origin) {
    if (!partner) return;

    if (typeof msg !== 'string') {
        logger.warn('Message to send is not a string, ignoring message');
        return;
    }

    msg = msg.trim();
    if (!msg) return;

    if (msg.length > 160 && !config.do_not_trim_long_sms) {
        logger.verbose('Message trim to 160 chars');
        msg = msg.slice(0, 156) + ' ...';
    }

    const handlerName = origin || config.default_modem;

    const modem = modems.getModemConfig(handlerName, config.modems);
    if (!modem) {
        logger.warn('Not knowing modem to use. Ignoring message', { partner: partner, msg: msg, origin: origin, handler_name: handlerName });
        return;
    }

    if (!modem.url || !modem.apikey) {
        logger.warn('Invalid modem configuration', { config: modem, handler_name: handlerName });
        return;
    }

    const reqId = uuidv4();
    const destinationNumber = modems.removeSuffixFromNumber(partner, config);

    const requestOptions = {
        url: modem.url,
        qs: {
            msg: msg,
            number: destinationNumber,
            reqid: reqId,
            apikey: modem.apikey
        }
    }

    logger.info('Sending message to modem handler', { req_id: reqId, partner: partner, destination_number: destinationNumber, msg: msg, handler_name: handlerName });
    request(requestOptions, function(err, res, body) {
        if (err) {
            logger.warn('Error requesting to modem handler. ' + err.toString(), { req_id: reqId, handler_name: handlerName });
            
        }
        else if (res.statusCode != 200) {
            logger.warn('Modem handler not responding with HTTP status code 200.', { http_status_code: res.statusCode, req_id: reqId, handler_name: handlerName });
        }
        else {
            logger.verbose('Message sent to handler', { req_id: reqId, handler_name: handlerName, response_body: body });
        }
    })
}

exports.send = send;