这篇是实操向的,从开通实例到机器人跑起来,一步步走。不讲概念,只讲怎么做。
第一步:开通企微实例,拿到凭证
在 Eyun 控制台开通企微实例,拿到三样东西:
appid:实例标识,格式we_xxxApp Token:API 调用凭证,格式eyk_xxxx签名密钥:回调验签用
回调地址填你的服务器地址,比如https://your-domain.com/wx-api/webhook/。
第二步:搭回调服务
用 Flask 搭一个最小可用的回调服务:
from flask import Flask, request import hmac, hashlib, json, requests app = Flask(__name__) BASE = "https://your-base-url" APPID = "we_xxx" TOKEN = "eyk_xxxx" SECRET = "your-signature-secret" HEADERS = {"Authorization": f"Bearer {TOKEN}"} @app.route("/wx-api/webhook/", methods=["POST", "GET"]) def webhook(): # 验证请求 echostr = request.args.get("echostr") or ( request.json.get("echostr") if request.is_json else None ) if echostr: return echostr # 验签 signature = request.headers.get("X-Eyun-Signature") raw_body = request.get_data(cache=True) expected = hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest() if not hmac.compare_digest(expected, signature): return "forbidden", 403 # 去重 delivery_id = request.headers.get("X-Eyun-Delivery") if not redis.setnx(f"cb:{delivery_id}", 1, ex=86400): return "ok" # 处理消息 data = request.json["data"] handle_message(data) return "ok" def handle_message(data): if data.get("messageType") != 1: # 只处理群聊 return text = data.get("content", "").strip() if not text: return # 判断该不该回 if not should_reply(text): return # 调 AI answer = ask_ai(text, data["roomId"]) # 发送回复 send_text(data["conversationId"], answer) def should_reply(text): if len(text) < 5: return False return any(k in text for k in ["怎么", "请问", "求助", "@机器人"]) def ask_ai(question, room_id): # 取群上下文 context = get_recent_messages(room_id, limit=10) messages = [ {"role": "system", "content": "你是企业微信群里的 AI 客服,回复简洁专业。"}, {"role": "user", "content": f"群聊记录:\n{context}\n\n问题:{question}"} ] resp = requests.post( "https://api.deepseek.com/v1/chat/completions", headers={"Authorization": f"Bearer {DEEPSEEK_KEY}"}, json={"model": "deepseek-chat", "messages": messages, "max_tokens": 500} ).json() return resp["choices"][0]["message"]["content"] def send_text(conv_id, text): requests.post( f"{BASE}/wx-api/api/message/sendText", headers=HEADERS, json={"appid": APPID, "conversationId": conv_id, "content": text} ) if __name__ == "__main__": app.run(port=5000)第三步:配置 AI 模型
DeepSeek 和 OpenAI 的调用方式一样,换 endpoint 和 model 名就行:
平台 | Endpoint | Model |
|---|---|---|
DeepSeek |
|
|
OpenAI |
|
|
API Key 在各自平台申请,充钱就能用。
第四步:加知识库(可选)
如果希望机器人回答产品相关问题,需要接知识库。简单做法是把 FAQ 存成文本,每次调 AI 时塞进去:
FAQ = """ Q: 怎么申请权限? A: 在 OA 系统提交申请,审批通过后自动开通。 Q: 怎么重置密码? A: 点击登录页"忘记密码",按提示操作。 """ def ask_ai(question, room_id): messages = [ {"role": "system", "content": f"你是企业微信群里的 AI 客服。参考以下 FAQ:\n{FAQ}"}, {"role": "user", "content": question} ] # ...FAQ 多的话,建议用向量数据库(Pinecone、Milvus、Chroma)做检索,别全塞 prompt 里。
第五步:上线前检查
回调地址能公网访问,HTTPS
签名密钥配置正确
群聊消息能正常接收
AI API Key 有余额
单群频控已加
一个真实的上线数据
某团队的群 AI 客服,上线第一周:
收到消息 1,200 条
AI 回复 340 条(28%)
转人工 86 条(7%)
平均响应时间 4 秒
剩下的 65% 是闲聊和已解决的问题,AI 正确识别并跳过了。
企微回调和发送的字段在Eyun 开发文档里能查到,实例和凭证在 Eyun 控制台开通。