为特定的重复窗口安排Google App Script功能

时间:2018-04-11 18:01:05

标签: google-apps-script crontrigger

我正在尝试安排Apps脚本功能。我需要电子邮件从上午11点到晚上9点每2小时触发一次周一至周六。

我编写了以下代码来为每天创建触发器:

function createTriggers() {

  var days = [ScriptApp.WeekDay.MONDAY, 
              ScriptApp.WeekDay.TUESDAY,
              ScriptApp.WeekDay.WEDNESDAY, 
              ScriptApp.WeekDay.THURSDAY, 
              ScriptApp.WeekDay.FRIDAY,
              ScriptApp.WeekDay.SATURDAY];

  for (var i=0; i<days.length; i++) { 
    ScriptApp.newTrigger('emailDashboard')
      .timeBased().onWeekDay(days[i])
      .everyWeeks(1).everyHours(2).create();
  }
}

当我运行上面的内容时,我收到以下错误:

  

“时钟触发器的重复间隔已经设置。(第79行,文件”代码“)”

我无法找到有关该响应的任何内容,并且它实际上并未创建触发器。我假设我上面的内容会每2小时给我发一次周一至周六的电子邮件。我不知道如何从中央上午11点开始到中央时间晚上9点结束。

1 个答案:

答案 0 :(得分:1)

您的问题来自过度特异性。您使用的许多选项(例如onWeekDayeveryWeeks)是互斥的。您可以在Apps Script reference page上阅读有关课程的更多信息。

更简单的方法是安排所需的粒度:

ScriptApp.newTrigger("myFunction").timeBased().everyHours(2).create();

然后检查当前时间是否符合您的标准:

  1. 不是星期天
  2. 当地时间大于上午11点
  3. 当地时间不到晚上9点
  4. 值得注意的是,当您使用小时特定级别时,Google会按照其选择的分钟值运行您的功能。

    与其他触发的功能一样,有一个可用的event object

    一个示例鉴别器,假设您只关心UTC值(这是事件对象中所有值的语言环境):

    function getsCalledByClockTrigger(e) {
      if(!e) throw new Error("Called from the Script Editor");
      else console.log(e); // Show this event object in Stackdriver logs.
    
      // Check that it isn't UTC Sunday.
      if(e["day-of-week"] === 7)
        return;
    
      // Checking the UTC hour is between 11 AM and 9 PM.
      if(e.hour < 11 || e.hour > 21)
        return;
    
      /* Do stuff */
    }
    

    使用var now = new Date()检查非UTC值的鉴别器可能最简单,并检查Date等各种now.getDay()属性。