«Найди время» с помощью скрипта Google Apps - PullRequest
0 голосов
/ 08 апреля 2020

Учитывая 2 или 3 участника G Cal Invit, как я могу найти взаимно открытое время для всех участников?

Легко сделать в веб / мобильных интерфейсах , но как мне сделать sh это через Google Apps Script?

Этот ответ кажется близким , но не совсем то, что я хочу.

Вот что у меня так далеко. Это выбирает время ожидания в будущем. Я хотел бы найти способ найти взаимно доступное время для всех участников.

// This can be a shared calendar and you invite the administrators of this remote meetup.
const CALENDAR_NAME = "primary";

// Event name that pepole will see on their calendar
const MEETING_EVENT_SUMMARY_TITLE = "Let's Meet";

// Event description in the body of the meeting
const MEETING_DESCRIPTION_HTML = "<p>Spend a bit of time and get to know someone great inside your company. You might connect with someone brand new or re-connect with a familiar face. In any case, take a moment and get to know them.</p><p>You can reschedule this event yourself if this set time doesn\'t work for all attendees.</p>";


// Create the event. Attendes are an array of objects with at least email specified in each element, {email:<value>}
function createEvent(attendeesArray) {
  Logger.log("attendeesArray: "+ JSON.stringify(attendeesArray));
  
  
  // https://developers.google.com/calendar/v3/reference/events
  // The client-generated unique ID for this request. Clients should regenerate this ID for every new request. If an ID provided is the same as for the previous request, the request is ignored.
  var requestId = makeid_(3)+"-"+makeid_(3)+"-"+makeid_(3);
  Logger.log("requestId: "+requestId);
  
  
  // Get the shared calendar
  var calendars = CalendarApp.getCalendarsByName(CALENDAR_NAME);
  if (calendars.length == 0) {
    throw new Error(CALENDAR_NAME+" not found.");
  }
  
  var calendar = calendars[0].getId();
  
  // https://developers.google.com/apps-script/advanced/calendar#creating_events
  // https://stackoverflow.com/questions/50892845/how-do-i-use-google-apps-script-to-create-a-google-calendar-event-with-hangouts
  var calendarId = calendar;
  var start = getRelativeDate(1, 11, 0); // This could be improved to find a mutually open time, but this works for now.
  var end = getRelativeDate(1, 11, 20);
  var event = {
    summary: MEETING_EVENT_SUMMARY_TITLE,
    description: MEETING_DESCRIPTION_HTML,
    start: {
      dateTime: start.toISOString(),
      timeZone: 'America/Denver'
    },
    end: {
      dateTime: end.toISOString(),
      timeZone: 'America/Denver'
    },
    attendees: attendeesArray,
    guestsCanModify: true,
    colorId: 10,
    conferenceData: {
      createRequest: {
        conferenceSolutionKey: {
          type: "hangoutsMeet"
        },
        requestId: requestId
      }
    }
  };
  
  event = Calendar.Events.insert(event, calendarId, {"conferenceDataVersion": 1, sendUpdates: "all" });
  Logger.log('Event ID: ' + event.id);
  
  // Throw in a sleep to avoid G Suite throttling
  Utilities.sleep(500);
}

/**
 * Helper function to get a new Date object relative to the current date.
 * @param {number} daysOffset The number of days in the future for the new date.
 * @param {number} hour The hour of the day for the new date, in the time zone
 *     of the script.
 * @return {Date} The new date.
 */
function getRelativeDate(daysOffset, hour, minutes) {
  var date = new Date();
  date.setDate(date.getDate() + daysOffset);
  date.setHours(hour);
  date.setMinutes(minutes || 0);
  date.setSeconds(0);
  date.setMilliseconds(0);
  return date;
}

// https://stackoverflow.com/a/1349426
function makeid_(length) {
   var result           = '';
   var characters       = 'abcdefghijklmnopqrstuvwxyz';
   var charactersLength = characters.length;
   for ( var i = 0; i < length; i++ ) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
   }
   return result;
}

РЕДАКТИРОВАТЬ: Я нашел несколько SO ссылок, которые указали мне положительное направление и в официальных документах. Не разбираться в алгоритме поиска общего свободного времени среди 2 или 3 календарей .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...