无法为现有的Google日历活动创建Google Meet会议 更新参考

问题描述

我有一个可以在Google日历中正确生成事件的应用程序,现在,我希望能够通过为其生成Google Meet链接修改任何事件。理想情况下,我希望生成不包含任何日历事件的Google Meet链接,但是据我目前的研究,唯一的方法是将其创建为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","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调用似乎可以正常工作。但是即使添加conferenceDataVersionconferenceData似乎也不会改变事件。

如果我在Google日历中手动更改活动,可以看到会议详细信息已添加到活动中。

解决方法

根据Calendar API Events Resource documentation

hangoutLink>与此事件相关联的Google+视频群聊的绝对链接。 只读

从本质上讲,您无法通过日历API更改hangoutLink

您可以做的是在Google Issue Tracker here上为该问题加注星号。

更新

您可以通过发出关注请求来向事件添加hangoutLink,但是,您不能更改链接,因为该链接是自动分配的:

请求

PATCH https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId?conferenceDataVersion=1

身体

{
  "conferenceData": {
    "createRequest": {
      "conferenceSolutionKey": {
        "type": "eventNamedHangout"
      },"requestId": "SOME_STRING"
    }
  }
}

参考

,

由于@ ale13(Meet in 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值作为会议数据正文的一部分来提供。这是一个setter(setConferenceDataVersion),必须调用patch结果。

通过此更改,将接收完整的事件数据,可从中提取与会议相关的不同链接。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...