【问题标题】:Unable to create a Google meet conference for existing Google calendar event无法为现有的 Google 日历活动创建 Google 会议
【发布时间】:2020-10-26 16:21:31
【问题描述】:

我有一个可以在 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 调用似乎可以工作。但即使添加 conferenceDataVersionconferenceData 似乎也不会改变事件。

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

【问题讨论】:

    标签: clojure google-calendar-api google-meet


    【解决方案1】:

    根据Calendar API Events Resource documentation

    hangoutLink > 指向与此活动相关的 Google+ 环聊的绝对链接。 只读

    所以本质上,您不能通过日历 API 更改 hangoutLink

    您可以改为在 Google 问题跟踪器 here 上为该问题加注星标 ★。

    更新

    您可以通过发出关注请求将hangoutLink 添加到活动中,但是,您不能更改自动分配的链接:

    请求

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

    身体

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

    参考

    【讨论】:

    • 在我的情况下,我想要为给定的活动创建一个全新的会议链接,因为我的活动目前没有。
    • 谢谢!但是由于我使用的是 Clojure 的 Java API,我如何使用 Java 来实现呢? (或 Clojure?)
    • 请检查此答案here。 @jbarren
    • 这个链接非常有价值,它帮助我了解了我必须为我的 Clojure 解决方案更改的内容。谢谢!
    【解决方案2】:

    感谢@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 结果上调用。

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

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2019-10-30
      • 2023-03-07
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2017-01-24
      • 1970-01-01
      相关资源
      最近更新 更多