在社群运营与客户服务场景中,将 AI 大模型(如 DeepSeek、OpenAI 等)与企业微信外部群打通,能够大幅降低人工客服答疑成本,实现 24 小时实时响应。
本文将演示如何利用企微二次开发 API 与 Webhook 回调,结合 LLM 构建一个具备上下文记忆能力的外部群智能问答助手。
一、 整体系统架构设计
系统通过 Webhook 接收企微群消息,将其发送给大模型进行处理,再将生成的结果异步回复至对应的外部群:
[企微外部群消息] ──► [企微 API 节点] ──► (Webhook 回调) ──► [开发者 Python 后端]
│
(请求 LLM 大模型 API)
│
[企微外部群消息] ◄── [企微 API 节点] ◄── (HTTP 发送接口) ◄────────┘
环境准备提示 :在开始接入前,关于企微消息回调格式与发送消息的接口规范,可先查阅 企微二次开发 API 文档 了解完整的 Request / Response 字段定义。
二、 核心代码实现(Python + DeepSeek / OpenAI API)
以下为完整的可运行服务端代码示例,实现了接收群消息 ➔ 智能判断 ➔ 调用大模型 ➔ 回复群消息的完整闭环。
python
from flask import Flask, request, jsonify
import requests
import json
app = Flask(__name__)
# 配置参数
QIWE_API_BASE = "http://your-qiwe-api-server"
DEEPSEEK_API_KEY = "your-deepseek-api-key"
def call_llm(prompt):
"""调用大模型 API 获取回答"""
url = "https://api.deepseek.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一位专业且礼貌的企业客服助手,回答要简明扼要。"},
{"role": "user", "content": prompt}
]
}
try:
res = requests.post(url, headers=headers, json=data, timeout=10)
return res.json()['choices'][0]['message']['content']
except Exception as e:
return "不好意思,客服系统正忙,请稍后再试。"
def send_group_text(guid, chat_id, text):
"""通过企微 API 发送群消息"""
url = f"{QIWE_API_BASE}/work/message/sendtext"
payload = {
"guid": guid,
"content": {
"chat_id": chat_id,
"msg_type": 1,
"text": text
}
}
requests.post(url, json=payload)
@app.route('/webhook/group_msg', methods=['POST'])
def handle_group_msg():
data = request.json
# 解析企微群消息事件
if data.get('event_type') == 'GROUP_MSG_RECEIVED':
guid = data.get('guid')
content = data.get('content', {})
chat_id = content.get('chat_id')
msg_text = content.get('text', '')
# 触发条件(例如包含 @机器人 或特定前缀)
if msg_text.startswith("@客服"):
query = msg_text.replace("@客服", "").strip()
# 1. 请求大模型
ai_reply = call_llm(query)
# 2. 回复群消息
send_group_text(guid, chat_id, ai_reply)
return jsonify({"code": 0, "msg": "success"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
三、 优化与避坑指南
-
异步队列(MQ)隔离 :大模型生成回答通常需要 1-3 秒,Webhook 收到消息后应立即返回
200 OK,将任务推入 Redis/RabbitMQ 异步处理,防止超时导致的重复回调。 -
上下文对话管理 :如需支持多轮对话,建议在 Redis 中按
chat_id+user_id维护历史消息 List,控制 Token 长度。