0

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

所以我尝试订阅用户的存在。我收到了更改通知,它具有以下结构:

{
  "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 中的此类循环?

4

1 回答 1

0

我的建议是不要在 webhook 中使用存在数据,而是在触发 webhook 时再次从图表中获取数据。这将避免您在 webhook 出现故障时可能遇到的任何问题。

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

于 2022-02-05T22:15:26.440 回答