Slack Bot 从历史中返回消息
Posted
技术标签:
【中文标题】Slack Bot 从历史中返回消息【英文标题】:Slack Bot returning message from history 【发布时间】:2019-02-28 15:14:00 【问题描述】:问题
这里我有一个机器人,当带有附件的消息发布到 slack 频道时,它应该使用一些唯一的 id 保存消息,当我们在 slack 频道中输入这些 id 时,机器人应该返回该消息聊天记录中的附件
(就像消息的公共 url 的工作方式一样 - https://workspace_name/archives/channel_name/token )。
如果我在我的频道中附加一个 xml 文件,当我键入与该消息关联的一些 id 时,机器人应该从我的频道历史记录中返回该附件(我添加附件的特定消息)。
我正在使用此代码:https://github.com/rampatra/jbot
目前的问题是:-
我试图获取我要分享到频道的文件的名称, 我在 SlackBot.java (https://github.com/rampatra/jbot/blob/master/jbot-example/src/main/java/example/jbot/slack/SlackBot.java) 中使用 event.getFile().getName() 。并尝试显示它。
@Controller(events = EventType.FILE_SHARED)
public void onFileShared(WebSocketSession session, Event event)
logger.info("File shared: ", event);
System.out.println("file id : "+event.getFileId());
System.out.println("file name :"+ event.getFile().getName());
机器人应该返回我共享的文件名(1234.xml)。但它以空值的形式出现,但文件的 id("F........") 正确出现。
【问题讨论】:
【参考方案1】:包含消息的 JSON 数组是 Slack API 将为通道历史返回的唯一格式。 channel.history
和 conversations.history
相同。
要获取频道名称、用户名等附加信息,您需要解析收到的消息(例如,对于频道,<C12345678>
)并调用附加 API 来检索和添加该信息。例如conversations.info
为频道名称或users.info
为用户名。查看 Slack 文档的this part,了解如何解析 Slack 标记的详细信息。
这同样适用于附加和共享文件。您只会获取 JSON 数组中的链接,然后需要自己下载文件。请注意,您需要提供身份验证才能将私人文件从 Slack 下载到您的应用程序。 (详情see here):
【讨论】:
谢谢。但这不能完全满足我的要求。 请说明您遗漏了什么,我很乐意扩展我的答案 参考这段代码,我开发了我的 slack 机器人:“dzone.com/articles/make-slack-bots-in-java-in-minutes”。唯一未决的要求是让我的机器人在我们输入一些 id 或文件名时共享与其共享的文件。现在我尝试使用文件的 url 来实现这一点。当频道中的某个人根据需要向文件名发送消息时,机器人将返回该文件,但目前我已经对文件名进行了硬编码。当我使用上述链接中的代码时,我能够获取与我的文件共享相关联的用户、频道和时间戳,但不能获取文件名。 在上传到 slack 频道时,是否有某种方法可以存储文件名(示例:sample.xml)?这里file.upload、conversation.history和channel.history不能用。 1.如果您可以将缺少文件名的新问题添加到问题中而不是使其成为评论,那就太好了。 2.您确实可以将上传文件的文件名存储为files.upload
。只需使用可选的filename
属性。然后它将存储在文件对象中。以上是关于Slack Bot 从历史中返回消息的主要内容,如果未能解决你的问题,请参考以下文章
Python 3 urllib Discord 与 Slack Bot
尝试将身份验证令牌存储为python中的系统变量,但在打印时返回None