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
相关产品推荐
相关产品推荐

