使用服务账号创建Google Calendar Meet事件遇400错误求助
问题解决方案
错误googleapi: Error 400: Invalid conference type value., invalid的核心原因是会议类型参数值不匹配当前API版本要求,结合你使用的google.golang.org/api@v0.213.0/calendar/v3版本,按以下步骤修复:
1. 修正会议类型参数
将ConferenceSolutionKey.Type的值从"hangoutsMeet"改为"googleMeet"。Google Calendar API在后续版本中已将Meet会议的类型标识更新为googleMeet,旧值hangoutsMeet已不再被支持。
2. 修复变量名重复问题
代码中创建事件时的变量event被重新声明,虽然不影响编译,但会导致原事件定义的变量被遮蔽,建议重命名返回的事件变量(比如createdEvent)。
3. 正确获取Meet会议链接
原代码使用event.HangoutLink获取链接,该字段已逐渐被弃用,建议从ConferenceData.EntryPoints中提取官方推荐的会议链接。
修改后的完整代码
func CreateEvent(startDate time.Time, duration int, headerText string) (string, error) { endDate := startDate.Add(time.Hour * time.Duration(duration)) event := &calendar.Event{ Summary: headerText, Description: "AutomateCreate", Start: &calendar.EventDateTime{ DateTime: startDate.Format(time.RFC3339), TimeZone: "Europe/Moscow", }, End: &calendar.EventDateTime{ DateTime: endDate.Format(time.RFC3339), TimeZone: "Europe/Moscow", }, ConferenceData: &calendar.ConferenceData{ CreateRequest: &calendar.CreateConferenceRequest{ ConferenceSolutionKey: &calendar.ConferenceSolutionKey{ Type: "googleMeet", // 修正为当前API支持的类型 }, RequestId: uuid.New().String(), }, }, } // 重命名返回变量,避免遮蔽原event createdEvent, err := calendarService.Events.Insert("calendar@gmail.com", event).ConferenceDataVersion(1).Do() if err != nil { return "", err } // 从ConferenceData中提取Meet链接 var meetLink string if createdEvent.ConferenceData != nil && len(createdEvent.ConferenceData.EntryPoints) > 0 { for _, entry := range createdEvent.ConferenceData.EntryPoints { if entry.EntryPointType == "video" { meetLink = entry.Uri break } } } text := createdEvent.Summary + "\n" + meetLink return text, nil }
额外说明
ConferenceDataVersion(1)参数必须保留,这是创建带会议的事件时API要求的必要参数。RequestId使用UUID确保唯一性,这部分无需修改。
内容的提问来源于stack exchange,提问作者lorenso
相关产品推荐
相关产品推荐

