我正在设置一个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。
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。
正如文档中有关last_read
的channel types属性的说明:
last_read
是主叫用户拥有的最后一条消息的时间戳在此频道中阅读
如果使用bot令牌调用conversations.history
,则呼叫用户是bot用户,该用户显然还没有读取任何消息。
所以这不是错误,但是可以正常工作。