Невозможно создать конференцию Google Meet для существующего события календаря Google
У меня есть приложение, которое может правильно генерировать события в календаре Google, и теперь я хочу иметь возможность изменять любое событие, создавая для него ссылку на встречу Google. В идеале я хотел бы создавать ссылки встреч Google без каких-либо событий календаря, но, насколько я понял, единственный способ на данный момент - создать его как часть события календаря Google.
Я выполнил шаги https://developers.google.com/calendar/create-events?hl=en_US#java, и у меня появилась следующая функция:
(defn add-meet-link-to-calendar-event
"Adds a meet link to a calendar event."
[google-ctx calendarId input-event]
(if input-event
(let [calendar-service (build-calendar-service google-ctx)
events (doto (.events ^Calendar calendar-service)
assert)
conf-req-data (doto (CreateConferenceRequest.)
(.setRequestId (generate-random-string))
(.setConferenceSolutionKey (.setType (ConferenceSolutionKey.)
"hangoutsMeet")))
conference-data (doto (ConferenceData.)
(.setCreateRequest conf-req-data)
)
event (doto input-event
(.setConferenceData conference-data)
(.set "conferenceDataVersion" 1)
(.set "sendNotifications" true)
)
eventId (get event "id")
adding-link (.patch events calendarId eventId event)]
(prn "Before executing at add-meet-link-to-calendar-event" calendarId eventId event events)
(.execute adding-link))))
Как часть входного события для этой функции, я передаю следующий результат другой функции, которая извлекает объект события из календаря Google:
{"attendees" [{"email" "jjj@company.com",
"responseStatus" "needsAction"}
{"email" "main@company.com",
"organizer" true,
"responseStatus" "accepted",
"self" true}],
"created" #object[com.google.api.client.util.DateTime 0x686d6e12 "2020-10-26T15:27:49.000Z"],
"creator" {"email" "main@company.com",
"self" true},
"end" {"dateTime" #object[com.google.api.client.util.DateTime 0x5a909950 "2020-10-24T22:30:00.000+02:00"]},
"etag" "\"3207454201190000\"",
"htmlLink" "https://www.google.com/calendar/event?eid=M25wb2RtbnNsNWN2N3E3MGVsc2RvYTQwc2ogbmFpaGFAdWJpa2FyZSAAAA",
"iCalUID" "3npodmnsl5cv7q70elsdoaAAAA@google.com",
"id" "3npodmnsl5cv7q70elsdoaAAAA",
"kind" "calendar#event",
"organizer" {"email" "main@company.com", "self" true},
"reminders" {"useDefault" true},
"sequence" 0,
"start" {"dateTime" #object[com.google.api.client.util.DateTime 0x7bcdfc0e "2020-10-24T22:00:00.000+02:00"]},
"status" "confirmed",
"summary" "Another meet test",
"updated" #object[com.google.api.client.util.DateTime 0xd4057 "2020-10-26T15:45:00.595Z"]}
Я тестировал такие значения, как
summary
можно обновить, чтобы
patch
звонок вроде работает. Но даже добавив
conferenceDataVersion
и
conferenceData
похоже, не вносит изменений в происходящее.
Если я вручную изменю событие в календаре Google, я вижу, что к событию добавляются сведения о конференции.
2 ответа
Вот как мне в итоге удалось это исправить, благодаря информации из ссылки, предоставленной @ale13 ( Встречайте в Google Calendar API):
(defn add-meet-link-to-calendar-event
"Adds a meet link to a calendar event."
[google-ctx calendarId eventId]
(if eventId
(let [calendar-service (build-calendar-service google-ctx)
events (doto (.events ^Calendar calendar-service)
assert)
conf-req-data (doto (CreateConferenceRequest.)
(.setRequestId (generate-random-string))
(.setConferenceSolutionKey (.setType (ConferenceSolutionKey.)
"hangoutsMeet")))
conference-data (doto (ConferenceData.)
(.setCreateRequest conf-req-data)
)
event (doto (Event.)
(.setConferenceData conference-data))
adding-link (.patch events calendarId eventId event)
set-data-conf (.setConferenceDataVersion adding-link (int 1))
]
(prn "Before executing" calendarId event)
(.execute set-data-conf))))
Итак, главное здесь то, что
conferenceDataVersion
value не обязательно указывать как часть данных конференции. Это сеттер (setConferenceDataVersion
), который должен быть вызван на
patch
результат.
С этим изменением получаются полные данные о событии, из которых можно извлечь различные ссылки, связанные с конференцией.
Согласно документации ресурса Calendar API Events:
hangoutLink
> Абсолютная ссылка на видеовстречу в Google+, связанную с этим событием. Только для чтения.
По сути, вы не можете изменить
hangoutLink
через Calendar API.
Вместо этого вы можете отметить ★ проблему в Google Issue Tracker здесь.
Обновить
Вы можете добавить
hangoutLink
к событию, сделав следующий запрос, однако вы не можете изменить ссылку, поскольку она назначается автоматически:
Запрос
PATCH https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId?conferenceDataVersion=1
Тело
{
"conferenceData": {
"createRequest": {
"conferenceSolutionKey": {
"type": "eventNamedHangout"
},
"requestId": "SOME_STRING"
}
}
}