如何调用Slack API向指定非机器人用户发送消息
Slack机器人向指定普通用户发私信的实现方法
核心逻辑:chat.postMessage接口的channel参数不直接接收U开头的用户ID,你需要先获取和目标用户的私信会话对应的专属频道ID,再传入发消息接口即可完成私信发送。
具体操作流程
- 第一步:筛选目标非机器人用户
调用users.list接口拉取全量用户列表后,通过返回数据里的is_bot、is_app_user两个字段做过滤:两个字段值均为false的即为真人普通用户,按你的匹配规则找到目标用户后,记录下该用户U开头的用户ID。 - 第二步:获取目标用户的私信频道ID
调用conversations.open接口,传入参数users值为上一步拿到的目标用户ID(单聊场景仅传这一个用户ID即可)。接口返回结果中channel.id字段的值,就是可直接用于chat.postMessage接口的合法频道ID。提示:如果你的机器人和目标用户之前已经存在私信会话,调用该接口不会重复创建新会话,会直接返回已有会话的频道ID,不会产生多余的会话窗口。
- 第三步:发送私信
调用chat.postMessage接口,将channel参数设置为上一步拿到的私信频道ID,按需求组装消息文本、附件等其他参数后发起请求,消息就会直接发送到目标用户的私信收件箱。
注意事项
- 提前给机器人配置对应接口权限:调用
conversations.open需要开通im:write权限,调用chat.postMessage发送私信需要开通chat:write权限,权限缺失会导致接口返回权限错误。 - 不建议长期硬编码存储私信频道ID,Slack侧可能会调整会话ID的映射关系,稳妥的做法是每次发消息前先调用
conversations.open获取实时ID,若发消息时提示频道不存在,可重新拉取一次ID后重试。 - 如果需要给多个用户发群私信,只需要在
conversations.open的users参数里传入多个用户ID(用英文逗号分隔),拿到群私信会话的频道ID后再调用发消息接口即可。
内容的提问来源于stack exchange,提问作者Matheswaran Kanagarajan
相关产品推荐
相关产品推荐

