无法使用Javascript(已与服务帐户共享)在Google日历上插入活动

时间:2017-09-22 11:56:52

标签: javascript google-calendar-api

我正在尝试使用Google日历创建新活动,我目前正在使用他们的Javascript API。当我尝试执行请求时,我得到的响应是403 - 被禁止。我使用Google Developers page上提供的API Explorer测试了相同的请求,并且它正常工作。

在互联网上搜索问题时,我找到了一些解决方案,人们说我需要与我创建的Google服务帐户共享我的日历。我做到了它仍然无法正常工作。你们有什么想法我能解决它吗?

修改

初​​始化:

gapi.client.init({
            discoveryDocs: DISCOVERY_DOCS,
            clientId: CLIENT_ID,
            scope: SCOPES
        }).then(function () {
            if (!(gapi.auth2.getAuthInstance().isSignedIn.get())) {
                handleAuthClick();
            }
            else {
                getAvailableTimes();
            }
            // Listen for sign-in state changes.
            // gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);
        });

插入操作:

modal.result.then(function (interview) {
            var eventRequest = gapi.client.calendar.events.insert({
                calendarId: interview.recruiter.email,
                sendNotifications: true,
                resource: {
                    summary: 'Interview with ' + interview.candidate.name,
                    description: '',
                    start: {
                        dateTime: interview.start
                    },
                    end: {
                        dateTime: interview.end
                    },
                    attendees: [
                        {email: interview.recruiter.email},
                        {email: interview.candidate.email}
                    ],
                    reminders: {
                        useDefault: false,
                        overrides: [
                            {method: 'email', minutes: 60 * 24},
                            {method: 'email', minutes: 60},
                            {method: 'popup', minutes: 60},
                            {method: 'email', minutes: 10},
                            {method: 'popup', minutes: 10}
                        ]
                    }
                }
            });
        })

2 个答案:

答案 0 :(得分:1)

服务帐户不是典型的常规帐户。您提到的Events.insert页面中的示例并未使用服务帐户。它使用您的常规帐户。服务帐户需要进一步设置,如:

  1. Google Dev Console中启用了Calendar API
  2. 已创建服务帐户
  3. 存储p12密钥并将其存储在您稍后将使用它的项目文件夹中。
  4. 您还可以查看此SO post以获取更多参考资料以及此官方Service Accounts doc for Google APIs

答案 1 :(得分:1)

在搜索互联网上的解决方案时,我发现了导致此问题的原因。您无法使用Javascript API连接服务帐户,就像我使用的那样。 :(