Reputation: 83
I'm using this code from Greg Baugues (https://www.twilio.com/blog/2016/02/send-sms-from-a-google-spreadsheet.html) to send texts in bulk using Google sheets and Twilio.
I want to tell sendSMS and/or sendAll to skip existing sheet entries where 'sent' appears in the relevant cell, so as to allow the sheet to function as a database as well as a mere messaging machine.
Any ideas?
(The XXX entries are simply to anonymize my Twilio account and phone number).
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Send text msg to client", functionName:
"sendAll"}, ];
ss.addMenu("Text", menuEntries);
}
function sendSms(to, body) {
var messages_url = "https://api.twilio.com/2010-04-
01/Accounts/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json";
var payload = {
"To": to,
"Body" : body,
"From" : "+XXXXXXXXXX"
};
var options = {
"method" : "post",
"payload" : payload
};
options.headers = {
"Authorization" : "Basic " +
Utilities.base64Encode
("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
};
UrlFetchApp.fetch(messages_url, options);
}
function sendAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = sheet.getLastRow() - 1;
var dataRange = sheet.getRange(startRow, 1, numRows, 4)
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
try {
response_data = sendSms(row[1], row[2]);
status = "sent";
} catch(err) {
Logger.log(err);
status = "error";
}
sheet.getRange(startRow + Number(i), 4).setValue(status);
}
}
function myFunction() {
sendAll();
}
Upvotes: 0
Views: 451
Reputation: 83
This works (thanks Andy):
function sendAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = sheet.getLastRow() - 1;
var dataRange = sheet.getRange(startRow, 1, numRows, 5)
var data = dataRange.getValues();
for (i in data) {
var status;
var row = data[i];
if (row[3] !== "sent") {
try {
response_data = sendSms(row[1], row[2]);
status = "sent";
} catch(err) {
Logger.log(err);
status = "error";
}
}
sheet.getRange(startRow + Number(i), 4).setValue(status);
}
}
Upvotes: 0
Reputation: 698
You need to edit your sendAll()
function so that it tests the value of the status column to decide if it should skip that row or not.
Use this:
function sendAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = sheet.getLastRow() - 1;
var dataRange = sheet.getRange(startRow, 1, numRows, 4)
var data = dataRange.getValues();
for (i in data) {
var row = data[i];
try {
if (row[3] != "sent") {
response_data = sendSms(row[1], row[2]);
status = "sent";
}
} catch(err) {
Logger.log(err);
status = "error";
}
sheet.getRange(startRow + Number(i), 4).setValue(status);
}
}
Upvotes: 1