mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2026-08-19 09:40:23 +00:00
remove smpp
This commit is contained in:
@@ -33,8 +33,6 @@ const JAMBONES_GATHER_EARLY_HINTS_MATCH = process.env.JAMBONES_GATHER_EARLY_HINT
|
||||
const JAMBONZ_GATHER_EARLY_HINTS_MATCH = process.env.JAMBONZ_GATHER_EARLY_HINTS_MATCH;
|
||||
const JAMBONES_GATHER_CLEAR_GLOBAL_HINTS_ON_EMPTY_HINTS = process.env.JAMBONES_GATHER_CLEAR_GLOBAL_HINTS_ON_EMPTY_HINTS;
|
||||
|
||||
const SMPP_URL = process.env.SMPP_URL;
|
||||
|
||||
/* drachtio */
|
||||
const DRACHTIO_PORT = process.env.DRACHTIO_PORT;
|
||||
const DRACHTIO_HOST = process.env.DRACHTIO_HOST;
|
||||
@@ -166,7 +164,6 @@ module.exports = {
|
||||
JAMBONZ_GATHER_EARLY_HINTS_MATCH,
|
||||
JAMBONES_GATHER_CLEAR_GLOBAL_HINTS_ON_EMPTY_HINTS,
|
||||
JAMBONES_FREESWITCH,
|
||||
SMPP_URL,
|
||||
JAMBONES_NETWORK_CIDR,
|
||||
JAMBONES_API_BASE_URL,
|
||||
JAMBONES_TIME_SERIES_HOST,
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
const router = require('express').Router();
|
||||
const CallInfo = require('../../session/call-info');
|
||||
const {CallDirection} = require('../../utils/constants');
|
||||
const SmsSession = require('../../session/sms-call-session');
|
||||
const { normalizeJambones } = require('@jambonz/verb-specifications');
|
||||
const makeTask = require('../../tasks/make_task');
|
||||
|
||||
router.post('/:sid', async(req, res) => {
|
||||
const {logger} = req.app.locals;
|
||||
const {srf} = req.app.locals;
|
||||
const {message_sid, account_sid} = req.body;
|
||||
|
||||
logger.debug({body: req.body}, 'got createMessage request');
|
||||
|
||||
const data = [{
|
||||
verb: 'message',
|
||||
...req.body
|
||||
}];
|
||||
delete data[0].message_sid;
|
||||
|
||||
try {
|
||||
const tasks = normalizeJambones(logger, data)
|
||||
.map((tdata) => makeTask(logger, tdata));
|
||||
|
||||
const callInfo = new CallInfo({
|
||||
direction: CallDirection.None,
|
||||
messageSid: message_sid,
|
||||
accountSid: account_sid,
|
||||
res
|
||||
});
|
||||
const cs = new SmsSession({logger, srf, tasks, callInfo});
|
||||
cs.exec();
|
||||
} catch (err) {
|
||||
logger.error({err, body: req.body}, 'OutboundSMS: error launching SmsCallSession');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
@@ -6,7 +6,4 @@ api.use('/conference', require('./conference'));
|
||||
api.use('/dequeue', require('./dequeue'));
|
||||
api.use('/enqueue', require('./enqueue'));
|
||||
|
||||
api.use('/messaging', require('./messaging')); // inbound SMS
|
||||
api.use('/createMessage', require('./create-message')); // outbound SMS (REST)
|
||||
|
||||
module.exports = api;
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
const router = require('express').Router();
|
||||
const HttpRequestor = require('../../utils/http-requestor');
|
||||
const WsRequestor = require('../../utils/ws-requestor');
|
||||
const CallInfo = require('../../session/call-info');
|
||||
const {CallDirection} = require('../../utils/constants');
|
||||
const SmsSession = require('../../session/sms-call-session');
|
||||
const { normalizeJambones } = require('@jambonz/verb-specifications');
|
||||
const {TaskPreconditions} = require('../../utils/constants');
|
||||
const makeTask = require('../../tasks/make_task');
|
||||
|
||||
router.post('/:partner', async(req, res) => {
|
||||
const {logger} = req.app.locals;
|
||||
|
||||
logger.debug({body: req.body}, `got incomingSms request from partner ${req.params.partner}`);
|
||||
|
||||
let tasks;
|
||||
const {srf} = require('../../..');
|
||||
const {lookupAccountBySid} = srf.locals.dbHelpers;
|
||||
const app = req.body.app;
|
||||
const account = await lookupAccountBySid(app.accountSid);
|
||||
const hook = app.messaging_hook;
|
||||
let requestor;
|
||||
|
||||
if ('WS' === hook?.method) {
|
||||
app.requestor = new WsRequestor(logger, account.account_sid, hook, account.webhook_secret) ;
|
||||
app.requestor.service_provider_sid = account.service_provider_sid;
|
||||
app.notifier = app.requestor;
|
||||
}
|
||||
else {
|
||||
app.requestor = new HttpRequestor(logger, account.account_sid, hook, account.webhook_secret);
|
||||
app.requestor.service_provider_sid = account.service_provider_sid;
|
||||
app.notifier = {request: () => {}};
|
||||
}
|
||||
|
||||
const payload = {
|
||||
carrier: req.params.partner,
|
||||
messageSid: app.messageSid,
|
||||
accountSid: app.accountSid,
|
||||
serviceProviderSid: account.service_provider_sid,
|
||||
applicationSid: app.applicationSid,
|
||||
from: req.body.from,
|
||||
to: req.body.to,
|
||||
cc: req.body.cc,
|
||||
text: req.body.text,
|
||||
media: req.body.media
|
||||
};
|
||||
res.status(200).json({sid: req.body.messageSid});
|
||||
|
||||
try {
|
||||
tasks = await requestor.request('session:new', hook, payload);
|
||||
logger.info({tasks}, 'response from incoming SMS webhook');
|
||||
} catch (err) {
|
||||
logger.error({err, hook}, 'Error sending incoming SMS message');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// process any verbs in response
|
||||
if (Array.isArray(tasks) && tasks.length) {
|
||||
const {srf} = req.app.locals;
|
||||
|
||||
app.requestor = requestor;
|
||||
app.notifier = {request: () => {}};
|
||||
|
||||
try {
|
||||
tasks = normalizeJambones(logger, tasks)
|
||||
.map((tdata) => makeTask(logger, tdata))
|
||||
.filter((t) => t.preconditions === TaskPreconditions.None);
|
||||
|
||||
if (0 === tasks.length) {
|
||||
logger.info('inboundSMS: after removing invalid verbs there are no tasks left to execute');
|
||||
return;
|
||||
}
|
||||
const callInfo = new CallInfo({
|
||||
direction: CallDirection.None,
|
||||
messageSid: app.messageSid,
|
||||
accountSid: app.accountSid,
|
||||
applicationSid: app.applicationSid
|
||||
});
|
||||
const cs = new SmsSession({logger, srf, application: app, tasks, callInfo});
|
||||
cs.exec();
|
||||
} catch (err) {
|
||||
logger.error({err, tasks}, 'InboundSMS: error launching SmsCallSession');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
@@ -70,15 +70,6 @@ class CallInfo {
|
||||
this.sipStatus = 100;
|
||||
this.sipReason = 'Trying';
|
||||
}
|
||||
else if (this.direction === CallDirection.None) {
|
||||
// outbound SMS
|
||||
const {messageSid, accountSid, applicationSid, res} = opts;
|
||||
srf = res.srf;
|
||||
this.messageSid = messageSid;
|
||||
this.accountSid = accountSid;
|
||||
this.applicationSid = applicationSid;
|
||||
this.res = res;
|
||||
}
|
||||
else {
|
||||
// outbound call triggered by REST
|
||||
const {req, callSid, accountSid, applicationSid, to, tag} = opts;
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
const CallSession = require('./call-session');
|
||||
|
||||
/**
|
||||
* @classdesc Subclass of CallSession. Represents a CallSession
|
||||
* that is established for the purpose of sending an outbound SMS
|
||||
* @extends CallSession
|
||||
|
||||
*/
|
||||
class SmsCallSession extends CallSession {
|
||||
constructor({logger, application, srf, tasks, callInfo}) {
|
||||
super({
|
||||
logger,
|
||||
application,
|
||||
srf,
|
||||
tasks,
|
||||
callInfo
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = SmsCallSession;
|
||||
@@ -59,9 +59,6 @@ function makeTask(logger, obj, parent) {
|
||||
case TaskName.Lex:
|
||||
const TaskLex = require('./lex');
|
||||
return new TaskLex(logger, data, parent);
|
||||
case TaskName.Message:
|
||||
const TaskMessage = require('./message');
|
||||
return new TaskMessage(logger, data, parent);
|
||||
case TaskName.Llm:
|
||||
const TaskLlm = require('./llm');
|
||||
return new TaskLlm(logger, data, parent);
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
const Task = require('./task');
|
||||
const {TaskName, TaskPreconditions} = require('../utils/constants');
|
||||
const bent = require('bent');
|
||||
const crypto = require('crypto');
|
||||
const {K8S} = require('../config');
|
||||
class TaskMessage extends Task {
|
||||
constructor(logger, opts) {
|
||||
super(logger, opts);
|
||||
this.preconditions = TaskPreconditions.None;
|
||||
|
||||
this.payload = {
|
||||
message_sid: this.data.message_sid || crypto.randomUUID(),
|
||||
carrier: this.data.carrier,
|
||||
to: this.data.to,
|
||||
from: this.data.from,
|
||||
text: this.data.text
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
get name() { return TaskName.Message; }
|
||||
|
||||
/**
|
||||
* Send outbound SMS
|
||||
*/
|
||||
async exec(cs) {
|
||||
const {srf, accountSid} = cs;
|
||||
const {res} = cs.callInfo;
|
||||
let payload = this.payload;
|
||||
const actionParams = {message_sid: this.payload.message_sid};
|
||||
|
||||
await super.exec(cs);
|
||||
try {
|
||||
const {getSmpp, dbHelpers} = srf.locals;
|
||||
const {lookupSmppGateways} = dbHelpers;
|
||||
|
||||
this.logger.debug(`looking up gateways for account_sid: ${accountSid}`);
|
||||
const r = await lookupSmppGateways(accountSid);
|
||||
let gw, url, relativeUrl;
|
||||
if (r.length > 0) {
|
||||
gw = r.find((o) => 1 === o.sg.outbound && (!this.payload.carrier || o.vc.name === this.payload.carrier));
|
||||
}
|
||||
if (gw) {
|
||||
this.logger.info({gw, accountSid}, 'Message:exec - using smpp to send message');
|
||||
url = K8S ? 'http://smpp' : getSmpp();
|
||||
relativeUrl = '/sms';
|
||||
payload = {
|
||||
...payload,
|
||||
...gw.sg,
|
||||
...gw.vc
|
||||
};
|
||||
}
|
||||
else {
|
||||
//TMP: smpp only at the moment, need to add http back in
|
||||
/*
|
||||
this.logger.info({gw, accountSid, carrier: this.payload.carrier},
|
||||
'Message:exec - no smpp gateways found to send message');
|
||||
relativeUrl = 'v1/outboundSMS';
|
||||
const sbcAddress = getSBC();
|
||||
if (sbcAddress) url = `http://${sbcAddress}:3000/`;
|
||||
*/
|
||||
this.performAction({
|
||||
...actionParams,
|
||||
message_status: 'no carriers'
|
||||
}).catch((err) => {});
|
||||
if (res) res.sendStatus(404);
|
||||
return;
|
||||
}
|
||||
if (url) {
|
||||
const post = bent(url, 'POST', 'json', 201, 480);
|
||||
this.logger.info({payload, url}, 'Message:exec sending outbound SMS');
|
||||
const response = await post(relativeUrl, payload);
|
||||
const {smpp_err_code, carrier, message_id, message} = response;
|
||||
if (smpp_err_code) {
|
||||
this.logger.info({response}, 'SMPP error sending SMS');
|
||||
this.performAction({
|
||||
...actionParams,
|
||||
carrier,
|
||||
carrier_message_id: message_id,
|
||||
message_status: 'failure',
|
||||
message_failure_reason: message
|
||||
}).catch((err) => {});
|
||||
if (res) {
|
||||
res.status(480).json({
|
||||
...response,
|
||||
sid: cs.callInfo.messageSid
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
const {message_id, carrier} = response;
|
||||
this.logger.info({response}, 'Successfully sent SMS');
|
||||
this.performAction({
|
||||
...actionParams,
|
||||
carrier,
|
||||
carrier_message_id: message_id,
|
||||
message_status: 'success',
|
||||
}).catch((err) => {});
|
||||
if (res) {
|
||||
res.status(200).json({
|
||||
sid: cs.callInfo.messageSid,
|
||||
carrierResponse: response
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.logger.info('Message:exec - unable to send SMS as SMPP is not configured on the system');
|
||||
this.performAction({
|
||||
...actionParams,
|
||||
message_status: 'smpp configuration error'
|
||||
}).catch((err) => {});
|
||||
if (res) res.status(404).json({message: 'no configured SMS gateways'});
|
||||
}
|
||||
} catch (err) {
|
||||
this.logger.error(err, 'TaskMessage:exec - unexpected error sending SMS');
|
||||
this.performAction({
|
||||
...actionParams,
|
||||
message_status: 'system error',
|
||||
message_failure_reason: err.message
|
||||
});
|
||||
if (res) res.status(422).json({message: 'no configured SMS gateways'});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = TaskMessage;
|
||||
@@ -16,7 +16,6 @@
|
||||
"Lex": "lex",
|
||||
"Listen": "listen",
|
||||
"Llm": "llm",
|
||||
"Message": "message",
|
||||
"Pause": "pause",
|
||||
"Play": "play",
|
||||
"Rasa": "rasa",
|
||||
|
||||
@@ -8,7 +8,6 @@ const {
|
||||
JAMBONES_MYSQL_CONNECTION_LIMIT,
|
||||
JAMBONES_MYSQL_PORT,
|
||||
JAMBONES_FREESWITCH,
|
||||
SMPP_URL,
|
||||
JAMBONES_TIME_SERIES_HOST,
|
||||
JAMBONES_ESL_LISTEN_ADDRESS,
|
||||
PORT,
|
||||
@@ -171,7 +170,6 @@ function installSrfLocals(srf, logger, {
|
||||
lookupTeamsByAccount,
|
||||
lookupAccountBySid,
|
||||
lookupAccountCapacitiesBySid,
|
||||
lookupSmppGateways,
|
||||
lookupClientByAccountAndUsername,
|
||||
lookupSystemInformation,
|
||||
lookupLcrByAccount
|
||||
@@ -249,7 +247,6 @@ function installSrfLocals(srf, logger, {
|
||||
lookupTeamsByAccount,
|
||||
lookupAccountBySid,
|
||||
lookupAccountCapacitiesBySid,
|
||||
lookupSmppGateways,
|
||||
lookupClientByAccountAndUsername,
|
||||
lookupSystemInformation,
|
||||
updateCallStatus,
|
||||
@@ -285,9 +282,6 @@ function installSrfLocals(srf, logger, {
|
||||
},
|
||||
parentLogger: logger,
|
||||
getSBC,
|
||||
getSmpp: () => {
|
||||
return SMPP_URL;
|
||||
},
|
||||
lifecycleEmitter,
|
||||
getFreeswitch,
|
||||
stats: stats,
|
||||
|
||||
Reference in New Issue
Block a user