You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发的Slack机器人发送@提及消息无法触发用户提醒如何解决?

问题成因

该问题是Slack API的规则限制导致的:

  • 你手动在Slack聊天框输入@username时,Slack前端会自动将这段文本转换为内部的ID引用格式,发送给后台后会触发提醒逻辑
  • 机器人通过API直接发送纯文本@username时,Slack后台不会做上述转换,只会将其识别为普通字符串,因此不会触发用户的@通知
  • 若Slack机器人没有正确配置相关权限,也会导致@功能失效
解决方法

要实现正常的@提醒,你需要使用Slack API规定的ID引用格式替换纯文本用户名,具体步骤如下:

步骤1:获取目标对象的ID

Slack中每个用户、用户组都有唯一的固定ID,你需要先调用对应接口拿到ID:

  • 单个用户ID格式为UXXXXXXXX,可以调用client.users_list()接口遍历所有用户,匹配用户名后拿到对应ID
  • 用户组ID格式为SXXXXXXXX,可以调用client.usergroups_list()接口遍历所有用户组,匹配组handle后拿到对应ID

步骤2:构造符合规范的@语法

拿到ID后按照以下规则拼接消息内容:

  • @单个用户:使用<@用户ID>格式替换原来的@用户名
  • @用户组:使用<!subteam^用户组ID>格式替换原来的@用户组名
  • @频道全体在线成员:直接使用<!here>
  • @频道所有成员:直接使用<!channel>

步骤3:修改后的代码示例

@单个用户示例

from slack_sdk import WebClient

client = WebClient(token=slack_token)
target_username = "demo_user"
target_user_id = None

# 遍历获取对应用户ID
for user in client.users_list()["members"]:
    if not user["deleted"] and user["name"] == target_username:
        target_user_id = user["id"]
        break

if target_user_id:
    slack_message = f"Hello <@{target_user_id}>"
    client.chat_postMessage(
        channel=channel_ID,
        text=slack_message
    )

@用户组示例

from slack_sdk import WebClient

client = WebClient(token=slack_token)
target_group_handle = "demo_group"
target_group_id = None

# 遍历获取对应用户组ID
for group in client.usergroups_list()["usergroups"]:
    if group["handle"] == target_group_handle:
        target_group_id = group["id"]
        break

if target_group_id:
    slack_message = f"Hello <!subteam^{target_group_id}>"
    client.chat_postMessage(
        channel=channel_ID,
        text=slack_message
    )

注意事项

  • 确保机器人已经被邀请到目标发送频道,否则无法正常发送消息和触发提醒
  • 确认机器人已在Slack应用管理页面的「OAuth & Permissions」中添加了chat:write、users:read、usergroups:read权限,修改权限后需要重新安装应用到工作区并更新使用的token

内容的提问来源于stack exchange,提问作者arc_lupus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:54:02