首页 > 解决方案 > 尝试通过 google appscript 添加访客

问题描述

我正在尝试通过谷歌应用程序脚本将访客添加到日历中,该脚本通过谷歌表单从用户那里获取日历请求--->然后如果没有冲突,它会更新谷歌在线 Excel 表,如果没有冲突则进行预订,所有这些都很好但是如果用户尝试编辑预订时间,他们不能因为他们不是日历的所有者进行编辑所以我能想到的唯一解决方法是从提交的请求中添加电子邮件并将它们添加为访客到那个特定的事件,但它以失败告终。

  1. 用户提交带有他的电子邮件名称时间等的谷歌表单请求。
  2. 谷歌表单更新谷歌excel表并检查没有冲突。
  3. 成功更新日历并向用户的电子邮件发送确认。
  4. 用户需要在日历上编辑他的预订时间,但不能因为他不是客人也不能编辑日历(试图通过自动将他作为客人添加到请求的事件中来解决这个问题。

在此处阅读有关添加位置的解决方案,但未能成功将用户添加为访客。

尝试添加

var body = {
  'sendNotification': true,
  'attendees': attendees
};

var ret = Calendar.Events.patch(body, calendarId, eventId);

但没有成功

代码如下:

// Room Reservation

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();

// Calendar to output reservations to
var cal145 = CalendarApp.getCalendarById('xxxxxx@resource.calendar.google.com');

// Create use data from user submission
// This function submits data from the google form and inputs it into the "Room Reservation" sheet by the user
function Submission(){
  var row = lastRow;
  this.timestamp = sheet.getRange(row, 1).getValue();
  this.NameReason = sheet.getRange(row, 2).getValue();
  this.email = sheet.getRange(row, 3).getValue();
  this.date = sheet.getRange(row, 5).getValue();
  this.time = sheet.getRange(row, 6).getValue();
  this.duration = sheet.getRange(row, 7).getValue();
  this.room = sheet.getRange(row, 8).getValue();
  // Info not from spreadsheet
  this.roomInt = this.room.replace(/\D+/g, '');
  this.status;
  this.dateString = (this.date.getMonth() + 1) + '/' + this.date.getDate() + '/' + this.date.getYear();
  this.timeString = this.time.toLocaleTimeString();
  this.date.setHours(this.time.getHours());
  this.date.setMinutes(this.time.getMinutes());
  this.calendar = eval('cal' + String(this.roomInt));
  return this;
}

// Use duration to create endTime variable
function getEndTime(request){
  request.endTime = new Date(request.date);
  switch (request.duration){
    case "1 hour":
      request.endTime.setMinutes(request.date.getMinutes() + 60);
      request.endTimeString = request.endTime.toLocaleTimeString();
      break;
    case "2 hours":
      request.endTime.setMinutes(request.date.getMinutes() + 120);
      request.endTimeString = request.endTime.toLocaleTimeString();
      break;
    case "3 hours":
      request.endTime.setMinutes(request.date.getMinutes() + 180);
      request.endTimeString = request.endTime.toLocaleTimeString();
      break;
  }
}

// Check for appointment conflicts
function getConflicts(request){
  var conflicts = request.calendar.getEvents(request.date, request.endTime);
  if (conflicts.length < 1) {
    request.status = "Approve";

  } else {
    request.status = "Conflict";
  }

}

function draftEmail(request){
  request.buttonLink = "xxxxxxx ";
  request.buttonText = "New Request";
  switch (request.status) {
    case "Approve":
      request.subject = "Confirmation: " + request.room + " Reservation for " + request.dateString;
      request.header = "Confirmation";
      request.message = "Your room reservation has been scheduled.";
      break;
    case "Conflict":
      request.subject = "Conflict with " + request.room + "Reservation for " + request.dateString;
      request.header = "Conflict";
      request.message = "There is a scheduling conflict. Please pick another time."
      request.buttonText = "Reschedule";
      break;
  }
}

function updateCalendar(request){
  var event = request.calendar.createEvent(
    request.NameReason,
    request.date,
    //request.reason,
    request.endTime
    )
}

function sendEmail(request){
  MailApp.sendEmail({
    to: request.email,
    subject: request.header,
    htmlBody: makeEmail(request)
  })
  sheet.getRange(lastRow, lastColumn).setValue("Sent: " + request.status);
}



function sendinvite(request)
{


  request.addGuest(email);


}

// --------------- main --------------------

function main(){
  var request = new Submission();
  getEndTime(request);
  getConflicts(request);
  draftEmail(request);
  Logger.log(request);
  sendEmail(request);
  if (request.status == "Approve") updateCalendar(request);
  if (request.status == "Approve")
  {
   sendinvite(request);
  }
}

最终结果应该让用户编辑创建的事件的时间,尽管他不是日历的所有者。该功能应将用户作为客人添加到他请求的特定事件中,以便他可以编辑时间。

该脚本目前可以正常工作,无需添加访客 sendinvite 功能。

谢谢

标签: google-apps-scriptgoogle-calendar-apigoogle-apps

解决方案


推荐阅读