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

时间:2019-10-18 19:03:27

标签: asp.net slack slack-api

我正在设置一个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. 让Slack App通过会话.open方法与用户(在本例中是与我本人,因为将用户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。

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

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

这可能是一个错误的理论,但是Slack文档似乎并未解决此问题,因此欢迎提出任何建议。

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

1 个答案:

答案 0 :(得分:0)

文档说明了channel typeslast_read属性:

  

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

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

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