Hello,
I am currently having an issue with the Serverless Express setup. Within my controller, I reference the Twilio API to send messages. If i do not include a response to the function, the messages send just fine. If i do include a response, it seems my connection is cut short before any messages are sent. The function is structured with async/await and i do use a async.retry method to assist in delivery.
Any error logs ? can you share a snippet of your code ?
‘use strict’
const twilio = require(‘twilio’);
const config = require(’…/…/config’);
const phoneFormatter = require(‘phone-formatter’);
const phoneValidator = require(‘awesome-phonenumber’);
const ObjectId = require(‘mongodb’).ObjectId;
const database = require(’…/database’);
const async = require(‘async’);
const _ = require(‘lodash’);
const { twilioAccount } = config;
const sendMessageTest = async (inputs) => {
if (inputs.phoneNumber) {
let phoneNumber = phoneFormatter.normalize(inputs.phoneNumber);
if (phoneValidator(phoneNumber, 'US').isValid()) {
const client = new twilio(twilioAccount.accountSid, twilioAccount.authToken);
let scheduledMessage = await inputs.db.collection('scheduledmessage').findOne({
_id: ObjectId(inputs.id)
});
scheduledMessage.bodyMessages = JSON.parse(scheduledMessage.bodyMessages);
await Promise.all(_.each(scheduledMessage.bodyMessages, async (bodyMessage) => {
_.each(bodyMessage.match(/%!*[^%]*!%/g), (mergeField) => {
mergeField = mergeField.replace(/(%!|!%)/g,'');
bodyMessage = bodyMessage.replace(new RegExp('%!' + mergeField + '!%'), mergeField);
});
async function sendMessageTest () {
if (scheduledMessage.type === 'sms') {
let message = await client.messages.create({
body: bodyMessage,
from: twilioAccount.twilioMessageTestPhoneNumber,
to: inputs.phoneNumber
});
return message;
} else if (scheduledMessage.type === 'mms') {
let message = await client.messages.create({
body: bodyMessage,
from: twilioAccount.twilioMessageTestPhoneNumber,
to: phoneNumber,
mediaUrl: scheduledMessage.mediaSrc
});
return message;
}
}
await async.retry({
times: 10,
interval: function(retryCount) {
return 50 * Math.pow(2, retryCount);
}
}, sendMessageTest, (err, result) => {
if (!err) { return; }
});
}));
};
return { statusCode: 200 }
};
};
module.exports = {
send: async function (req, res) {
let db = await database.createConnection();
let argins = {
db,
id: req.body.id,
phoneNumber: req.body.phoneNumber
};
try {
res.send(await sendMessageTest(argins))
return;
} catch (error) {
return error;
}
}
}