使用Google Calendar API创建活动时无法修改组织者的问题咨询
问题核心原因
- Google Calendar API的
organizer字段为只读属性,无法在events.insert请求中直接通过传入参数修改,系统会自动将该字段设置为当前发起请求的认证账号。 - 你的服务账号JWT客户端配置错误,未正确配置「域用户模拟」,导致请求身份是服务账号本身,而非你需要设置的组织者账号。
events.move方法的作用是将事件从一个日历迁移到另一个日历,且你的调用时机错误:events.insert是异步请求,你在请求未返回、未拿到有效eventId时就调用move,写死的eventId无法匹配到实际创建的事件,自然不会生效。
前置配置要求
首先确认你已经在GSuite管理员后台完成服务账号的全域权限委派配置:
- 进入GSuite管理后台「安全」→「访问和数据控制」→「API控件」→「域范围委派」
- 为你的服务账号客户端ID添加授权范围:
https://www.googleapis.com/auth/calendar、https://www.googleapis.com/auth/calendar.events - 注意:仅支持模拟你GSuite域内的用户作为组织者,无法模拟域外普通Gmail账号
修正后的代码
var { google } = require("googleapis"); var serviceAccount = require("../config/servicekeys.json"); const scopes = [ 'https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events' ] // 第五个参数为要模拟的组织者邮箱,删除多余的serviceAccount_id参数 var jwtClient = new google.auth.JWT( serviceAccount.client_email, null, serviceAccount.private_key, scopes, "durga.dasari@gmail.com", // 这里填你要设为组织者的域内用户邮箱 ); jwtClient.authorize(function (err, tokens) { if (err) { console.log("授权失败:", err); return; } console.log("授权成功", tokens); }); const api = google.calendar({ version: "v3", auth: jwtClient }); var event = { 'summary': 'Calendar Service', 'description': 'Meeting Invite', 'start': { 'dateTime': '2021-09-30T18:00:00', 'timeZone': 'Asia/Shanghai' // 建议补充时区,避免时间偏移 }, 'end': { 'dateTime': '2021-09-30T19:00:00', 'timeZone': 'Asia/Shanghai' }, 'attendees': [ { rsvp: true, responseStatus: 'needsAction', displayName: "sai krishna", email: "krishnadurga@gmail.com", } ], guestsCanSeeOtherGuests: true, 'guestsCanInviteOthers': true, 'visibility': 'public', 'reminders': { 'useDefault': false, 'overrides': [ { 'method': 'email', 'minutes': 24 * 60 }, { 'method': 'popup', 'minutes': 10 }, ] }, } // 不需要额外调用move方法,直接插入事件即可,组织者会自动设置为你模拟的用户 api.events.insert({ calendarId: 'primary', resource: event, sendNotifications: true, sendUpdates: 'all', }, function (err, event) { if (err) { console.log('创建事件失败: ' + err); return; } console.log('事件创建成功: ', event.data.htmlLink); });
内容的提问来源于stack exchange,提问作者careerquo
相关产品推荐
相关产品推荐

