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

Microsoft Graph变更通知接收方及Java订阅代码有效性问询

问题解答

一、通知推送目标

通知会发送到你在订阅中指定的notificationUrl对应的服务,也就是Azure Function App,而非你的exe应用。

  • MS Graph的变更通知机制是主动将事件POST请求发送到你配置的公开可访问的notificationUrl地址
  • 你的exe应用仅作为发起订阅请求的客户端,本身不会直接接收推送通知,所有通知都会被Azure Function的HTTP触发器接收

二、关于Java订阅代码的说明

这段代码无法直接获取所有日历事件,具体分析如下:

  1. 订阅范围有限:代码中subscription.resourceUrl = "/me/events"仅订阅当前授权用户的个人日历事件,无法覆盖所有会议室或其他用户的日历
  2. 功能定位偏差:这段代码的作用是创建变更通知订阅,用来接收后续事件的创建、更新、删除通知,而非主动拉取所有已存在的日历事件
  3. 监听逻辑错误:代码里graphClient.subscriptions().byId(subscription.id).buildRequest().getAsync(notificationHandler)的写法不符合Graph订阅机制,通知是主动推送到notificationUrl的,不需要客户端通过这种方式“监听”
  4. 订阅有效期过短:代码设置的expirationDateTime为当前时间+15分钟,订阅很快会失效,实际使用中需设置更长有效期(最长支持3天)并在到期前续订

原代码片段

GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

// Create a new subscription for calendar events with meeting details
Subscription subscription = new Subscription();
subscription.resourceUrl = "/me/events";
subscription.changeType = "created,updated,deleted";
subscription.notificationUrl = "https://user-input-notification-url";
subscription.expirationDateTime = OffsetDateTime.now().plusMinutes(15);
subscription.additionalData.put("@odata.type", "#Microsoft.Graph.ChangeNotificationSubscription");
subscription.additionalData.put("includeMeetingDetails", true);
subscription = graphClient.subscriptions().buildRequest().post(subscription);

// Start listening for notifications
NotificationHandler notificationHandler = new NotificationHandler();
CompletableFuture<Void> future = graphClient.subscriptions().byId(subscription.id).buildRequest().getAsync(notificationHandler);

// Wait for the future to complete (i.e., for the subscription to expire)
future.get();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:12:57