попытка добавить гостя через Google appscript

#google-apps-script #google-calendar-api #google-apps

#google-apps-script #google-calendar-api #google-приложения

Вопрос:

Пытаюсь добавить гостя в календарь с помощью скрипта Google apps, который принимает запрос календаря от пользователя через Google forms —> затем он обновляет онлайн-таблицу Excel Google, если нет конфликтов, и делает резервацию, если конфликта нет, все это работает нормально, но если пользователь пытается отредактировать время длярезервирование, которое они не могут, поскольку они не являются владельцем календаря, чтобы вносить изменения, поэтому единственное решение, о котором я мог подумать, — это добавить туда электронное письмо из отправленного запроса и добавить их в качестве гостя к этому конкретному событию, но оно закончилось неудачно.

  1. пользователь отправляет запрос формы Google со своим именем электронной почты, Временем и т. Д.
  2. google forms обновляет таблицу Google Excel и проверяет отсутствие конфликтов.
  3. успешно обновляет календарь и отправляет подтверждение на электронную почту пользователя.
  4. Пользователю необходимо отредактировать время своего бронирования в календаре, но он не может, поскольку он не гость и не может редактировать календарь (пытаясь решить эту проблему, автоматически добавив его в качестве гостя на запрошенное событие.

прочитайте so решения здесь о добавлении местоположения, но не удалось добавить пользователя в качестве гостя.

пытался добавить

 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.

Спасибо

Комментарии:

1. @Cooper вы правы насчет lastRow, но эта система бронирования не очень динамична в отношении количества сделанных бронирований, но хорошо соблюдается. Что касается общего доступа, я бы не хотел делиться им со всеми. добавить гостя должно быть достаточно хорошо, так как после добавления этого пользователя в качестве гостя к этому событию, созданному в календаре, гость может редактировать время. Ссылка

2. @Serg-insas есть идеи