Python 进阶:构建外部群消息“监听引擎”

6 阅读2分钟

QiWe开放平台 · 个人名片

API驱动企微 外部群 自动化,让开发更高效

        官方站点:www.qiweapi.com

        对接通道:进入官方站点联系客服

        团队定位:企微生态深度服务,专注 API+RPA 融合技术方案

要实现自动化响应,首先要让 Python 程序“听”到外部群在说什么。不同于官方 API 复杂的配置,基于 RPA 的接口通常提供 WebSocketHTTP 推送两种方式。

1. 技术方案:基于 Flask/FastAPI 的消息接收

我们将使用 FastAPI 快速搭建一个高性能的消息接收端口,用于接收来自接口端的实时数据推送。

2. 代码实现:解析外部群消息流

根据文档规范,当外部群产生消息时,接口会向你预设的服务器发送如下结构的 JSON:

  • 群聊识别:通过 external_group_id 区分。
  • 发送者识别:通过 sender_wxid 获取。
  • 消息类型type(1: 文本, 3: 图片...)。
from fastapi import FastAPI, Request
import uvicorn

app = FastAPI()

@app.post("/callback")
async def wechat_callback(request: Request):
    # 1. 接收来自接口端的原始数据
    data = await request.json()
    
    # 2. 识别消息来源
    msg_type = data.get("type")
    room_id = data.get("room_id")  # 外部群ID
    sender = data.get("sender")    # 发送人wxid
    content = data.get("content")  # 消息内容

    # 3. 逻辑过滤:仅处理外部群的消息
    if "@chatroom" in room_id:
        print(f"收到外部群 [{room_id}] 消息: {content}")
        
        # 关键词自动触发逻辑
        if "技术支持" in content:
            await handle_support_request(room_id, sender)

    return {"status": 200, "message": "success"}

async def handle_support_request(room_id, sender):
    # 这里可以调用上一篇写的 QiWeApiConnector 主动回复
    print(f"正在为 {sender} 检索技术文档...")

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

3. 异步处理的优势

在处理外部群消息时,Python 的 async/await 机制至关重要。

  • 非阻塞:当收到一条图片消息需要下载并上传到云端时,异步操作不会阻塞后续其他外部群的消息接收。
  • 并发响应:如果你管理着几百个外部群,同步代码会导致消息积压,而异步架构可以轻松应对瞬时的高频对话。

4. 进阶技巧:消息审计与合规过滤

通过 Python 监听,你可以轻松实现官方后台较难定制的功能:

  • 违规词拦截:在消息推送给群成员之前(或发出后秒级)进行检索。
  • 自动保存附件:监听到文件类消息(Type: 6),自动调用 GetMsgFile 接口将外部群资料保存到本地服务器。

总结

掌握了“监听”与“主动调用”,你就完成了企业微信自动化闭环的两大支柱。Python 的简洁性使得我们可以在几行代码内完成复杂的业务逻辑。