You need to enable JavaScript to run this app. Python结合asyncio使用Slack Socket Mode搭配AsyncWebClient时connect报错咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python结合asyncio使用Slack Socket Mode搭配AsyncWebClient时connect报错咨询

问题根因
  • 当前报错核心是同步版SocketModeClient与异步版AsyncWebClient的运行时模型不兼容,不存在额外的配置缺失问题。
  • 同步版SocketModeClient内部调用Web API时,预期拿到WebClient直接返回的字典格式响应,从而可以直接用下标取url字段完成WebSocket连接地址的获取。
  • 传入的AsyncWebClient中所有Web API调用方法都是协程实现,方法调用后不会直接返回响应字典,而是返回一个未调度执行的协程对象。
  • 当同步客户端尝试对这个协程对象做字典下标取值操作时,就会触发TypeError: 'coroutine' object is not subscriptable,同时伴随协程从未被await调用的RuntimeWarning。
异步客户端搭配的可行性说明
  • AsyncWebClient完全可以在Socket Mode应用中使用,但必须和异步版本的SocketModeClient配套使用,不能和同步版客户端混用。
  • 异步版本的SocketModeClient全链路逻辑都是协程实现,调用Web Client方法时会自动对返回的协程做await处理,和AsyncWebClient的运行逻辑完全匹配。
  • 如果坚持使用同步版的SocketModeClient,则必须搭配同步版本的WebClient,强行传入异步客户端必然会出现上述不兼容报错。
对应修正方案

方案1:全异步运行场景(适配AsyncWebClient)

将客户端替换为异步版本,所有涉及客户端调用的逻辑放入asyncio事件循环中执行,正确代码示例:

import asyncio
from slack_sdk.web.async_client import AsyncWebClient
from slack_sdk.socket_mode.async_client import AsyncSocketModeClient

app_token = 'xapp-XXX'
bot_token = 'xoxb-XXX'

async def run_socket_mode():
    web_client = AsyncWebClient(bot_token)
    sm_client = AsyncSocketModeClient(app_token=app_token, web_client=web_client)
    # 异步客户端的connect方法为协程,必须通过await触发执行
    await sm_client.connect()
    # 保持连接持续接收事件
    await sm_client.start()

if __name__ == "__main__":
    asyncio.run(run_socket_mode())

方案2:同步运行场景(保持原有非异步逻辑)

移除AsyncWebClient的使用,替换为同步版WebClient,代码示例:

from slack_sdk.web import WebClient
from slack_sdk.socket_mode import SocketModeClient

app_token = 'xapp-XXX'
bot_token = 'xoxb-XXX'

web_client = WebClient(bot_token)
sm_client = SocketModeClient(app_token=app_token, web_client=web_client)
# 同步客户端方法可直接调用,无需await
sm_client.connect()
sm_client.start()
注意事项
  • 两类SocketModeClient的调用逻辑完全独立,SDK未做跨运行时模型的兼容适配,禁止同步/异步客户端实例随意混搭。
  • 异步版本SocketModeClient的所有公开方法都是协程形式,必须运行在asyncio事件循环内,不能在普通同步代码中直接无await调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 02:36:02