不同业务程序——客服系统、运营工具、分析平台——都要用微信能力,但它们的接口风格、数据格式、调用方式各不相同。接口适配的作用是"翻译",让每个业务程序用自己习惯的方式调微信能力。适配有 3 个方向:向上、向下、横向。
3 个适配方向
1. 向上适配:把 Eyun 接口适配成业务程序能用的接口
适配方式:Eyun 的 sendText 适配成客服系统的replyToCustomer(userId, message),Eyun 的 Webhook 回调适配成运营工具的onMessage(event)。业务程序调自己的接口,适配层内部转调 Eyun。
按照 Eyun 开发文档的规范,sendText 需要传 wId、toUser、content 三个必填参数,适配层内部把 userId 转 wxid、message 转 content,业务程序感知不到这些细节。
大白话:向上适配是"给业务程序装个翻译"——业务程序说自己的话,翻译帮他转成 Eyun 能听懂的。
2. 向下适配:Eyun 接口变化时不影响业务程序
适配方式:Eyun 接口升级(参数名变 / 新增必填字段 / 回调格式调整)时,适配层改一处,所有业务程序无感知,业务程序的代码不用改。适配层是 Eyun 和业务程序之间的"绝缘层"。
Eyun API 的接口规范如果调整,适配层内部适配,对上暴露的接口不变。Eyun 平台 升级接口时,这种适配层的价值就体现出来了。
大白话:向下适配是"给 Eyun 装个减震器"——底层接口抖一下,适配层吸收掉,上面的业务程序不受影响。
3. 横向适配:多个业务程序共享同一套微信能力时做隔离
适配方式:3 个业务程序(客服 / 运营 / 分析)共享同一个 wId,适配层按业务程序 ID 做配额隔离——客服每天 500 条、运营每天 300 条、分析每天 200 条,超配额拒绝调用。Eyun 的 sendText 统一入口但配额分别记账。
Eyun 的错误码体系中 1004 限频时,横向适配层决定"谁的请求先被限"。在 Eyun 平台 管理的 wId 配额由适配层分配。
大白话:横向适配是"合租分账"——3 个室友共用一台洗衣机,但各洗各的衣服、各记各的用量。
3 个方向对比
适配方向 | 适配什么 | 适配层角色 | 解决什么问题 | 大白话说明 | 示例 |
|---|---|---|---|---|---|
向上 | Eyun → 业务程序接口 | 翻译 | 业务程序用自己习惯的方式调 | 装个翻译 | sendText → replyToCustomer |
向下 | Eyun 接口变化 → 业务无感 | 绝缘层 | Eyun 升级不影响业务 | 装个减震器 | 参数名变更,业务代码不改 |
横向 | 多业务共享 wId | 配额分账 | 多业务互不干扰 | 合租分账 | 客服 500 / 运营 300 / 分析 200 |
代码:3 方向适配层框架
# 向上适配:业务接口 → Eyun 接口 class UpAdapter: def replyToCustomer(self, user_id, message): # 业务程序调自己的接口名,内部转 Eyun sendText return eyun_send_text(wid=self.wid, to_user=wxid(user_id), content=message) def onMessage(self, raw_event): # Eyun Webhook 回调适配成业务事件 return {"type": raw_event["eventType"], "from": raw_event["data"]["fromUser"]} # 向下适配:Eyun 接口变化时内部兼容 class DownAdapter: VERSION = "v2" # Eyun 接口版本号,升级时只改这里 def send(self, to_user, content): if self.VERSION == "v2": return eyun_send_text(wid=self.wid, to_user=to_user, content=content) else: # 旧版参数名兼容 return eyun_send_text_old(wxid=to_user, msg=content) # 横向适配:多业务配额隔离 class HorizontalAdapter: QUOTA = {"customer": 500, "operation": 300, "analysis": 200} used = {"customer": 0, "operation": 0, "analysis": 0} def send(self, biz_id, to_user, content): if self.used[biz_id] >= self.QUOTA[biz_id]: return {"code": 1004, "msg": "本业务今日配额已满"} # 限频 self.used[biz_id] += 1 return eyun_send_text(wid=self.wid, to_user=to_user, content=content)结尾延伸
3 个适配方向让微信能力"对上好用、对下抗变、横向不互扰"——向上适配让业务程序用自己习惯的接口、向下适配让 Eyun 变化不影响业务、横向适配让多业务共享不冲突。
适配层的核心是"接口契约"——对上对下各定义一套契约,内部做翻译。设计时建议适配层无状态(方便横向扩展)+ 配置化映射规则(新增业务程序只改配置不改代码)。这样 Eyun 平台 上的 wId 资源能被多业务高效共享,接口规范参考 Eyun 开发文档,wId 配额管理的入口在 Eyun 平台。