为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?

Posted

技术标签:

【中文标题】为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?【英文标题】:Why is Microsoft Graph API telling me events I've just created are being "@removed" when they are still there?为什么 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”? 【发布时间】:2020-12-03 17:19:45 【问题描述】:

当我使用以下有效负载对me/calendars/[calendar-id]/events 进行 POST 时。它成功创建了事件,我收到了新事件的 id:


  "start": 
    "timeZone": "America/Chicago",
    "dateTime": "2022-12-23T15:00:00"
  ,
  "end": 
    "timeZone": "America/Chicago",
    "dateTime": "2022-12-23T18:00:00"
  ,
  "subject": "Please don't delete me!",
  "body": 
    "contentType": "text",
    "content": "I'm just an event in the future, I wonder if I'll send a '@removed' notice?"
  
  "isCancelled": false,
  "type": "singleInstance"

但在那之后不久,我的 webhook 被该事件的此信息击中,表明它刚刚被删除:


  "@odata.type": "#microsoft.graph.event"
  "id": [that-event-id]
  "@removed": 
    "reason": "deleted"
  

当我去查看我的 Outlook 日历时,该事件似乎仍然存在,如果我得到它,isCancelled 是错误的。

这只发生在一年前或两年后创建的事件中。

【问题讨论】:

看看(1)这些项目是否启用了任何保留策略? (2) 是否有任何备份/存档解决方案存在? 正如你所说,这种情况只发生在一年或两年前创建的事件中......让我知道你发现了什么。 @Dev 我不知道任何保留政策:找出这一点的最佳方法是什么?不过,我不确定你的第二个问题在问什么。我们仍然有关于我们事件的数据,但我们已将它们记录为存档,因为我们收到了@removed 通知。 您可能需要咨询您的 Exchange/Office 365 管理员,看看他们是否应用了任何保留政策。 另外,还需要记住以下几点: (1) 一般情况下,Removed 实例由它们的 id 和一个@removed 对象表示。 (2) 在您的场景中,您注意到“已删除”,这表示该项目已被删除且无法恢复。这就是我要求启用任何保留策略或存在备份/存档解决方案的原因 (3) 另请注意,删除的对象可以在初始增量查询响应和跟踪 (deltaLink) 响应中返回。使用 delta 查询请求的客户端应设计为在响应中处理这些对象。 【参考方案1】:

我们自己被同样的问题困扰了大约一个月,我想我昨天终于能够找到这个问题了。

我们使用 events delta API 而不是 webhook API,但显然同样的错误会影响两者......微软的某个人真的需要修复这个问题,这太疯狂了。

回答

对事件增量请求上设置的startDateTime..endDateTime 窗口之外的事件的更改最初始终显示为@removed 增量。

更多详情

事件增量 API 捕获初始 startDateTime..endDateTime 窗口,然后用于所有后续调用 $deltatoken。如果您的 delta 查询使用 $select 等,这也会让您意外

正是这个细节让我们为自己设置了一颗定时炸弹。我们最初的窗口有点宽,但突然开始收到广泛的报告,显示活动已取消,但肯定没有从日历中删除。

这是一个错误

请 Microsoft 人员承认这是一个真正的问题。在离散指定的时间窗口之外进行的更改不应影响它,这使得构建我们信任的集成变得困难。

【讨论】:

不幸的是,他们在这次讨论中似乎并没有完全承认这一点。 github.com/microsoftgraph/microsoft-graph-docs/issues/6599【参考方案2】:

这只发生在一年前或两年后创建的事件。

我猜这与贵组织定义的保留政策有关。

https://docs.microsoft.com/en-us/microsoft-365/compliance/create-retention-policies

使用保留政策,您可以定义特定项目在被自动删除之前应保留多长时间。

【讨论】:

【参考方案3】:

如果您最终也使用了错误的 $deltatoken,也会发生这种情况。

【讨论】:

以上是关于为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?的主要内容,如果未能解决你的问题,请参考以下文章

MS Graph API:microsoft.graph.createLink 未创建匿名视图链接

使用 microsoft graph api 检出 onedrive 文件的状态

获取 Microsoft Graph API 的有效访问令牌

Microsoft Graph API SharePoint 文件搜索

如何使用 microsoft graph api 获取 EndRecurrenceDate

Microsoft Graph API - 列出用户登录的所有权限/范围