You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Calendar新事件触发外部日程更新及C#事件获取排查

Google Calendar新事件触发与代码问题排查

问题

  1. 当Google Calendar创建新事件时,如何获取触发信号来更新自有应用中的外部日程?
  2. 以下代码无法获取新事件,问题出在哪里?

现有代码

public async Task<List<EventModel>> GetAllEventsAsync()
{
    var refresToken = RetrieveRefreshTokenAndRevoke.RefreshToken();

    if (refresToken == "ok")
    {
        var tokens = JObject.Parse(System.IO.File.ReadAllText(ConstantJsonFileLink.TOKEN));

        RestClient restClient = new RestClient(new Uri("https://www.googleapis.com/calendar/v3/calendars/primary/events"));
        RestRequest restRequest = new RestRequest(Method.GET);

        restRequest.AddQueryParameter("key", $"{ApiKey}");
        restRequest.AddHeader("Authorization", "Bearer " + tokens["access_token"]);
        restRequest.AddHeader("Accept", "application/json");

        try
        {
            var response = await restClient.ExecuteAsync(restRequest);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                JObject calendarEvents = JObject.Parse(response.Content);
                var allEvents = calendarEvents["items"].ToObject<List<EventModel>>();
                return allEvents;
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Coulden't connect to google agenda.");
        }
    }
    return null;
}

代码问题分析

  1. 未做增量过滤:当前代码全量拉取所有事件,但未指定updatedMin参数(仅拉取某个时间点后更新的事件),若新事件因API分页或默认返回范围限制,会被遗漏。
  2. 冗余的API Key参数:使用OAuth2的Bearer Token访问用户私有日历数据时,无需添加key参数(API Key用于无授权的公共数据访问),两者同时使用可能引发权限冲突。
  3. 错误处理不完整:仅捕获异常,但未处理非200状态码的响应(比如401令牌过期、403权限不足),也未输出响应内容,无法排查API返回的具体错误。
  4. EventModel映射风险:如果EventModel的属性名称、类型与Google Calendar API返回的JSON字段不匹配(比如start/end是嵌套对象,而模型未正确定义),会导致反序列化失败,返回空列表或丢失事件。
  5. RefreshToken逻辑模糊:仅通过返回"ok"判断令牌刷新成功,但未验证新的access_token是否有效,可能使用过期或无效的令牌发起请求。

获取新事件触发信号的正确方式

不要使用定时轮询(效率低、延迟高),应采用Google Calendar的推送通知(Push Notifications):

  • 配置一个可公网访问的HTTP端点作为Webhook回调地址。
  • 调用Google Calendar API的watch方法(POST https://www.googleapis.com/calendar/v3/calendars/primary/events/watch),订阅日历事件变更,指定回调URL、唯一ID、过期时间等参数。
  • 当日历有新事件创建/更新/删除时,Google会向回调地址发送POST请求,包含变更事件的相关信息。
  • 收到通知后,调用API并通过updatedMin参数拉取最近变更的事件,更新自有应用的日程。

内容的提问来源于stack exchange,提问作者Wannes Limbourg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:11:35