只要有任何直接消息发送给已验证的用户,我都会使用slack api发送回复。因此,我创建了应用程序,启用了事件api,并验证了Webhook网址并订阅了chat:write:user,users:read
事件
我使用带有范围(user2
)的常规oauth流来获取访问令牌。
首先,我尝试使用工作区的管理员,一切正常。每当管理员用户和任何其他用户之间有直接消息时,我都会收到回调的事件。
现在
当我对普通用户(user2
)进行尝试时,Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
与其他用户之间没有直接消息时,我没有收到任何事件。我按照上面的相同步骤进行操作。
User2经历了具有相同范围的相同oauth流,并获得了自己的访问令牌。当我订阅事件api时,我应该能够收到指向我提到的URL的事件回调。
这里有什么问题吗?这不是工作原理吗?
答案 0 :(得分:1)
这不行。
您的Slack应用将仅接收来自频道/会话的消息事件,安装用户是其中的成员(例如,管理员是他与他人之间直接消息传递会话的成员)。但是不可能在其他用户之间获得直接消息。
这是Slack的安全体系结构的设计方式。通常,即使安装使用的是管理员/所有者,任何Slack应用程序都无法监视所有私人和直接消息通道。
私有渠道的常见解决方法是检索bot用户的消息,并确保bot用户是您需要监视的所有私有渠道的成员。但是,对于直接消息对话,此解决方法不是很实用。
答案 1 :(得分:0)
原来是范围问题,下面是我从松弛支持团队收到的消息,它们很棒。
Sasikanth,您好
感谢您回到我身边。我看了一眼,似乎当user2安装“我的应用程序名称”应用程序时,要求的范围发生了一些变化。
以下是这些用户在安装“我的应用名称”后收到的范围:
user1:im:history,users:read,chat:write:user
user2:用户:读取,聊天:写入:用户
您会注意到,上面的用户1具有im:history范围,而上面的用户2没有。在文档中提到的message.im事件类型(https://api.slack.com/events/message.im)需要im:history范围。
这就是为什么您没有收到发送给用户2的DM的message.im事件类型的原因。
我希望这有助于解释问题。您需要做的是从以下位置删除对user2的授权:(我的开发应用程序网址),并让该用户使用适当的范围重新安装该应用程序。