You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Calendar API插入事件失败问题求助

Google Calendar API 插入事件失败排查

问题背景

已完成授权,但调用Google Calendar API的insert接口添加事件失败,调整事件格式后仍无法解决。以下是React项目中触发添加事件的addEvents函数代码:

function addEvents() {
        gapi.load('client:auth2', () => {
            console.log('loaded client')

            gapi.client.init({
            apiKey: API_KEY,
            clientId: CLIENT_ID,
            discoveryDocs: DISCOVERY_DOCS,
            scope: SCOPES,
            })

            gapi.client.load('calendar', 'v3', () => console.log('bam!'));

            gapi.auth2.getAuthInstance().signIn()
            .then(() => {
                //for (const task of [...tasks]) {
                
                const eventStartTime = new Date()
                eventStartTime.setDate(eventStartTime.getDay() + 5)
                
                const eventEndTime = new Date()
                eventEndTime.setDate(eventEndTime.getDay() + 5)
                eventEndTime.setMinutes(eventEndTime.getMinutes() + 45)
                
                var event = {
                    'summary': 'Awesome Event!',
                    'location': '800 Howard St., San Francisco, CA 94103',
                    'description': 'Really great refreshments',
                    'start': {
                      'dateTime': '2023-04-01T09:00:00-07:00',
                      'timeZone': 'America/Los_Angeles'
                    },
                    'end': {
                      'dateTime': '2023-04-01T17:00:00-07:00',
                      'timeZone': 'America/Los_Angeles'
                    },
                    'recurrence': [
                      'RRULE:FREQ=DAILY;COUNT=2'
                    ],
                    'attendees': [
                      {'email': 'lpage@example.com'},
                      {'email': 'sbrin@example.com'}
                    ],
                    'reminders': {
                      'useDefault': false,
                      'overrides': [
                        {'method': 'email', 'minutes': 24 * 60},
                        {'method': 'popup', 'minutes': 10}
                      ]
                    }
                  }
                
                var request = gapi.client.calendar.events.insert({
                    'calendarId': 'primary',
                    'resource': event,
                });
                request.execute();
                //}
            })
            
        })
        
    }

错误信息

控制台报错:gapi.client.calendar is undefined

解决方案

问题核心是异步操作未按顺序等待,API客户端和日历服务未加载完成就执行了插入事件的逻辑,修改后的代码如下:

function addEvents() {
    gapi.load('client:auth2', async () => {
        console.log('loaded client');

        // 等待客户端初始化完成
        await gapi.client.init({
            apiKey: API_KEY,
            clientId: CLIENT_ID,
            discoveryDocs: DISCOVERY_DOCS,
            scope: SCOPES,
        });

        // 等待日历API加载完成
        await new Promise(resolve => {
            gapi.client.load('calendar', 'v3', resolve);
        });
        console.log('bam!');

        // 等待登录授权完成
        await gapi.auth2.getAuthInstance().signIn();

        const event = {
            'summary': 'Awesome Event!',
            'location': '800 Howard St., San Francisco, CA 94103',
            'description': 'Really great refreshments',
            'start': {
                'dateTime': '2023-04-01T09:00:00-07:00',
                'timeZone': 'America/Los_Angeles'
            },
            'end': {
                'dateTime': '2023-04-01T17:00:00-07:00',
                'timeZone': 'America/Los_Angeles'
            },
            'recurrence': [
                'RRULE:FREQ=DAILY;COUNT=2'
            ],
            'attendees': [
                {'email': 'lpage@example.com'},
                {'email': 'sbrin@example.com'}
            ],
            'reminders': {
                'useDefault': false,
                'overrides': [
                    {'method': 'email', 'minutes': 24 * 60},
                    {'method': 'popup', 'minutes': 10}
                ]
            }
        };

        const request = gapi.client.calendar.events.insert({
            'calendarId': 'primary',
            'resource': event,
        });
        
        // 添加回调处理执行结果,便于排查后续问题
        request.execute((response) => {
            if (response.error) {
                console.error('添加事件失败:', response.error);
            } else {
                console.log('事件添加成功:', response.htmlLink);
            }
        });
    });
}

额外注意事项

  • 确保DISCOVERY_DOCS配置正确,需包含日历API的发现文档:["https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest"]
  • 如果仍有问题,检查授权SCOPES是否包含https://www.googleapis.com/auth/calendar.events(或更高级的日历权限)

内容的提问来源于stack exchange,提问作者villain123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:43:11