业务做大之后,经常不止一个企微账号------销售部一个、客服部一个、运营一个,每个账号有独立的 appid。如果每个账号单独接一套接口,业务方要切三个入口,开发要维护三套代码。我们做了一个统一接入层,多个账号对外表现成同一个接口,业务方不用关心背后几个账号。
账号注册表
所有账号集中注册,存每个账号的 appid、app_token、业务归属(哪个部门用)、状态。注册表里给每个账号分配一个内部 key,业务方只认内部 key,不碰 appid。
ACCOUNTS = {
"sales": {"appid": "we_001", "token": "eyk_xxx", "dept": "销售部", "status": "active"},
"service": {"appid": "we_002", "token": "eyk_yyy", "dept": "客服部", "status": "active"},
"ops": {"appid": "we_003", "token": "eyk_zzz", "dept": "运营", "status": "paused"},
}
统一调用入口
业务方调用统一入口,传内部 key 和接口动作。入口查账号注册表拿到 appid 和 token,拼好请求转发到 Eyun 接口。业务方代码里没有 appid,换账号时业务代码不动。
python
def call(account_key, action, payload):
account = ACCOUNTS[account_key]
if account["status"] != "active":
raise Exception("账号不可用")
payload["appid"] = account["appid"]
return requests.post(
f"{BASE}/wx-api/api/{action}",
headers={"Authorization": f"Bearer {account['token']}"},
json=payload
).json()
账号间路由
某些业务动作需要跨账号------比如客服部的工单要通知销售部跟进人。统一入口里加一层路由:按目标联系人 uin 判断归哪个账号管,自动路由到对的账号发消息。
路由逻辑基于联系人归属关系表,哪个员工在哪个账号下一目了然。接口字段在开发文档里有完整说明。
批量切换与灰度
账号要下线或新增,在注册表里改状态就行,业务代码不动。新账号上线时可以按部门灰度,先让部分业务切过去,跑稳了再全量。
审计与隔离
所有调用统一记流水:哪个业务、哪个账号、调了什么接口、结果如何。审计集中做,每个账号的调用量单独统计,出问题能定位到具体账号和业务方。
不同账号的消息回调也统一接收,按 appid 分发到各自的业务处理器。回调路由在统一入口层完成,不暴露给业务方。
结尾
多账号统一管理的核心是一层薄抽象:对外只暴露内部 key 和统一接口,对内查注册表路由到具体账号。加账号、换账号、切账号都只改注册表,业务代码和接口调用方式不用动。