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

使用代理时SlackClient.rtm_connect()失败,API调用正常求修复方案

问题原因与修复方案

我之前也碰到过一模一样的问题,核心原因其实很好理解:Slack的RTM(实时消息)接口采用的是WebSocket协议,而你通过SlackClient初始化时传入的proxies参数只对HTTP/HTTPS类型的API请求生效,WebSocket连接并没有使用你配置的代理,所以才会出现普通API能正常调用但RTM连接超时的情况。

下面是具体的排查和修复步骤:

1. 先确认代理支持WebSocket

首先要检查你使用的代理服务器(127.0.0.1:8080)是否支持WebSocket(wss://)流量转发。很多HTTP代理默认不会处理WebSocket的升级请求,需要手动开启相关配置:

  • 如果是用Nginx做代理,需要在配置中添加:
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    
  • 如果是Charles、Fiddler这类调试代理工具,一般默认支持WebSocket,但可以去设置里确认是否开启了对应选项。

2. 为WebSocket连接单独配置代理

旧版本的slackclient(1.x系列)并没有把你传入的proxies参数应用到RTM的WebSocket连接上,需要我们手动给底层依赖的websocket-client库设置代理。

修改你的代码如下:

from slackclient import SlackClient
import websocket

BOT_TOKEN = "你的机器人Token"
client_proxies = {"https": "https://127.0.0.1:8080"}
slack_client = SlackClient(token=BOT_TOKEN, proxies=client_proxies)

# 验证API请求正常
print(slack_client.api_call("api.test"))
print(slack_client.api_call("auth.test"))

# 为WebSocket连接配置代理
websocket.setdefaultproxy(
    proxy_type=websocket.PROXY_TYPE_HTTP,
    http_proxy_host="127.0.0.1",
    http_proxy_port=8080
)
# 如果代理需要用户名密码认证,添加下面这行
# websocket.setdefaultproxy(http_proxy_auth=("你的用户名", "你的密码"))

# 现在尝试RTM连接
slack_client.rtm_connect()

额外说明

  • 如果你使用的是slackclient 2.x版本,官方已经优化了代理配置逻辑,RTM连接会自动使用初始化时传入的代理,但2.x的API和1.x有较大差异,需要注意代码适配。
  • 如果还是连接失败,可以抓包确认WebSocket的握手请求是否真的走了代理,排查是否有防火墙或代理规则拦截了流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:23