通过 API 编辑 Google 日历事件与外部 Link 的 URI

Editing Google Calendar Event Meets URI With External Link via API

我有代码在过去一年左右的时间里一直在工作,它通过 Google日历API.

例如,如果我点击下面的“加入 Google 会议”,它不会像往常一样进入 meets.google.com link,因为我将其替换为我自己的自定义 link。

不幸的是,由于某些原因,在过去的几周内它停止工作了。现在,当我的代码尝试编辑会议的 URI 时,它 returns 这个错误:Google::Apis::ClientError (invalid: Invalid Value)。我已经几个月没有更改代码了,而且最近才开始发生这种情况。

代码如下所示:

def update_event_meet_url(service, event, send_updates = "all")
    entry_points = [
      Google::Apis::CalendarV3::EntryPoint.new(
        entry_point_type: "video",
        label: meeting_url,
        uri: meeting_url,
      ),
    ]

    if original_phone_info.present?
      entry_points << Google::Apis::CalendarV3::EntryPoint.new(
        entry_point_type: original_phone_info["entry_point_type"],
        label: original_phone_info["label"],
        uri: original_phone_info["uri"],
        pin: original_phone_info["pin"],
        region_code: original_phone_info["region_code"],
      )
    end

    event_changes = {
      conference_data: Google::Apis::CalendarV3::ConferenceData.new(entry_points: entry_points),
    }

    updated_event = Google::Apis::CalendarV3::Event.new(event_changes)

    service.patch_event(
      gcalendar_id,
      event.id,
      updated_event,
      conference_data_version: 1,
      send_updates: send_updates,
    )
  end

我知道问题出在视频入口点,因为我用可用的 https://meets.google.com link 替换了 meeting_url 并且它起作用了。但是如果我尝试其他任何不是 meets.google.com 的东西,它就会出错。

我正在使用这个 Ruby gem https://github.com/googleapis/google-api-ruby-client.

如有任何帮助,我们将不胜感激!谢谢!

联系了 google 支持,看起来有一个最近的版本改变了 conferenceData.conferenceSolution.key.type 的行为。更多信息在这里:https://developers.google.com/calendar/releases#january_11_2021)我们

基本上我需要将我的会议解决方案密钥类型更改为 addOn 而不是 hangoutsMeet。我遇到的后续问题是我仍然需要一个 hangoutsMeet link,因为我使用的第三方 url 最终会重定向到 meets.google.com link。获得 hangoutsMeet link 的唯一方法是使用 conferenceData.conferenceSolution.key.type = hangoutsMeet.

创建初始事件

所以我所做的是使用 conferenceData.conferenceSolution.key.type = 'hangoutsMeet' 创建 google 事件,然后我进行了后续 patch_event 调用,将初始 hangoutsMeet 会议解决方案设置为 null 和创建了一个 addOn 类型的新 conferenceSolution。这样我就可以存储原始 meets.google.com link 然后使用 link 从我的第三方重定向 link.

def update_event_meet_url(service, event, send_updates = "all")
    entry_points = [
      Google::Apis::CalendarV3::EntryPoint.new(
        entry_point_type: "video",
        label: meeting_url,
        uri: meeting_url,
      ),
    ]

    conference_solution_key = Google::Apis::CalendarV3::ConferenceSolutionKey.new(type: "addOn")
    conference_solution =
      Google::Apis::CalendarV3::ConferenceSolution.new(key: conference_solution_key)
    event_changes = {
      conference_data: Google::Apis::CalendarV3::ConferenceData.new(
        conference_solution: conference_solution,
        entry_points: entry_points,
        create_request: nil,
      ),
    }

    updated_event = Google::Apis::CalendarV3::Event.new(event_changes)

    service.patch_event(
      gcalendar_id,
      event.id,
      updated_event,
      conference_data_version: 1,
      send_updates: send_updates,
    )
end