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

Slack Events API通过Python Websocket接收数据时重试问题求助

解决Slack Socket Mode消息重复问题

你的问题核心是收到的websocket消息是JSON字符串而非Python字典,直接用message['envelope_id']会触发异常,导致消息确认逻辑完全没执行,Slack服务器因为收不到送达确认,就会不断重试推送消息。

另外要注意:Slack要求的确认消息不是直接发送envelope_id字符串,而是要发送包含该字段的JSON对象。

修正后的代码

from settings import slack_app_token
from settings import slack_client
import websocket
import json


def on_open(ws_app):
    print("Connection is opened")


def on_message(ws_app, message):
    print(message)
    try:
        # 把JSON字符串解析为Python字典
        msg_data = json.loads(message)
        envelope_id = msg_data.get('envelope_id')
        if envelope_id:
            # 构造符合要求的确认消息并发送
            ack_msg = json.dumps({"envelope_id": envelope_id})
            ws_app.send(ack_msg)
            print(f"已确认消息,envelope_id: {envelope_id}")
    except Exception as e:
        print(f"处理消息时出错: {str(e)}")


conn = slack_client.apps_connections_open(app_token=slack_app_token)
url = conn['url']

ws_app = websocket.WebSocketApp(url, on_message=on_message, on_open=on_open)
ws_app.run_forever()

关键修正点

  • 引入json模块,将收到的字符串消息解析为字典,才能正确提取envelope_id
  • 确认消息必须是JSON格式的对象({"envelope_id": "xxx"}),而非单纯的ID字符串
  • 添加异常捕获,避免单个消息处理失败导致整个连接逻辑中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:04