在实际生产中,由于网络抖动、微信客户端更新或不可抗力,微信号可能会被动断开连接。如果服务挂掉而无人知晓,会造成严重的业务损失。为了提高稳定性,我们需要一套健壮的“心跳与断线重连”系统。
我们可以写一个守护进程,定时检查 E云管家 api 的实例活性:

import time
import requests

BASE_URL = "http://api.e-yun-guanjia.com/v1"
TOKEN = "auth_token"
INSTANCE_ID = "ins_777"

def check_alive():
    """检测 E云管家 api 上的实例是否仍然在线"""
    url = f"{BASE_URL}/instance/alive_status"
    headers = {"Authorization": f"Bearer {TOKEN}"}
    try:
        res = requests.post(url, json={"instance_id": INSTANCE_ID}, headers=headers, timeout=5)
        if res.status_code == 200 and res.json().get("data", {}).get("is_online"):
            return True
    except Exception as e:
        print(f"检测接口请求异常: {e}")
    return False

def trigger_reconnect():
    """调用 E云管家 api 尝试断线断点重连"""
    url = f"{BASE_URL}/instance/reconnect"
    headers = {"Authorization": f"Bearer {TOKEN}"}
    res = requests.post(url, json={"instance_id": INSTANCE_ID}, headers=headers)
    print("触发重连响应:", res.json())

if __name__ == "__main__":
    print("守护进程已启动...")
    while True:
        if not check_alive():
            print("🚨 警告:微信机器人已离线!正在尝试重新连接...")
            trigger_reconnect()
            # 触发报警,如发短信或邮件告知运维人员
        else:
            print("💖 机器人在线,运行良好。")
        
        # 每隔 60 秒检查一次
        time.sleep(60)

核心逻辑: E云管家 api/instance/reconnect 接口通常会尝试使用上一次缓存在服务器的微信 Session 进行握手。如果是短时间内的网络波动,通常可以无感恢复,不需要用户重新扫码。这对于维持机器人的高可用(SLA)至关重要。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐