transport.js
3.21 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
"use strict";
const url = require('url');
const request = require('request');
const uuidv4 = require('uuid/v4');
const moment = require('moment');
const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');
const modemSelect = require('./modemSelect');
const modems = require('./modems2');
const partnerLastSeen = require('./partner-last-seen');
const history = require('./history');
function _send(destinationNumber, msg, handlerName) {
if (msg.length > 160) {
const newMsg = msg.slice(0, 160);
const remainingMsg = msg.slice(160);
_send(destinationNumber, newMsg, handlerName);
setTimeout(() => {
_send(destinationNumber, remainingMsg, handlerName);
}, 2000);
return;
}
const modem = modems.get('name', handlerName);
if (!modem) {
logger.warn('Not knowing modem to use. Ignoring message', { destination_number: destinationNumber, msg: msg, handler_name: handlerName });
return;
}
if (!modem.reportIp || !modem.reportPort || !modem.reportApikey) {
logger.warn('Invalid modem configuration', { modem });
return;
}
const reqId = uuidv4();
history.push({
ts: moment().format('YYYY-MM-DD HH:mm:ss'),
modem: {
name: handlerName,
},
direction: 'OUTGOING',
partner: destinationNumber,
message: msg,
});
const requestOptions = {
url: url.format({
protocol: 'http',
hostname: modem.reportIp,
port: modem.reportPort,
pathname: modem.reportPathSms,
}),
qs: {
msg: msg,
number: destinationNumber,
reqid: reqId,
apikey: modem.reportApikey,
}
}
logger.info('Sending message to modem handler', { req_id: reqId, destination_number: destinationNumber, msg: msg, msg_length: msg.length, 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 });
}
})
}
async function send(partner, msg) {
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;
const destinationNumber = modemSelect.removeSuffixFromNumber(partner, config);
// logger.verbose('Choosing handler name', { partner, destinationNumber, msg, origin });
let handlerName = await partnerLastSeen.get(destinationNumber) ;
if (!handlerName) {
logger.warn(`Unknown handler for sending message to partner`, { partner, destinationNumber });
return;
}
_send(destinationNumber, msg, handlerName);
}
exports.send = send;