如何通过Python代码向Slack中属于其他组织的用户发送直接消息
跨组织Slack消息发送「Channel not found」问题解决方案
这个报错是Slack的组织间权限隔离机制导致的,默认应用仅能访问当前所属组织的用户、会话资源,直接传入外部组织用户ID调用消息接口无法匹配到对应会话通道。
修复步骤
- 调整应用权限配置
进入Slack应用管理后台,在OAuth & Permissions页的User Token Scopes/Bot Token Scopes区域添加conversations.connect:manage、im:write、users:read、users:read.email权限,完成后重新将应用安装到所属工作区,更新权限生效后的token。 - 调整代码逻辑,先创建跨组织会话再发消息
不能直接传入外部用户ID调用chat.postMessage接口,需要先调用conversations.open接口创建跨组织临时会话,拿到返回的会话ID后再调用消息发送接口,参考代码如下:
from slack_sdk import WebClient from slack_sdk.errors import SlackApiError # 初始化客户端,使用更新权限后的token slack_client = WebClient(token="你的应用Bot/用户Token") try: # 创建跨组织DM会话,users参数为目标用户ID,team_id为目标用户所属组织的团队ID create_conv_resp = slack_client.conversations_open( users="U_XXXXXXX", team_id="T_XXXXXXX" ) cross_org_channel_id = create_conv_resp["channel"]["id"] # 发送消息 send_msg_resp = slack_client.chat_postMessage( channel=cross_org_channel_id, text="你的消息内容" ) except SlackApiError as e: print(f"调用失败,错误码:{e.response['error']}")
- 额外校验规则
如果目标组织开启了外部消息白名单限制,需要先让目标用户将你的应用所属账号添加为外部联系人,否则会话创建请求会被拦截,返回restricted_action错误。
内容的提问来源于stack exchange,提问作者Saksham arya
相关产品推荐
相关产品推荐

