我将通过其 API 创建一个谷歌资源日历室(即
https://admin.googleapis.com/admin/directory/v1/customer/my_customer/resources/calendars
)。但问题是,当我创建一个房间时,它会变成谷歌日历房间内不可用(划掉)的房间,而且我找不到任何属性使其可用!
这是正文请求/响应:
{
"kind": "admin#directory#resources#calendars#CalendarResource",
"etags": "\"CTyc505ppdmJR2motHVsU17kzItOkPo5vYViqlSF0rU/FB0b765ZgWIpTBaxn5YQIwZWWNM\"",
"resourceId": "9f698cdc-84f9-4688-95a7-c2207b4fa7ae",
"resourceName": "StackOverflow Test",
"generatedResourceName": "Orangery Hildesheim Nordstadt-EG-StackOverflow Test (3)",
"resourceEmail": "[email protected]",
"capacity": 3,
"buildingId": "Orangery-Hildesheim-Nordstadt",
"floorName": "EG",
"resourceCategory": "CONFERENCE_ROOM"
}
这是谷歌日历上的输出:
两个月后终于找到解决办法了!
事实上,主要问题与组织中其他用户创建的资源缺乏权限有关。为了解决这个问题,我使用了另一个名为 ACL(访问控制级别) ref 的 google API,为其他用户设置权限。基本上,Google 资源实际上是 Google 资源日历,因此您可以使用 ACL API 来访问该日历。此外,访问该日历的参数是
resourceEmail
,作为相应资源日历的唯一 ID。
这是我为使不可用的资源变得可用(可预订)所做的事情:
POST https://www.googleapis.com/calendar/v3/calendars/calendarId/acl
calendarId
更改为 google 资源的 resourceEmail
的值。{
"scope": {
"type": "domain",
"value": "orangery.io" # if you selected type as `domain` you should write your domain name here.
},
"role": "writer"
}
[注意]:
通过此程序,您还需要
https://www.googleapis.com/auth/calendar
授权范围。
提供的代码是使用 Google Apps 脚本设置必要权限的解决方案。通过运行此脚本,您应该能够为 Google 资源日历设置必要的权限,这可能会解决“没有可用空间”问题。
注意:在使用此代码之前,请确保您已在 Apps 脚本项目中启用 Google Calendar API 并设置 OAuth2 身份验证。这对于脚本拥有修改日历 ACL 所需的权限是必要的。
function setCalendarPermissions() {
var domain = "domainName";
var calendarIds = [
"calendarId"
];
for (var i = 0; i < calendarIds.length; i++) {
var calendarId = calendarIds[i];
addDomainPermission(calendarId, domain);
}
}
function addDomainPermission(calendarId, domain) {
var calendarService = CalendarApp.getCalendarById(calendarId);
if (calendarService) {
var acl = {
"role": "writer",
"scope": {
"type": "domain",
"value": domain
}
};
// Use Calendar API to add the ACL
// Note: You will need to enable the Calendar API and set up OAuth2 authentication for this to work.
var url = "https://www.googleapis.com/calendar/v3/calendars/" + calendarId + "/acl";
var options = {
"method": "post",
"headers": {
"Authorization": "Bearer " + ScriptApp.getOAuthToken()
},
"contentType": "application/json",
"payload": JSON.stringify(acl)
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
} else {
Logger.log("Calendar with ID " + calendarId + " not found.");
}
}
请在执行前编辑 setCalendarPermissions() 函数并填充以下变量:
domain:此变量应设置为您的域名(例如, “example.com”)。
calendarIds:包含日历 ID 的数组 您要为其设置权限的日历。该函数循环遍历 每个日历ID并调用addDomainPermission()函数来设置 权限。
您还可以使用 Google Apps Manager (GAM) 更新 Google 日历的 ACLS:
gam calendar <Google Calendar Email Address> update acls writer domain:<Your Domain>
https://sites.google.com/jis.edu.bn/gam-commands/services/calendar#h.m9cq1z2elgbh