我正在设置一个Slack应用,以通过Web API并使用来自ASP.NET Web应用的bot OAuth令牌发布消息,其中一项要求是Slack应用能够返回相关值用户最后一次使用Slack僵尸程序读取其DM中的消息的时间。这是为了跟踪哪些消息需要更新或重新发布。
起初,我认为您可以发送带有sessions.info方法的请求,以从JSON响应中获取“ last_read”属性。并且,如果我在用户OAuth令牌(带有“ xoxp -...”)的请求中使用了与该令牌相关联的用户打开的任何直接消息,那么我将获得一个诸如“ 1571423219851.000000”的值。
但是当我使用漫游器令牌(使用“ xoxb -...”)向用户检查DM时,其“ last_read”字段将为零。
重现此问题的步骤是:
"ok": true,
"no_op": true,
"already_open": true,
"channel": {
"id": "DP4NRGLNE"
}
发送消息以使用DM ID传播消息窗口。 https://api.slack.com/methods/chat.postMessage/test
使用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。
答案 0 :(得分:0)
文档说明了channel types的last_read
属性:
last_read
是主叫用户收到的最后一条消息的时间戳 在此频道中阅读
如果您使用漫游器令牌调用conversations.history
,则呼叫用户是漫游器用户,该用户显然还没有读取任何消息。
所以这不是错误,但可以正常工作。