google-apps-script - 尝试通过 google appscript 添加访客
问题描述
我正在尝试通过谷歌应用程序脚本将访客添加到日历中,该脚本通过谷歌表单从用户那里获取日历请求--->然后如果没有冲突,它会更新谷歌在线 Excel 表,如果没有冲突则进行预订,所有这些都很好但是如果用户尝试编辑预订时间,他们不能因为他们不是日历的所有者进行编辑所以我能想到的唯一解决方法是从提交的请求中添加电子邮件并将它们添加为访客到那个特定的事件,但它以失败告终。
- 用户提交带有他的电子邮件名称时间等的谷歌表单请求。
- 谷歌表单更新谷歌excel表并检查没有冲突。
- 成功更新日历并向用户的电子邮件发送确认。
- 用户需要在日历上编辑他的预订时间,但不能因为他不是客人也不能编辑日历(试图通过自动将他作为客人添加到请求的事件中来解决这个问题。
在此处阅读有关添加位置的解决方案,但未能成功将用户添加为访客。
尝试添加
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 功能。
谢谢
解决方案
推荐阅读
- c++ - 无法通过单词/或 12 个字符打印字符串
- javascript - 您可以在网格列内的下拉列表中将字符转换为大写吗?
- python - 在 FreeBSD 上使用旧 python 版本 (2.7.3) 的 SSL
- python - 发布我的博客ni的内容后,它们以html格式显示,而不是纯文本
- php - 用静态消息替换面包屑
- loops - 如何找出每个进程(或数据)使用数组遍历的次数
- mysql - MYSQL Workbench - 触发器不检查我的插入
- javascript - 如何在套接字 io 中设置访问控制允许来源
- r - 根据时间段对图表的不同区域进行着色
- c# - 服务器无法解密配置文件中的连接字符串