避免 Microsoft 更改通知中的循环

Avoiding loops in Microsoft change notifications

提问人:Shri 提问时间:2/5/2022 更新时间:2/6/2022 访问量:212

问:

我正在尝试构建一个聊天应用程序,每当用户的 Microsoft 状态发生变化时,该应用程序都会更改其在线状态。当用户使用 api 更改他在我的聊天应用程序上的状态时,我也会做相反的事情。setPresence

因此,我尝试订阅用户的存在。我收到了更改通知,其结构如下:

{
  "value": [
    {
      "id": "lsgTZMr9KwAAA",
      "subscriptionId":"{subscription_guid}",
      "subscriptionExpirationDateTime":"2016-03-19T22:11:09.952Z",
      "clientState":"secretClientValue",
      "changeType":"created",
      "resource":"users/{user_guid}@{tenant_guid}/messages/{long_id_string}",
      "tenantId": "84bd8158-6d4d-4958-8b9f-9d6445542f95",
      "resourceData":
      {
        "Availability":"Busy,
        "Activity":"InACall"
        "id":"{long_id_string}"
      }
    }
  ]
}

此更改通知包含用户可用性和活动,但未指定哪个应用触发了此状态更改。这将导致以下循环:

我的应用更改团队状态 - >团队向我发送 Webhook - >我的应用因 Webhook 而更改团队状态 - >团队向我发送 Webhook 等。

一个简单的解决方法是,如果两个应用程序具有相同的状态,则不要更改团队状态。但是我的应用没有针对团队中每个状态值的一对一映射。因此,它可能会为我的应用程序的多个状态设置。因此,当 away webhook 到达时,我不知道 away 是针对哪个状态发送的。此外,在我的应用程序中快速连续更改状态时,它不允许我准确验证两个应用程序状态是否同步。

是否有可能避免更改通知 Webhook 中的此类循环?

API 微软图形 团队 更改通知

评论


答:

0赞 Chris Johnson 2/6/2022 #1

我的建议是不要在 webhook 中使用状态数据,而是在触发 webhook 时再次从图形中获取数据。这将避免因 Webhook 乱序而可能遇到的任何问题。

你的应用必须管理状态并决定如何处理它,但听起来你不应该更新应用中的状态,除非它确实是状态的更改,以避免无限循环。

评论

0赞 Shri 2/7/2022
但是,通过 API 获取用户状态的次数是有限制的。在 30 秒内大约有 1500 个请求。我期待的远不止这些。因此,我不可能继续轮询 Microsoft 以获取每个 webhook。
0赞 Sayali-MSFT 2/8/2022
@Clutch Prince -您能否查看以下示例文档:-github.com/microsoftgraph/...如果您有任何疑问,请告诉我们。
0赞 Shri 2/8/2022
@Sayali-MSFT,我看到您发送的示例是关于聊天应用程序的,在这种情况下工作正常,但在我存在的情况下,这无关紧要。
0赞 Shri 2/8/2022
@ChetanSharma-msft,我在开发人员门户上提出了此功能请求。如果您认识一些联系人,是否可以考虑这一点?techcommunity.microsoft.com/t5/microsoft-365-developer-platform/......
0赞 Shri 2/8/2022
@Sayali-MSFT,上面的链接还包含有关我面临的确切问题的更多信息。