Slack 事件 API 不适用于普通用户
Slack Events API not working for normal users
我正在使用 slack api 在有任何直接消息发送给经过身份验证的用户时发送回复。所以我创建了应用程序,启用了事件 api 并验证了 webhook url 并订阅了 messages.im
事件
我使用范围为 (chat:write:user,users:read
) 的常规 oauth 流程来获取访问令牌。
首先我尝试使用工作区的管理员,一切正常。每当管理员用户和任何其他用户之间有直接消息时,我都会收到回调事件。
现在
当我尝试与普通用户 (user2
) 进行相同操作时,当 user2
与其他用户之间存在直接消息时,我没有收到任何返回的事件。我按照上面的相同步骤操作。
用户 2 通过相同范围的相同 oauth 流程并获得了他自己的访问令牌。当我订阅事件 api 时,我应该能够接收到我提到的 url 的事件回调。
这里有什么问题吗?这不是事情的运作方式吗?
这不应该起作用。
您的 Slack 应用程序将仅从安装用户所属的频道/对话中接收消息事件(例如,管理员是他与其他人之间的直接消息对话的成员)。但是无法在其他用户之间直接发送消息。
Slack 的安全架构就是这样设计的。一般来说,任何 Slack 应用程序都不可能监控所有私人和直接消息传递渠道,即使安装用户是管理员/所有者。
私人频道的一个常见解决方法是检索机器人用户的消息,并确保机器人用户是您需要监控的所有私人频道的成员。但是,此解决方法对于直接消息对话不是很实用。
原来是范围问题,以下是我从 slack 支持团队收到的消息,他们很棒。
嗨,Sasikanth,
感谢您回复我。我看了一下,当 user2 安装 "My App Name" 应用程序时,请求的范围似乎发生了一些变化。
以下是每个用户在安装 "My App Name" 时收到的范围:
用户 1: im:history,users:read,聊天:写:用户
用户 2:users:read,聊天:写:用户
您会注意到上面的用户 1 具有 im:history 范围,而上面的用户 2 没有。 message.im 事件类型 (https://api.slack.com/events/message.im) 的文档中提到需要 im:history 范围。
这就是为什么您没有收到发送给用户 2 的 DM 的 message.im 事件类型的原因。
我希望这有助于解释问题。您需要做的是从以下位置删除对 user2 的授权:(我的开发应用程序 url)并让该用户重新安装具有适当范围的应用程序。
我正在使用 slack api 在有任何直接消息发送给经过身份验证的用户时发送回复。所以我创建了应用程序,启用了事件 api 并验证了 webhook url 并订阅了 messages.im
事件
我使用范围为 (chat:write:user,users:read
) 的常规 oauth 流程来获取访问令牌。
首先我尝试使用工作区的管理员,一切正常。每当管理员用户和任何其他用户之间有直接消息时,我都会收到回调事件。
现在
当我尝试与普通用户 (user2
) 进行相同操作时,当 user2
与其他用户之间存在直接消息时,我没有收到任何返回的事件。我按照上面的相同步骤操作。
用户 2 通过相同范围的相同 oauth 流程并获得了他自己的访问令牌。当我订阅事件 api 时,我应该能够接收到我提到的 url 的事件回调。
这里有什么问题吗?这不是事情的运作方式吗?
这不应该起作用。
您的 Slack 应用程序将仅从安装用户所属的频道/对话中接收消息事件(例如,管理员是他与其他人之间的直接消息对话的成员)。但是无法在其他用户之间直接发送消息。
Slack 的安全架构就是这样设计的。一般来说,任何 Slack 应用程序都不可能监控所有私人和直接消息传递渠道,即使安装用户是管理员/所有者。
私人频道的一个常见解决方法是检索机器人用户的消息,并确保机器人用户是您需要监控的所有私人频道的成员。但是,此解决方法对于直接消息对话不是很实用。
原来是范围问题,以下是我从 slack 支持团队收到的消息,他们很棒。
嗨,Sasikanth,
感谢您回复我。我看了一下,当 user2 安装 "My App Name" 应用程序时,请求的范围似乎发生了一些变化。
以下是每个用户在安装 "My App Name" 时收到的范围:
用户 1: im:history,users:read,聊天:写:用户
用户 2:users:read,聊天:写:用户
您会注意到上面的用户 1 具有 im:history 范围,而上面的用户 2 没有。 message.im 事件类型 (https://api.slack.com/events/message.im) 的文档中提到需要 im:history 范围。
这就是为什么您没有收到发送给用户 2 的 DM 的 message.im 事件类型的原因。
我希望这有助于解释问题。您需要做的是从以下位置删除对 user2 的授权:(我的开发应用程序 url)并让该用户重新安装具有适当范围的应用程序。