Google脚本-SMS短信脚本的延迟循环

时间:2019-03-15 22:11:28

标签: javascript arrays loops google-apps-script google-sheets

在发送卖家的购买商品请求时,我达到了运营商限制。

  

每分钟15-60条消息,每天不到200位唯一身份收件人

如果我的脚本的电子表格中有200-500个联系人,如何保持在以下准则之内

function sendSms(to, body) {
  var messages_url = "https://api.twilio.com/2010-04-01/Accounts/MYAPIKEY/Messages.json";

  var payload = {
    "To": to,
    "Body" : body,
    "From" : "+1PHONENUMBER"
  };

  var options = {
    "method" : "post",
    "payload" : payload
  };

  options.headers = { 
    "Authorization" : "Basic " + Utilities.base64Encode("MYAPIKEY:MYAUTHTOKEN")
  };

  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, 3); // Modified
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    if (row[2].toLowerCase() != "sent") { // Added
      try {
        response_data = sendSms(row[0], row[1]);
        status = "sent";
      } catch(err) {
        Logger.log(err);
        status = "error";
      }
      sheet.getRange(startRow + Number(i), 3).setValue(status);
    }
  }
}

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您将200位或更少的收件人放在以一周中的几天(即星期日,星期一,星期二,星期三,星期三,星期四,星期五,星期六)命名的工作表上,则可以保证每分钟不足15名。实际上,只要您在任何一张纸上的收件人少于200个,就可以在任意一周内为您想要的名称命名,然后在同一周内再次使用这些名称。然后您将自己限制为每天的最大数量。

function sendAll() {
  var shA=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];//sheet names
  var sheet = SpreadsheetApp.getActive().getSheetByName(shA[new Date().getDay()])
  var startRow = 2; 
  var numRows = sheet.getLastRow() - 1; 
  var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Modified
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    if (row[2].toLowerCase() != "sent") { // Added
      try {
        response_data = sendSms(row[0], row[1]);
        status = "sent";
      } catch(err) {
        Logger.log(err);
        status = "error";
      }
      sheet.getRange(startRow + Number(i), 3).setValue(status);
      Utilities.sleep(4000);//4 seconds
    }
  }
}