Plivo

  • The provided code demonstrates how to send SMS messages from Google Ads Scripts using the Plivo service.

  • To use the script, you need to supply your email address for failure notifications, a registered Plivo source phone number, and your Plivo account authentication ID and token.

  • The sendPlivoSms function is used to build and send the SMS message, taking the destination phone number and message text as parameters.

  • The sendSms function handles the actual sending of the request and includes basic error handling and retries for certain error codes.

  • The buildPlivoMessageRequest function constructs the specific request object for the Plivo API, including authentication headers and the message payload.

Send a SMS message

/**  * 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}; }