Python Slack Bot不会在直接消息中发布

时间:2019-01-28 16:53:11

标签: python slack slack-api

我已经用Python编写了一个Slack Bot,当我在聊天频道中使用斜杠命令时,它按设计工作,但是当我尝试在与其他用户的直接消息中与机器人进行交互时,响应永远不会显示。但是,当我查看应用程序日志时,仍然收到来自Slack的POST,因此我的应用程序正在接收响应并将其发送回。

我启用了以下权限:

  • 将邮件发送为[MyBotName]
  • 以用户身份发送消息
  • 发布到Slack中的特定频道
  • 添加用户名@mybotname的机器人用户
  • 添加斜杠命令并向消息添加操作(并查看相关内容)
  • 查看邮件中的某些URL
  • 将链接预览添加到邮件中

在我的代码中,我进行以下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中缺少权限或命令吗?

1 个答案:

答案 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"
        }
    ]
}