python - Python Slack Bot 不会在直接消息中发布
问题描述
我用 Python 编写了一个 Slack Bot,当我在聊天频道中使用斜杠命令时,它按设计工作,但是当我尝试在与另一个用户的直接消息中与 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 中是否缺少权限或命令?
解决方案
您的方法不适用于直接渠道,坦率地说也不适用于某些私人渠道。
原因是 Slack 的基本安全功能之一:您的机器人用户或您的应用程序令牌的所有者(例如应用程序安装程序)需要成为直接或私人频道的成员,您的应用程序/机器人才能访问该频道,例如能够向它发送消息。没有权限设置或范围可以改变这一点。
不过,对于您的具体情况,有一个简单的解决方法:无需通过 API 发送消息,只需直接回复来自 Slack 的斜杠命令请求即可。这适用于任何渠道,包括直接和私人渠道。
回复的工作方式类似于通过 API 发布消息,您可以使用纯文本或 JSON。有关语法,请参阅官方文档中的响应命令。
这是带有附件的完整消息的示例。请注意,您需要将内容标头设置为 JSON:
{
"text": "It's 80 degrees right now.",
"attachments": [
{
"text":"Partly cloudy today and tomorrow"
}
]
}
推荐阅读
- javascript - 如何将使用 react-pdf 生成的 PDF 与现有 PDF 合并?(JS/node.js)
- c++ - 函数返回类型中的 decltype(auto) 不推导出 const 类型
- c - strncpy函数的循环看不懂
- mysql - AWS - RDS - MySQL - 内存不足
- sprite-kit - SpriteKit 对象不相互碰撞
- ios - URLSession 的 dataTask 未运行
- javascript - 我怎样才能使它根据输入产生不同的结果?
- html - (HTML/CSS) 背景在移动设备和桌面设备上的呈现方式不同
- vue.js - vue.js 显示数据彼此相邻而不是在
- python - 启用和禁用现有装饰器的首选模式?