Twilio
Stay organized with collections
Save and categorize content based on your preferences.
Send a SMS message
/**
* An example of sending SMS messages from Google Ads Scripts using Twilio.
* 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 Twilio 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 Twilio phone number or short code, as per the Phone Numbers Dashboard
// https://www.twilio.com/console/phone-numbers/incoming
const TWILIO_SRC_PHONE_NUMBER = 'INSERT_TWILIO_SRC_PHONE_NUMBER';
// Your Twilio Account SID, see: https://www.twilio.com/console
const TWILIO_ACCOUNT_SID = 'INSERT_TWILIO_ACCOUNT_SID';
// Your Twilio API Auth Token, see: https://www.twilio.com/console
const TWILIO_ACCOUNT_AUTHTOKEN = 'INSERT_TWILIO_ACCOUNT_AUTHTOKEN';
/**
* Builds an SMS message for sending with Twilio 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 sendTwilioSms(dstPhoneNumber, message) {
const request =
buildTwilioMessageRequest(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 Twilio service.
* @param {string} recipientPhoneNumber Destination number including country
* code.
* @param {string} textMessage The message to send.
* @return {SmsRequest}
*/
function buildTwilioMessageRequest(recipientPhoneNumber, textMessage) {
if (!recipientPhoneNumber) {
throw Error('No "recipientPhoneNumber" specified in call to ' +
'buildTwilioMessageRequest. "recipientPhoneNumber" cannot be empty');
}
if (!textMessage) {
throw Error('No "textMessage" specified in call to ' +
'buildTwilioMessageRequest. "textMessage" cannot be empty');
}
const twilioUri = `https://api.twilio.com/2010-04-01/Accounts/${TWILIO_ACCOUNT_SID}/Messages`;
const authHeader = 'Basic ' +
Utilities.base64Encode(
TWILIO_ACCOUNT_SID + ':' + TWILIO_ACCOUNT_AUTHTOKEN);
const options = {
muteHttpExceptions: true,
method: 'POST',
headers: {Authorization: authHeader},
payload: {
From: TWILIO_SRC_PHONE_NUMBER,
To: recipientPhoneNumber,
// Twilio only accepts up to 1600 characters
Body: textMessage.substr(0, 1600)
}
};
return {url: twilioUri, options: options};
}
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2022-03-14 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2022-03-14 UTC."],[[["This script enables sending SMS messages directly from Google Ads scripts using the Twilio API."],["It requires essential Twilio account details like Account SID, Auth Token, and the designated Twilio phone number for sending messages."],["The script includes error handling, notifying a specified email address in case of sending failures."],["It limits SMS messages to 1600 characters, adhering to Twilio's message length constraints."],["The script facilitates building and sending an SMS request and has retry mechanisms for handling temporary errors."]]],[]]