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

Mit*_*les 1 outlook-calendar microsoft-graph-api

当我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"
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "@odata.type": "#microsoft.graph.event"
  "id": [that-event-id]
  "@removed": {
    "reason": "deleted"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

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

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

回答

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

更多细节

事件增量 API 捕获初始startDateTime..endDateTime窗口,然后将其用于所有带有$deltatoken. 如果您的 delta 查询使用$select等,这也会意外地咬您,因为在您创建新的 delta 之前对其进行的更改不会应用(通过不传递初始值$deltatoken

这个细节导致我们为自己设置了一个定时炸弹。我们最初的窗口有点宽,但突然开始收到广泛的事件报告,这些事件显示为已取消,但绝对没有从日历中删除。

这是一个错误

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