用 Python 10 行代码给企业微信接入 AI 客服(附完整源码)

8 阅读3分钟

背景

公司用企业微信做客服,每天重复回答大量相似问题。试过龙虾(OpenClaw),个人聊天场景确实好用,但企业客服场景有些不够:

  • 需要对接企微的客服 API(不是个人聊天)
  • 需要自选模型(Claude/GPT/DeepSeek,哪个便宜用哪个)
  • 需要对话记忆(客户分多次问,上下文不能丢)
  • 需要自部署(客户数据不能跑到第三方平台)

找了一圈没有现成的轻量方案,就自己写了一个开源框架:WeComBot

GitHub:github.com/hi-xXX/weco… PyPI:pip install wecom-ai-bot

分享一下实现过程,希望对有类似需求的同学有帮助。

最终效果

10 行核心代码,企微客服就能自动回复 AI 生成的内容:

from wecombot import WeComBot
from wecombot.ai import AIChatHandler
from wecombot.ai.providers import AnthropicProvider
from wecombot.memory import LocalMemory

bot = WeComBot("config.yaml")
provider = AnthropicProvider(api_key="你的API Key")
memory = LocalMemory("./history")
ai = AIChatHandler(provider=provider, memory=memory,
                   system_prompt="你是XX公司的客服助手,回答要简洁专业。")

@bot.on_text
async def handle(bot, msg):
    reply = await ai.handle(msg.content, msg.external_userid)
    await bot.reply(msg, reply)

bot.run()

技术方案

为什么用企微客服 API 而不是 Webhook?

企微有两种机器人接入方式:

Webhook 机器人客服 API
能力只能往群里发消息完整收发、加解密、客户管理
场景告警通知对外客服
双向通信
适合 AI 对话不适合适合

客服 API 才是做 AI 客服的正确选择。

架构

客户微信 → 企微客服 → Webhook回调 → WeComBot → AI模型 → 回复
                         ↓
                    AES-CBC 解密
                    消息去重
                    异步处理

核心模块:

  • 消息加解密:企微回调消息是 AES-CBC 加密的,必须正确解密
  • Token 管理:access_token 有效期 2 小时,需缓存+自动刷新
  • 消息去重:企微可能重复推送同一条消息,用 msgid 做去重
  • 异步处理:收到回调立即返回 200,AI 处理放后台

多模型支持

不绑定任何一家 AI 服务,通过 Provider 抽象层支持所有主流模型:

# Claude
from wecombot.ai.providers import AnthropicProvider
provider = AnthropicProvider(api_key="sk-ant-xxx")

# GPT
from wecombot.ai.providers import OpenAIProvider
provider = OpenAIProvider(api_key="sk-xxx")

# DeepSeek(或任何 OpenAI 兼容接口)
provider = OpenAIProvider(
    api_key="你的key",
    base_url="https://api.deepseek.com/v1"
)

# 本地 Ollama
provider = OpenAIProvider(base_url="http://localhost:11434/v1")

所有 Provider 都是纯 httpx 实现,不依赖任何官方 SDK,零外部依赖冲突

对话记忆

客服场景需要记住上下文。框架内置两种记忆方案:

  • LocalMemory:JSON 文件存储,每个客户一个文件,适合单机部署
  • RedisMemory:Redis 存储,支持多实例共享,适合集群部署
# 单机
memory = LocalMemory("./history")

# 集群
from wecombot.memory import RedisMemory
memory = RedisMemory(redis_url="redis://localhost:6379")

插件系统

除了 AI 对话,还可以用插件处理特定场景:

from wecombot.plugins import BasePlugin

class PriceQueryPlugin(BasePlugin):
    name = "price_query"
    description = "查询产品价格"

    async def can_handle(self, message):
        return "价格" in message.content or "多少钱" in message.content

    async def handle(self, bot, message):
        # 查数据库,返回价格
        return "我们的标准版价格是 999 元/年,详情请咨询销售。"

bot.use(PriceQueryPlugin())

插件优先于 AI 处理——匹配到插件就直接回复,不消耗 AI token。

部署

Docker 一键启动:

docker compose -f docker/docker-compose.yml up -d

用 cloudflared 暴露到公网(免费):

cloudflared tunnel --url http://localhost:8000

把 tunnel URL 填到企微后台的回调地址里就完事了。

企微后台配置(5 分钟)

  1. 登录 企微管理后台
  2. 进入「客服」→ 创建客服账号
  3. 记下 corp_idsecretkf_account
  4. 设置回调 URL,获取 tokenencoding_aes_key
  5. 填入 config.yaml

详细图文教程见 文档

合规说明

项目仅使用企业微信官方开放 API,不涉及任何逆向工程或非授权协议。

这和 WeChatPadPro、itchat 等方案有本质区别——那些走的是非官方协议,有法律风险(已有判赔 500 万的案例)。企微客服 API 是腾讯自己开放的,完全合规。

源码

MIT 协议开源,欢迎 Star 和 PR:

如果你也在做企微 AI 客服,欢迎交流。