Чтобы корректно создать событие в Google Календаре с использованием сервисного аккаунта и добавить конференцию (например, Google Meet), вам необходимо следовать определённым шагам, чтобы избежать ошибки `googleapi: Error 400: Invalid conference type value., invalid`.
### Шаги для создания события с конференцией
1. **Настройка сервиса и авторизация:**
Убедитесь, что у вас правильно настроен сервисный аккаунт и вы используете соответствующие библиотеки для работы с Google Calendar API. Убедитесь, что у вас есть все необходимые разрешения, и ваш сервисный аккаунт имеет право доступа к календарю, в который вы хотите добавлять события.
2. **Создание conferences:**
При создании события с конференцией, вы должны указать тип конференции. Например, чтобы создать конференцию Google Meet, вы должны использовать специальный идентификатор типа конференции.
3. **Пример кода:**
Вот пример функции на Go, которая показывает, как создать событие с конференцией Google Meet:
```go
package main
import (
"context"
"fmt"
"time"
"google.golang.org/api/calendar/v3"
"google.golang.org/api/option"
)
func CreateEvent(startDate time.Time, duration int, headerText string) (string, error) {
ctx := context.Background();
// Создание клиента Google Calendar API
srv, err := calendar.NewService(ctx, option.WithCredentialsFile("path_to_your_service_account_credentials.json"))
if err != nil {
return "", err
}
// Создание события
event := &calendar.Event{
Summary: headerText,
Start: &calendar.EventDateTime{DateTime: startDate.Format(time.RFC3339)},
End: &calendar.EventDateTime{DateTime: startDate.Add(time.Duration(duration) * time.Minute).Format(time.RFC3339)},
ConferenceData: &calendar.ConferenceData{
CreateRequest: &calendar.CreateConferenceRequest{
RequestId: "unique-request-id", // Убедитесь что id уникальный
ConferenceSolutionKey: &calendar.ConferenceSolutionKey{
Type: "hangoutsMeet",
},
},
},
}
// Создание события с конференцией
event, err = srv.Events.Insert("primary", event).ConferenceDataVersion(1).Do()
if err != nil {
return "", err
}
return event.HangoutLink, nil
}
func main() {
start := time.Now().Add(24 * time.Hour) // Завтра в это время
duration := 60 // продолжительность 60 минут
headerText := "Тестовое событие"
link, err := CreateEvent(start, duration, headerText)
if err != nil {
fmt.Println("Ошибка при создании события:", err)
} else {
fmt.Println("Событие создано, ссылка на конференцию:", link)
}
}
```
### Обратите внимание:
- `RequestId` должен быть уникальным для каждого запроса на создание конференции.
- Выберите правильный тип конференции, например `hangoutsMeet`, чтобы интегрировать Google Meet.
- Убедитесь, что у вашего сервисного аккаунта есть доступ к необходимым календарям и разрешения на создание видеоконференций.
Если вы всё сделали правильно, но по-прежнему получаете ошибку, убедитесь, что ваш сервисный аккаунт имеет соответствующие API разрешения в Google Cloud Console.