为什么当我使用其 API 创建 google 资源日历时它会变成不可用房间?

问题描述 投票:0回答:3

我将通过其 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"
}

这是谷歌日历上的输出:

enter image description here

google-api google-calendar-api google-admin-sdk google-api-python-client
3个回答
0
投票

两个月后终于找到解决办法了!

事实上,主要问题与组织中其他用户创建的资源缺乏权限有关。为了解决这个问题,我使用了另一个名为 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
授权范围。


0
投票

提供的代码是使用 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()函数来设置 权限。


0
投票

您还可以使用 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

© www.soinside.com 2019 - 2024. All rights reserved.