GSheets-在预约前1-2天自动向客户发送电子邮件

时间:2017-11-15 15:46:50

标签: google-apps-script google-sheets automation workflow google-form

我正在寻找一种方法(谷歌应用程序脚本,插件或其他方式),这将使用我的谷歌电子表格中的单元格值自动化约会提醒电子邮件。目前,我的工作流程是这样的:

  1. 我填写了我的客户ID和约会日期谷歌表格。
  2. 邮件合并会向客户发送确认电子邮件,通知他们约会的日期和时间。
  3. 我希望第三步是在约会日期前1-2天自动发送电子邮件,也许是在约会日期发送电子邮件的第4步提醒他们。

    Here is my sheet with dummy data and without mail merge formatting:

    虽然我已经看过这些论坛和堆栈交换,但我无法找到解决问题的方法。我发现人们正在努力实现类似,但主要是希望将电子邮件发送到静态电子邮件/电子邮件。我的需求更有活力。请帮忙。

    以下是我与之合作的内容:

    function sendEmail() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 2;  // First row of data to process
    var numRows = sheet.getLastRow()-1;   // Number of rows to process
    // Fetch the range of cells A2:B3
    var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
    // Fetch values for each row in the Range.
    var data = dataRange.getValues();
    //Logger.log(data)
    
    for (i in data) {
      var row = data[i];
      var date = new Date();
      date.setHours(0);
      date.setMinutes(0);
      date.setSeconds(0);
      //Logger.log(date);
      var sheetDate = new Date(row[9]);
     //Logger.log(sheetDate);
      var Sdate = Utilities.formatDate(date,'GMT-0600','MM:dd:yyyy')
      var SsheetDate = Utilities.formatDate(sheetDate,'GMT-0600', 'MM:dd:yyyy')
         Logger.log(Sdate+' =? '+SsheetDate)
            if (Sdate == SsheetDate){
              var emailAddress = row[8]; // Patient Email
              var message = row[6];row[7];       // Date and Time
              var subject = "Your appointment is in 1 day!." +message;
              MailApp.sendEmail(emailAddress, subject, message);
              //Logger.log('SENT :'+emailAddress+'  '+subject+'  '+message)
                }    
       }
      }
    

    我所指的并试图为我工作:

    Referencing by date/day- Google Forums

    Emails sent based on date- Google Forums:

    Emails sent based on date - Stack Overflow:

    Due Date Reminders - Stack Overflow

1 个答案:

答案 0 :(得分:0)

使用默认的通知组

创建日历事件

这是一个在日历上创建事件的功能,默认通知为1天,2天和1小时。您提供包含的数组 客户姓名,预约日期和预约时间如下: ['客户名称','11/31/2017','1:30:00 PM']

function testCreateEventWithReminders()
{
  createEventWithReminders(['Harry Dog','11/20/2017','1:30:00 PM']) 
}
//eA=[clientName,date,time]
function createEventWithReminders(eA)
{
  var minute=60*1000;
  var hour=60*minute;
  var day=24*hour;
  var cal=CalendarApp.getCalendarById('CalendarID');//You need to supply your calendarID
  var now=new Date().valueOf()
  var start=new Date(eA[1] + ' ' + eA[2]);
  var endValue=start.valueOf() + (hour);  
  var end=new Date(endValue);
  var event=cal.createEvent(eA[0], start, end);
  event.addEmailReminder(24*60);//reminders in minutes
  event.addEmailReminder(2*24*60);
  event.addEmailReminder(60);
}

以上您需要插入日历ID。如果你运行displayCalendarInfo,你应该能够确定日历名称和id是什么。

function displayCalendarInfo()//Use this function to determine calendar names and ids.
{
  var cals=CalendarApp.getAllCalendars();
  var s='Calendar Information';
  for(var i=0;i<cals.length;i++)
  {
    s+=Utilities.formatString('<br />Name: %s Id: %s', cals[i].getName(),cals[i].getId());
  }
  s+='<br /><input type="button" value="Close" onClick="google.script.host.close();" />';
  var ui=HtmlService.createHtmlOutput(s).setWidth(1200).setHeight(450);
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Calendar Data');
}

如果您想创建自己的非默认提醒,可以在输入数组中添加更多元素

附加说明:

  1. 函数createEventWithReminders(eA)的输入是['客户名称','mm / dd / yyyy','hh:mm:ss AM']形式的数组,其中日期和时间是预约。

  2. 我假设您可以将此功能集成到电子表格中。就我个人而言,我可能会把它变成一个包含的webapp,因为我喜欢使用Siri来完成我的大量数据输入,从而无需在我的移动设备上输入内容并让我有机会在我继续操作时输入提醒没有笔记本电脑的一天。