我已经用Python编写了一个Slack Bot,当我在聊天频道中使用斜杠命令时,它按设计工作,但是当我尝试在与其他用户的直接消息中与机器人进行交互时,响应永远不会显示。但是,当我查看应用程序日志时,仍然收到来自Slack的POST,因此我的应用程序正在接收响应并将其发送回。
我启用了以下权限:
在我的代码中,我进行以下api_call:
slack_client.api_call(
"chat.postMessage",
channel=[channelId],
attachments=[],
unfurl_links=True,
unfurl_media=True,
as_user=True
)
记录表明,无论是频道还是直接消息,我都确实收到了正确的ChannelId。
我的问题是:我在slack_client.api_call中缺少权限或命令吗?
答案 0 :(得分:0)
您的方法不适用于直接渠道,坦率地说也不适用于某些私人渠道。
原因是Slack的基本安全功能之一:您的机器人用户或您的应用令牌的所有者(例如,应用安装程序)必须是直接或私有渠道的成员,才能使您的应用/机器人具有访问权限到那个频道,例如能够向它发送消息。没有权限设置或范围不能更改它。
不过,针对您的特定情况有一个简单的解决方法:无需通过API发送消息,只需直接回复Slack的slash命令请求即可。这将适用于任何渠道,包括直接和私人渠道。
回复的工作方式类似于通过API发布消息,您可以使用纯文本或JSON。有关语法,请参见官方文档中的Respond to Commands。
这里是带有附件的完整邮件的示例。请注意,您需要将内容标头设置为JSON:
{
"text": "It's 80 degrees right now.",
"attachments": [
{
"text":"Partly cloudy today and tomorrow"
}
]
}