使用 Nodejs 的服务帐户在谷歌日历中插入事件

Posted

技术标签:

【中文标题】使用 Nodejs 的服务帐户在谷歌日历中插入事件【英文标题】:Insert event in google calendar using service account with Nodejs 【发布时间】:2020-05-25 05:23:32 【问题描述】:

我无法通过服务帐户使用 Nodejs 插入事件。 服务帐户电子邮件已添加到具有更改事件权限的帐户中 我的 nodejs 代码在谷歌云功能上运行 这是我的代码:

const 
  google
 = require('googleapis');


var event = 
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': 
    'dateTime': '2020-02-10T13:00:00-05:00'
  ,
  'end': 
    'dateTime': '2020-02-10T15:00:00-05:00'
  ,
  'attendees': [
    'email': 'Emailh@domain.com'
  ],
  'reminders': 
    'useDefault': false,
    'overrides': [
        'method': 'email',
        'minutes': 24 * 60
      ,
      
        'method': 'popup',
        'minutes': 10
      ,
    ],
  ,
;

exports.helloWorld = (req, res) => 
  google.auth.getClient(
    scopes: 'https://www.googleapis.com/auth/calendar',
  ).then(auth => 
    const calendar = google.calendar(
      version: 'v3',
      auth
    );
    calendar.events.insert(
      auth: auth,
      calendarId: 'MyCalendarID',
      resources: event,
    , function(err, event) 
      if (err) 
        console.log('There was an error contacting the Calendar service: ' + err);
        return;
      
      console.log('Event created: %s', event.htmlLink);
    );
  )

;

当我使用读取函数时,相同的代码可以正常工作。 有什么想法吗?

【问题讨论】:

https://www.googleapis.com/auth/calendar.events read/write access to Events (developers.google.com/calendar/auth) 我试过了,它并没有改变任何东西,根据这个文件,developers.google.com/calendar/v3/reference/events/insert 我们可以把googleapis.com/auth/calendar.events 或googleapis.com/auth/calendar 放在 联系日历服务时出错:错误:缺少结束时间。 我在我的函数中添加了这个: res.set('Access-Control-Allow-Origin', "*"); res.set('Access-Control-Allow-Methods', 'GET, POST'); res.set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type:application/json, Accept'); 也许试试npm uninstall googleapis 然后npm install googleapis@latest --save 【参考方案1】:

这是一个已知的错误

使用服务帐户将与会者添加到活动时,会出现issue。

当前的解决方法是冒充使用G Suite Domain-wide Delegation 的用户。如果这样做,您应该能够创建与参与者一起的活动。

另一种选择是从活动创建请求中删除参与者。

【讨论】:

你是最棒的,我已经删除了与会者,它有效!但我仍然没有参加者,这并不性感。谷歌应该努力解决这个问题。 任何看到此问题的人,我建议您为该问题加注星标,以鼓励 Google 尽快修复它!

以上是关于使用 Nodejs 的服务帐户在谷歌日历中插入事件的主要内容,如果未能解决你的问题,请参考以下文章

从 Google 服务帐户编辑 Google 日历事件:403

使用 php 和服务帐户创建谷歌日历事件 - 身份验证问题

如何在谷歌工作区插件中使用 UrlFetchApp.fetchAll 和日历 API

如何从单个谷歌帐户的多个谷歌日历中获取所有事件?

PHP Google 服务帐户身份验证日历 API

使用服务帐户插入 Google 日历条目