slack-api - 如何通过 API 将响应消息更新为斜杠命令?
问题描述
语境
我正在构建一个基于斜杠命令的 Slack 应用程序,它正在创建一个in_channel
带有按钮的响应消息,供用户与之交互。斜杠命令用于私人频道。
当用户单击按钮时,我的应用程序能够更新该消息以反映新状态 - 只需使用更新的消息回复斜杠请求并设置replace_original = true
.
问题
此外,我还想批量更新该消息,例如当计时器用完时。我一直在尝试使用 更新消息chat.update
,但cant_update_message
出现 API 错误。
这是我在 Postman 中用于测试的请求:
https://slack.com/api/chat.update?token={TOKEN}&channel={CHANNEL}&ts={TS}&text=Updated&as_user=true
但是,根据文档,我应该能够更新机器人消息:
有效的消息类型
只有经过身份验证的用户发布的消息才能使用此方法进行更新。这包括常规聊天消息,以及包含
me_message
子类型的消息。机器人用户还可以更新他们发布的消息。
我要更新的消息显然属于我的 slack 应用程序,看起来像一条普通的机器人消息。这是该消息的外观conversations.history
:
{
"text": "Some text...",
"bot_id": "Bxxxxxxxx",
"type": "message",
"subtype": "bot_message",
"ts": "{TS}"
}
顺便提一句。chat.delete
我通过作品使用相同的参数删除该消息。
我错过了什么?
解决方案
我与 Slack 支持人员讨论了我的问题,他们确认无法通过chat.update
.
以下是完整回复:
用户
in_channel
不能更新斜杠命令响应。由于斜杠命令响应未使用 Web API,因此未与任何特定令牌关联,因此 chat.update 调用无法确定是否允许更新消息。因此错误。我的建议是发送一个临时斜杠命令响应或一个空斜杠命令响应,然后使用
chat.postMessage
API 方法发送“in channel”消息,稍后可以使用 chat.update API 方法更新该消息。
正如建议的那样,我现在将通过chat.postMessage
API 方法创建“游戏内”消息,这允许我稍后对其进行更新。然而,这会为私人频道带来访问问题。为了缓解这种情况,我现在将要求用户将我的机器人用户添加到所有私人频道,这将使我的应用程序可以访问它。
我本来希望首先避免这种方法,因为它为用户创建了一个额外的步骤,但是没有更好的选择(顺便说一句,github 应用程序使用相同的方法)。
推荐阅读
- javascript - 你如何使用画布作为一个类?
- android - 为什么我的应用程序会自动注销?
- javascript - NodeJS Firebase App 在无效 JSON 上崩溃
- javascript - 如何动态更改 jsPlumb 中的 targetOption 和 sourceOption 锚点?
- spring-batch - Spring批量分区master可以读取数据库并将数据传递给workers吗?
- python - 如何使用 Spotify API Python 获取其他用户最近播放的歌曲
- wordpress - 如何添加块编辑器标题字数?
- ruby - 当孩子是文本节点时如何使用 Nori 访问属性值
- java - Oracle 应用程序中的 Libphonenumbers,缺少元数据:/com/google/i18n/phonenumbers/data/
- python - 无法使用 API 获取松弛的用户个人资料信息