为什么用户和具有消息历史记录的应用程序机器人之间的1:1 DM的“ last_read”属性为零?

问题描述 投票:1回答:1

我正在设置一个Slack应用程序,以通过Web API并使用来自ASP.NET Web应用程序的bot OAuth令牌发布消息,其中一项要求是Slack应用程序必须能够为用户最后一次使用Slack僵尸程序在DM中阅读其消息时。这是为了跟踪哪些消息需要更新或重新发布。

起初,我认为您可以发送带有sessions.info方法的请求,以从JSON响应中获取“ last_read”属性。并且,如果我在用户OAuth令牌(带有“ xoxp -...”)的请求中使用了与该令牌相关联的用户打开的任何直接消息,则我将获得诸如“ 1571423219851.000000”的值。

但是当我使用机器人令牌(使用“ xoxb -...”)向用户检查DM时,其“ last_read”字段必须为零。

重现此问题的步骤是:

  1. 通过Stalking.open方法让Slack应用程序与用户(在本例中为我自己,因为用户OAuth令牌设置为我的帐户)打开一条直接消息,并提供机器人用户令牌和users =(your_slack_id)。保存DM ID以便以后使用。https://api.slack.com/methods/conversations.open/test

"ok": true,
"no_op": true,
"already_open": true,
"channel": {
    "id": "DP4NRGLNE"
}
  1. 发送消息以使用DM ID传播消息窗口。https://api.slack.com/methods/chat.postMessage/test

  2. 使用bot令牌和DM id使用conversations.info方法进行测试。https://api.slack.com/methods/conversations.info/test

但是,当我运行该方法时,会得到这样的响应。

"ok": true,
"channel": {
    "id": "DP4NRGLNE",
    "created": 1571404761,
    "is_archived": false,
    "is_im": true,
    "is_org_shared": false,
    "user": "UN4F12QH7",
    "last_read": "0000000000.000000",
    "latest": {
        ...
    },
    "unread_count": 3,
    "unread_count_display": 3,
    "is_open": true,
    "priority": 0
}

期望:“ last_read”字段设置为某个值,即“ 1571404761.000000”,而unread_count设置为0。

Actual:“ last_read”字段仍然设置为“ 0000000000.000000”(并且unread_count不会重置为0),尽管在直接消息中具有消息历史记录,并且已经确认“标记为已读”新消息/实际打开了聊天记录,并向下滚动了新消息。

怀疑是,使用用户OAuth令牌将返回相关的last_read值,因为用户自己将在给定的对话中设置last_read时间戳,而Slack机器人从未为他们参与的对话设置“ last_read”字段(即用户不需要知道机器人本身最后一次阅读聊天内容的时间?)。如果是这种情况,那么为什么使用漫游器令牌无法在其DM中为用户查看last_read字段的设置值?这就是这个问题的来源(以及困惑)。

这可能是一个不正确的理论,但是Slack文档似乎没有解决这个问题,因此欢迎提出任何建议。

编辑:仔细阅读文档之后,似乎方法的子方法im没有im.info的概念,因此为dm设置了默认值0。

asp.net slack slack-api
1个回答
0
投票

正如文档中有关last_readchannel types属性的说明:

last_read主叫用户拥有的最后一条消息的时间戳在此频道中阅读

如果使用bot令牌调用conversations.history,则呼叫用户是bot用户,该用户显然还没有读取任何消息。

所以这不是错误,但是可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.