【问题标题】:Python Slack Bot won't post in direct messagesPython Slack Bot 不会在直接消息中发布
【发布时间】:2019-06-21 17:39:57
【问题描述】:

我用 Python 编写了一个 Slack Bot,当我在聊天频道中使用斜杠命令时,它可以正常工作,但是当我尝试在与另一个用户的直接消息中与该 bot 交互时,从未显示响应.但是,当我查看应用程序日志时,我仍然收到来自 Slack 的 POST,因此我的应用程序正在接收响应并发送回响应。

我启用了以下权限:

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

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

【问题讨论】:

    标签: python slack slack-api


    【解决方案1】:

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

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

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

    回复的工作方式类似于通过 API 发布消息,您可以使用纯文本或 JSON。语法见官方文档Respond to Commands

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

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

    【讨论】:

    • 谢谢!所以基本上当我收到请求时,我会发送相同的响应(上面示例中的附件),但将其发布到原始有效负载中提供的 response_url?
    • 1) 语法略有不同,我将在我的答案中添加一个示例。 2) 是的,您可以从 slack 请求中发布对请求 URL 的响应,或者您可以直接响应 slack 请求,这更容易。只需在您的消息中添加return
    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2020-11-06
    • 2021-01-07
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多