一、引言
一个成熟的微信机器人不应该只会复读机式的聊天,而应该具备工具属性。通过将微信协议API与外部开放平台(如快递物流查询、外卖平台分发接口)打通,用户只需在微信会话中发送一句简单的指令,机器人就能自动到对应的后台获取动态并实时返回,大幅提升账号黏性。

参考文档——API 参考 | Eyun
二、核心代码实现
本文通过模拟一个物流查询的事务逻辑,演示如何拦截用户特殊指令并进行多端路由中转。

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

API_HOST = "http://127.0.0.1:8080"
API_TOKEN = "your_secure_api_token"

def get_express_status(tracking_number):
    """模拟请求外部快递开放接口"""
    # 实际开发中替换为合规的外部物流中台API(如快递100等)
    return f"📦 运单 {tracking_number} 最新动态:【北京朝阳分拨中心】已发出,正派往特定投递点。"

def reply_to_weixin(to_wxid, text):
    """回传处理结果"""
    url = f"{API_HOST}/msg/send_text"
    payload = {"to_wxid": to_wxid, "content": text}
    requests.post(url, json=payload, headers={"Authorization": f"Bearer {API_TOKEN}"})

@app.route('/webhook/tools', methods=['POST'])
def handle_tool_commands():
    data = request.json
    if data.get("type") == 1001:
        payload = data.get("payload", {})
        from_user = payload.get("from_wxid")
        raw_text = payload.get("content", "").strip()
        
        # 指令解析,判断是否符合“查快递 XXX”的结构
        if raw_text.startswith("查快递"):
            command_parts = raw_text.split(" ")
            if len(command_parts) > 1:
                num = command_parts[1]
                # 调用外部第三方系统接口
                report = get_express_status(num)
                # 将结果转回微信端输出
                reply_to_weixin(from_user, report)
            else:
                reply_to_weixin(from_user, "⚠️ 指令格式错误。格式:查快递 [你的运单号]")
                
    return jsonify({"status": "ACK"})

if __name__ == '__main__':
    app.run(port=5000)

“微信输入-外网适配-微信输出”构成了工具型机器人的基本链路。在这种二次开发场景中,最需要防范的是连接外部服务出现超时(Timeout)。必须要给外部 API 的连接显式加上超时保护,并提供一个降级回复(如“网络繁忙请稍后再试”),切不可让线程卡死在外部请求中。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐