Как корректно создать событие в Google Календаре с использованием сервисного аккаунта?

Как я могу исправить ошибку, получаемую при создании события с конференцией, которая звучит как: <br/> <pre><code class="bash">googleapi: Error 400: Invalid conference type value., invalid</code></pre> <br/>? Я использую следующую функцию для создания события: <br/> <pre><code class="go">func CreateEvent(startDate time.Time, duration int, headerText string) (string, error) { ... }</code></pre> <br/> При этом, если я не добавляю конференцию, событие успешно создается.
  • 17 декабря 2024 г. 16:33
Ответы на вопрос 2
Чтобы корректно создать событие в 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.
Где это вы про hangoutsMeet нашли? Я только eventHangout нагуглил. 
P. S. Вроде новая строка - это \n , а не /n ?
Похожие вопросы