做企微生态开发,最绕不开也是最让人头疼的就是“外部群”(含微信客户的群)。官方接口限制多,如果纯手写原生代码,你需要搞定复杂的 AES 加解密、各种 Token 维护,还得处理极高的鉴权门槛。

今天这篇帖子,我们把外部群的消息回调监听关键词自动回复以及成员进退群管理组合起来,用一套极简的代码逻辑彻底跑通全流程。底层通道我们直接利用 星云API www.xingyapi.com 提供的标准化服务,跳过造轮子的阶段,直接切入核心业务。

一、 核心架构:听与说的闭环

整个外部群机器人的核心无非两点:

  1. 听(Webhook回调): 群里发生了什么动态(有人说话、有人进群、有人退群),平台实时推送给你的服务器。

  2. 说(主动发消息/管理): 你的服务器收到推送后,根据代码里写的业务逻辑,调用接口执行对应的动作。

开发前,建议直接对照 星云开放文档星云API开发文档|企业微信API接口文档 核对各个群接口和事件回调的 JSON 参数格式,这样写起代码来不容易漏字段。

二、 监听外部群与回调配置

首先在控制台配置你的 Webhook 接收地址。一旦群里有动态,你的服务器就会收到纯明文的 POST 请求,免去了自己写算法解密的痛苦。

拿到了纯净的 JSON 数据,我们就可以在代码里写路由分发了。如果是群消息,就走自动回复逻辑;如果是成员变动事件,就走群管理逻辑。

三、 组合实战:自动答疑 + 进群欢迎语代码演示

下面直接上 Python (Flask) 的核心代码。我们将自动回复和进群欢迎语融合在一个服务里:

Python

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

# 你的专属配置
API_KEY = "你的专属API_KEY"
SEND_URL = "https://api.xingyapi.com/v1/group/send_message"

@app.route('/group_webhook', methods=['POST'])
def handle_group_logic():
    data = request.json
    
    # 提取基础字段
    chat_id = data.get("chat_id")
    event_type = data.get("Event") # 事件类型(如进退群)
    msg_type = data.get("MsgType") # 消息类型(如文本、图片)
    
    # 场景 1:群管理 - 监听进群事件并发送专属欢迎语
    if event_type == "add_member":
        new_user = data.get("UserID")
        welcome_text = f"@{new_user} 欢迎加入技术交流群!请查阅群公告获取最新资料。"
        # 调接口发消息并@新人
        send_msg(chat_id, welcome_text, [new_user])
        
    # 场景 2:自动回复 - 监听文本消息并识别关键词
    elif msg_type == "text":
        content = data.get("Content", "")
        sender_id = data.get("FromUserName")
        
        # 匹配业务关键词
        if "资料" in content:
            reply_text = f"@{sender_id} 您需要的项目资料已打包,请点击链接下载..."
            send_msg(chat_id, reply_text, [sender_id])
            
    # 必须快速返回 200,避免平台重试推送
    return jsonify({"status": "success"})


def send_msg(chat_id, text, mentioned_list):
    """封装发送消息的请求逻辑"""
    payload = {
        "apikey": API_KEY,
        "chat_id": chat_id,
        "msgtype": "text",
        "text": {
            "content": text,
            "mentioned_list": mentioned_list
        }
    }
    requests.post(SEND_URL, json=payload)

if __name__ == '__main__':
    # 启动服务
    app.run(port=5000)

四、 总结

通过把 Webhook 路由分发做散,你可以无限扩展群机器人的业务能力。比如:监听到 del_member (退群) 事件,就去公司的 CRM 系统里把客户标签做个变更;监听到特定的查询指令,就去查内网数据库并推送到群里。

把繁琐的鉴权和底层通信交出去,这种开发模式非常适合需要快速迭代、多平台落地的技术团队。想了解更多关于高阶群管理 API 的定义,可以直接访问 星云API官网星云API|企业微信API接口服务平台。大家在写代码联调时遇到跑不通的地方,欢迎在评论区贴出你的报错日志一起交流!

Logo

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

更多推荐