Slack API:如何获取发送给指定用户/机器人的最新消息及联系时间?
如何通过Slack API获取你发送给指定用户/机器人的最新消息
嘿,我来帮你搞定这个需求!要查询你最近一次以私信、提及等方式联系目标机器人的时间,你可以通过Slack的几个核心API组合实现,步骤很清晰,我给你拆解一下:
1. 先找到你和目标的对话ID
首先得定位你和目标机器人/用户的私信对话唯一标识。你可以调用conversations.list API,指定只返回私信类型的对话(types: im),然后遍历返回结果,找到user字段匹配目标机器人ID的那条,对应的id就是你要的对话ID。
举个curl请求的例子(记得替换成你的Bot Token):
curl -X POST https://slack.com/api/conversations.list \ -H "Authorization: Bearer YOUR_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"types": "im"}'
⚠️ 这里要确保你的Bot Token已经申请了im:read或者channels:read的权限,不然会返回权限不足的错误。
2. 拉取对话历史并筛选你发送的消息
拿到对话ID后,调用conversations.history API拉取这个对话的消息记录。你可以设置limit参数(比如设100)确保覆盖到最近的消息,然后在返回的messages数组里做两件事:
- 筛选出
user字段等于你自己的用户ID的消息(毕竟你要找的是你主动发的内容) - 按
ts字段(Unix毫秒时间戳)降序排序,取第一条,它的ts就是你最近联系对方的时间。
示例请求:
curl -X POST https://slack.com/api/conversations.history \ -H "Authorization: Bearer YOUR_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"channel": "TARGET_IM_CHANNEL_ID", "limit": 100}'
3. 如果要包含公共频道里的提及消息
如果你还想统计在公共频道里你@机器人的消息,那需要多做几步:
- 用
conversations.list获取所有你加入的公共频道(types: public_channel) - 对每个频道调用
conversations.history,筛选出内容里包含@机器人ID且user是你的消息 - 把这些频道消息和私信消息放在一起,按
ts排序取最大的那个,就是你最近一次联系机器人的时间。
不过要注意,遍历多个频道会增加请求次数,建议根据实际需求决定是否需要这部分。
权限提醒
最后再啰嗦一句,你的Bot Token需要对应权限才能正常调用这些API:
- 私信相关:
im:read、im:history - 公共频道相关:
channels:read、channels:history - 如果涉及私有频道,还要加上
groups:read、groups:history
内容的提问来源于stack exchange,提问作者Duy Hưng Androgyne Tenor




