47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const twilio = require('twilio')
|
|
const _ = require('lodash/fp')
|
|
|
|
const NAME = 'Twilio'
|
|
|
|
const BAD_NUMBER_CODES = [
|
|
21201, 21202, 21211, 21214, 21216, 21217, 21219, 21408, 21610, 21612, 21614,
|
|
21608,
|
|
]
|
|
|
|
function sendMessage(account, rec) {
|
|
return Promise.resolve()
|
|
.then(() => {
|
|
// to catch configuration errors like
|
|
// "Error: username is required"
|
|
const client = twilio(account.accountSid, account.authToken)
|
|
const body = rec.sms.body
|
|
const _toNumber = rec.sms.toNumber || account.toNumber
|
|
const from =
|
|
_.startsWith('+')(account.fromNumber) ||
|
|
!_.isNumber(String(account.fromNumber).replace(/\s/g, ''))
|
|
? account.fromNumber
|
|
: `+${account.fromNumber}`
|
|
|
|
const opts = {
|
|
body: body,
|
|
to: _toNumber,
|
|
from,
|
|
}
|
|
|
|
return client.messages.create(opts)
|
|
})
|
|
.catch(err => {
|
|
if (_.includes(err.code, BAD_NUMBER_CODES)) {
|
|
const badNumberError = new Error(err.message)
|
|
badNumberError.name = 'BadNumberError'
|
|
throw badNumberError
|
|
}
|
|
|
|
throw new Error(`Twilio error: ${err.message}`)
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
NAME,
|
|
sendMessage,
|
|
}
|