in source/services/notification/lib/alert.js [46:132]
async sendAlert(message) {
const _self = this;
const _type = message.type;
const _deviceId = message.deviceId;
//Step1. find device registration and get ownerid
try {
const validRegistration = await _self._getDeviceRegistration(_deviceId);
if (!validRegistration) {
Logger.error(
Logger.levels.INFO,
`[MissingRegistration] No registration found for device ${_deviceId}.`
);
return Promise.reject({
code: 400,
error: 'MissingRegistration',
message: `No registration found for user for device "${_deviceId}".`,
});
} else {
let _userId = validRegistration.userId;
//Step2. get phone number
const _phoneNumberAtt = await _self._getUserRegisteredPhoneNumber(
_userId
);
if (!_phoneNumberAtt) {
Logger.error(
Logger.levels.INFO,
`[MissingPhoneNumber] No phone number found.`
);
return Promise.reject({
code: 400,
error: 'MissingPhoneNumber',
message: `No phone number found.`,
});
}
//Step3. get alert level and notification status from user settings
const _settingsData = await _self._getUserAlertLevel(_userId);
if (!_settingsData) {
Logger.error(
Logger.levels.INFO,
`[MissingUserConfig] No user settings found.`
);
return Promise.reject({
code: 400,
error: 'MissingUserConfig',
message: `No user settings found.`,
});
}
const alertLevel = _settingsData.Item.setting.alertLevel;
const sendNotification = _settingsData.Item.setting.sendNotification;
if (!sendNotification) {
return Promise.resolve({
code: 200,
message: `alert not sent for device "${message.deviceId}" event type "${message.type}".`,
});
}
//Step4. publish text message
if (alertLevel.indexOf(_type) > -1) {
const sns = new AWS.SNS({apiVersion: '2010-03-31'});
let params = {
PhoneNumber: _phoneNumberAtt[0].Value,
Message: `** Smart Product Event Alert **\nYou have a new ${message.type} event.\n\n* Device: ${validRegistration.deviceName}\n* Time: ${message.createdAt}\n* Message: ${message.message}\n* Value: ${message.details.value}`
};
await sns.publish(params).promise();
return Promise.resolve({
code: 200,
message: `alert sent for device "${message.deviceId}".`,
});
} else {
return Promise.resolve({
code: 200,
message: `alert not sent for device "${message.deviceId}" event type "${message.type}".`,
});
}
}
} catch (err) {
Logger.error(Logger.levels.INFO, err);
return Promise.reject({
code: 500,
error: 'SendAlertFailure',
message: `Error occurred while attempting to send event alert for device "${message.deviceId}".`,
});
}
}