Message uses node's https insteadof requests.

Messages re-written to use nodes built in https over external requests
package.
Also updated message functions to always return promises and have
clearer names for what their purpose is.
This commit is contained in:
2020-09-06 14:09:10 +02:00
parent dde8fe1cbe
commit 4f054a0437

View File

@@ -1,92 +1,109 @@
const request = require("request"); const https = require("https");
const path = require("path"); const path = require("path");
const config = require(path.join(__dirname + "/../config/defaults/lottery")); const config = require(path.join(__dirname + "/../config/defaults/lottery"));
async function sendMessage(winnerObject) { async function sendWineSelectMessage(winnerObject) {
winnerObject.timestamp_sent = new Date().getTime(); winnerObject.timestamp_sent = new Date().getTime();
winnerObject.timestamp_limit = new Date().getTime() * 600000; winnerObject.timestamp_limit = new Date().getTime() * 600000;
await winnerObject.save(); await winnerObject.save();
let url = new URL(`/#/winner/${winnerObject.id}`, "https://lottis.vin"); let url = new URL(`/#/winner/${winnerObject.id}`, "https://lottis.vin");
await sendMessageToUser( return sendMessageToUser(
winnerObject.phoneNumber, winnerObject.phoneNumber,
`Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Her er linken for å velge hva slags vin du vil ha, du har 10 minutter på å velge ut noe før du blir lagt bakerst i køen. ${url.href}. (Hvis den siden kommer opp som tom må du prøve å refreshe siden noen ganger.)` `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Her er linken for å velge hva slags vin du vil ha, du har 10 minutter på å velge ut noe før du blir lagt bakerst i køen. ${url.href}. (Hvis den siden kommer opp som tom må du prøve å refreshe siden noen ganger.)`
); )
return true;
} }
async function sendWonWineMessage(winnerObject, wineObject) { async function sendLastWinnerMessage(winnerObject, wineObject) {
console.log( console.log(`User ${winnerObject.id} is only one left, chosing wine for him/her.`);
`User ${winnerObject.id} is only one left, chosing wine for him/her.`
);
winnerObject.timestamp_sent = new Date().getTime(); winnerObject.timestamp_sent = new Date().getTime();
winnerObject.timestamp_limit = new Date().getTime(); winnerObject.timestamp_limit = new Date().getTime();
await winnerObject.save(); await winnerObject.save();
await sendMessageToUser( return sendMessageToUser(
winnerObject.phoneNumber, winnerObject.phoneNumber,
`Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, og vil få nærmere info om hvordan/hvor du kan hente vinen snarest. Ha en ellers fin helg!` `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, og vil få nærmere info om hvordan/hvor du kan hente vinen snarest. Ha en ellers fin helg!`
); );
return true;
} }
async function sendMessageTooLate(winnerObject) { async function sendWineSelectMessageTooLate(winnerObject) {
await sendMessageToUser( return sendMessageToUser(
winnerObject.phoneNumber, winnerObject.phoneNumber,
`Hei ${winnerObject.name}, du har dessverre brukt mer enn 10 minutter på å velge premie og blir derfor puttet bakerst i køen. Du vil få en ny SMS når det er din tur igjen.` `Hei ${winnerObject.name}, du har dessverre brukt mer enn 10 minutter på å velge premie og blir derfor puttet bakerst i køen. Du vil få en ny SMS når det er din tur igjen.`
); );
} }
async function sendMessageToUser(phoneNumber, message) { async function sendMessageToUser(phoneNumber, message) {
try { console.log(`Attempting to send message to ${ phoneNumber }.`)
request.post(
{ const body = {
url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`,
json: true,
body: {
sender: "Vinlottis", sender: "Vinlottis",
message: message, message: message,
recipients: [{ msisdn: `47${phoneNumber}` }] recipients: [{ msisdn: `47${ phoneNumber }`}]
} };
},
function(err, r, body) { return gatewayRequest(body);
console.log(err ? err : body);
if(err) {
console.log(phoneNumber, message);
}
}
);
} catch(e) {
console.log(phoneNumber, message);
}
} }
async function sendUpdate(winners) {
async function sendInitialMessageToWinners(winners) {
let numbers = []; let numbers = [];
for (let i = 0; i < winners.length; i++) { for (let i = 0; i < winners.length; i++) {
numbers.push({ msisdn: `47${winners[i].phoneNumber}` }); numbers.push({ msisdn: `47${winners[i].phoneNumber}` });
} }
request.post(
{ const body = {
url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`,
json: true,
body: {
sender: "Vinlottis", sender: "Vinlottis",
message: message:
"Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!", "Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!",
recipients: numbers recipients: numbers
} }
},
function(err, r, body) { return gatewayRequest(body);
console.log(err ? err : body);
}
);
} }
module.exports.sendUpdate = sendUpdate; async function gatewayRequest(body) {
module.exports.sendMessage = sendMessage; return new Promise((resolve, reject) => {
module.exports.sendMessageTooLate = sendMessageTooLate; const options = {
module.exports.sendWonWineMessage = sendWonWineMessage; hostname: "gatewayapi.com",
post: 443,
path: `/rest/mtsms?token=${ config.gatewayToken }`,
method: "POST",
headers: {
"Content-Type": "application/json"
}
}
const req = https.request(options, (res) => {
console.log(`statusCode: ${ res.statusCode }`);
console.log(`statusMessage: ${ res.statusMessage }`);
res.setEncoding('utf8');
if (res.statusCode == 200) {
res.on("data", (d) => resolve(JSON.parse(d)));
} else {
res.on("data", (data) => {
data = JSON.parse(data);
return reject('Gateway error: ' + data['message'] || data)
});
}
})
req.on("error", (error) => {
console.error(`Error from sms service: ${ error }`);
reject(`Error from sms service: ${ error }`);
})
req.write(JSON.stringify(body));
req.end();
});
}
module.exports = {
sendWineSelectMessage,
sendLastWinnerMessage,
sendWineSelectMessageTooLate,
sendInitialMessageToWinners
}