Blame view

lib/transport.js 2.13 KB
c0741a574   Adhidarma Hadiwinoto   Completed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  "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;