Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
PubNub SMS sender FUNCTION JavaScript
const INFOBIP_API_KEY = 'YOUR_API_KEY';
const INFOBIP_API_URL = 'https://api.infobip.com/sms/1/text/single';
const SUCCESSFUL_SMS_STATUS_GROUPS = [1, 3];
const pubNub = require('pubnub');
const xhr = require('xhr');
function composeOptions(apiKey, body) {
return {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `App ${apiKey}`,
'User-Agent': 'APIv5_PUBNUB'
},
body: JSON.stringify(body)
};
}
function isSuccessfullySent(responseBody) {
return SUCCESSFUL_SMS_STATUS_GROUPS.indexOf(responseBody.messages[0].status.groupId) > -1;
}
function handleApiResponse(pubNubRequest, apiResponse) {
const httpStatus = apiResponse.status;
const responseBody = JSON.parse(apiResponse.body);
if (httpStatus === 200 && isSuccessfullySent(responseBody)) {
pubNubRequest.message.sent = responseBody;
pubNubRequest.message.sent.timestamp = new Date().toISOString();
return pubNubRequest.ok();
} else {
return pubNubRequest.abort('Message sending failed.');
}
}
function handleSendingError(pubNubRequest, error) {
const message = error.message;
const fileName = error.fileName;
const lineNumber = error.lineNumber;
return pubNubRequest.abort('Failed to make API request to Infobip.');
}
export default (pubNubRequest) => {
const to = pubNubRequest.message.to;
const text = pubNubRequest.message.text;
const from = pubNubRequest.message.from;
if (!to) return pubNubRequest.ok();
const options = composeOptions(INFOBIP_API_KEY, {from, to, text});
return xhr.fetch(INFOBIP_API_URL, options)
.then(handleApiResponse.bind(this, pubNubRequest))
.catch(handleSendingError.bind(this, pubNubRequest));
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.