首页 > 解决方案 > 在 GAS 中重新运行的函数

问题描述

我正在使用 GAS 发送和接收文本。有一个函数可以发送文本(sendTexts.gs),一个函数可以接收(receiveTexts.gs)。我将这两个功能都链接到工作表上的各个按钮,但是当我运行一个功能时,两者都在运行(每次都会发送文本)。是否有缓存或需要清除的东西?receiveTexts 在代码中没有可以在其中发送消息的命令,并且根据记录器测试,我知道当我只单击一个时两者都在运行。编辑:这也发生在 GAS“终端”中。如果我在脚本编辑器中单击运行,则两者都会运行。

这是带有个人/个人信息的代码(代码/电话号码已编辑):

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

  var payload = {
    "To": to,
    "Body" : body,
    "From" : "EDIT"
  };

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

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

  UrlFetchApp.fetch(messages_url, options);
}

function sendAll() {
  var spreadsheet = SpreadsheetApp.getActive();
  var text = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Meta')).getRange('B4').getValue();
  var playerArray = getMeta();
  Logger.log(text);
  for (i=0; i<playerArray.length;i++) {
    try {
      var number = playerArray[i][1];
      Logger.log(number);
      response_data = sendSms(number, text);
      status = "sent";
    } catch(err) {
      Logger.log(err);
      status = "error";
    }
    Logger.log(status);
  }
}

function sendTexts() {
  sendAll();
}
Logger.log("ran send texts");

这是具有相同调整的接收文本代码:

function receiveTexts() {
  var spreadsheet = SpreadsheetApp.getActive();
  var ACCOUNT_SID = "EDIT";
  var ACCOUNT_TOKEN = "EDIT";
  var toPhoneNumber = "+EDIT";
  var sheet = spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Meta'), true);
  var playerArray = getMeta();
  var numberToRetrieve = playerArray.length;
  var hoursOffset = 0;
  var options = {
    "method" : "get"
  };
  options.headers = {
    "Authorization" : "Basic " + Utilities.base64Encode(ACCOUNT_SID + ":" + ACCOUNT_TOKEN)
  };
  var url="https://api.twilio.com/2010-04-01/Accounts/" + ACCOUNT_SID + "/Messages.json?To=" + toPhoneNumber + "&PageSize=" + numberToRetrieve;
  var response = UrlFetchApp.fetch(url,options);
  // -------------------------------------------
  // Parse the JSON data and put it into the spreadsheet's active page.
  // Documentation: https://www.twilio.com/docs/api/rest/response
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Meta'), true);
  var numRounds = spreadsheet.getRange('B2').getValue();
  var theSheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Attacks'),true);
  var theColumn = (numRounds*2)+1;
  var dataAll = JSON.parse(response.getContentText());
  for (i=0; i<dataAll.messages.length; i++){
    var sentNumber = dataAll.messages[i].from;
    Logger.log(sentNumber);
    for (k=0; k<playerArray.length;k++){
      Logger.log(playerArray[k][1]);
      if (playerArray[k][1]==sentNumber){
        var player = k;
        Logger.log('Success');
        Logger.log(player);
        break;
      }
    }
    var playerRow = playerArray[player][0];
    Logger.log(playerRow);
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Attacks'),true);
    theSheet.getRange(playerRow, theColumn).setValue(dataAll.messages[i].body);

  }
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Meta'), true);
  sheet.getRange(2,2).setValue(numRounds +1);
}
Logger.log("texts received ran");

EDIT2:我将 getMeta 分离到一个单独的文件中。现在,当我运行 getMeta 时,它还会运行其他两个脚本。任何时候运行任何一个脚本,所有三个都会运行。这让我觉得它与代码无关,但与某些设置或某事有关。侧边栏中脚本的顺序是否重要?我觉得不是因为运行这三个中的任何一个都会导致所有三个都运行。

标签: javascriptgoogle-apps-script

解决方案


推荐阅读