首页 > 解决方案 > Python Slack Bot 不会在直接消息中发布

问题描述

我用 Python 编写了一个 Slack Bot,当我在聊天频道中使用斜杠命令时,它按设计工作,但是当我尝试在与另一个用户的直接消息中与 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 中是否缺少权限或命令?

标签: pythonslackslack-api

解决方案


您的方法不适用于直接渠道,坦率地说也不适用于某些私人渠道。

原因是 Slack 的基本安全功能之一:您的机器人用户或您的应用程序令牌的所有者(例如应用程序安装程序)需要成为直接或私人频道的成员,您的应用程序/机器人才能访问该频道,例如能够向它发送消息。没有权限设置或范围可以改变这一点。

不过,对于您的具体情况,有一个简单的解决方法:无需通过 API 发送消息,只需直接回复来自 Slack 的斜杠命令请求即可。这适用于任何渠道,包括直接和私人渠道。

回复的工作方式类似于通过 API 发布消息,您可以使用纯文本或 JSON。有关语法,请参阅官方文档中的响应命令

这是带有附件的完整消息的示例。请注意,您需要将内容标头设置为 JSON:

{
    "text": "It's 80 degrees right now.",
    "attachments": [
        {
            "text":"Partly cloudy today and tomorrow"
        }
    ]
}

推荐阅读