Gửi tin nhắn SMS
/**
* An example of sending SMS messages from Google Ads Scripts using Plivo.
* See: https://developers.google.com/google-ads/scripts/docs/features/third-party-apis#basic_authentication_samples
* for full details on configuration.
*/
// Supply an email address: If for some reason your Plivo account
// details become invalid or change, this will be used to make sure
// you are notified of failure.
const EMAIL_ADDRESS = 'INSERT_EMAIL_ADDRESS';
// The number you wish messages to appear to originate from. Must be registered
// with Plivo.
const PLIVO_SRC_PHONE_NUMBER = 'INSERT_SRC_PHONE_NUMBER';
// Account details, see: https://manage.plivo.com/dashboard/
const PLIVO_ACCOUNT_AUTHID = 'INSERT_ACCOUNT_AUTHID';
const PLIVO_ACCOUNT_AUTHTOKEN = 'INSERT_ACCOUNT_AUTHTOKEN';
/**
* Builds an SMS message for sending with Plivo and sends the message.
* @param {string} dstPhoneNumber The destination number. This is a string as
* telephone numbers may contain '+'s or be prefixed with '00' etc.
* @param {string} message The text message to send.
*/
function sendPlivoSms(dstPhoneNumber, message) {
const request =
buildPlivoMessageRequest(dstPhoneNumber, message);
sendSms(request);
}
/**
* Send an SMS message
* @param {!SmsRequest} request The request object to send
*/
function sendSms(request) {
const retriableErrors = [429, 500, 503];
for (let attempts = 0; attempts < 3; attempts++) {
const response = UrlFetchApp.fetch(request.url, request.options);
const responseCode = response.getResponseCode();
if (responseCode < 400 || retriableErrors.indexOf(responseCode) === -1) {
break;
}
Utilities.sleep(2000 * Math.pow(2, attempts));
}
if (responseCode >= 400 && EMAIL_ADDRESS) {
MailApp.sendEmail(
EMAIL_ADDRESS, 'Error sending SMS Message from Google Ads Scripts',
response.getContentText());
}
}
/**
* Builds a SMS request object specific for the Plivo service.
* @param {string} recipientPhoneNumber Destination number including country
* code.
* @param {string} textMessage The message to send.
* @return {SmsRequest}
*/
function buildPlivoMessageRequest(recipientPhoneNumber, textMessage) {
if (!recipientPhoneNumber) {
throw Error('No "recipientPhoneNumber" specified in call to ' +
'buildPlivoMessageRequest. "recipientPhoneNumber" cannot be empty');
}
if (!textMessage) {
throw Error('No "textMessage" specified in call to ' +
'buildPlivoMessageRequest. "textMessage" cannot be empty');
}
const plivoUri =
`https://api.plivo.com/v1/Account/${PLIVO_ACCOUNT_AUTHID}/Message/`;
const authHeader = 'Basic ' +
Utilities.base64Encode(
PLIVO_ACCOUNT_AUTHID + ':' + PLIVO_ACCOUNT_AUTHTOKEN);
const options = {
muteHttpExceptions: true,
method: 'POST',
headers: {'Authorization': authHeader, 'Content-Type': 'application/json'},
payload: JSON.stringify({
src: PLIVO_SRC_PHONE_NUMBER,
dst: recipientPhoneNumber,
text: textMessage
})
};
return {url: plivoUri, options: options};
}