品牌管理台 · M1 换皮 Demo

改完点「保存并发布」即可生效。右侧是终端客户会看到的界面(注入层品牌,与 Electron 客户端内的页面品牌同一套逻辑)。当前已发布版本:…

管理令牌
★ 私有化部署设置了 DEMO_ADMIN_TOKEN 时必须在这里填 —— 否则下面所有写操作(改品牌 / 配代理线路 / 签发客户端令牌)都会被服务端拒绝(403)。 令牌只保存在本机浏览器里,不随任何数据外发。

客户端账号与代理线路

每个 IM 账号走各自独立的出口 —— 降低多人共用同一出口 IP 带来的账号间关联度。 代理写在这里,随配置一起下发到客户端(带 ed25519 签名:改一笔就能把客户流量劫走,所以必须签名,客户端验不过就拒绝应用)。

绑定业务账号:客户端账号(左侧稳定 ID)只是客户端侧标识, 账号存活看板按业务账号号统计 —— 不绑定的话,客户端上报的登录态与出口对不上看板, 面板上会一直显示「未探测」。
★ 同一账号的出口 IP 尽量保持稳定(频繁换出口本身就是平台的异常信号); 这里只提供网络出口配置能力,不提供解封或规避平台风控的手段 —— 账号是否被限制由平台方风控决定,用途须在渠道商承诺书中如实声明。

客户端令牌与凭据

客户端上报消息靠一枚长期令牌识别身份(客户端不能自报"我是谁")。 这里签发 / 吊销这枚令牌,并生成凭据模板。 没有凭据文件,客户端一条消息都上报不上来 —— 而且界面不会报错,只是安静地什么都不发。

★ 重签会立刻作废旧令牌(同一客户端标识只有一枚有效令牌)—— 换机器或怀疑泄露时用。 吊销后该客户端立刻停止上报(吊销是即时的,不用等令牌过期)。

域名与 SSL 证书

这个平台用哪些域名对外在这里管,证书由 Let's Encrypt 自动签发(http-01 挑战,零外部依赖)。 签完立刻生效(不用重启服务),到期前 30 天会标需要续签。

★ 域名必须已经解析到本机,否则签发一定失败(ACME 验证器要能访问到这台机器的 80 端口)。 证书私钥落在服务端本地(server-lite/keys/domains/,不进交付包)→ 换机要重新签发。

红线控制

两条硬性红线在这里真正生效(不是只写在文档里): ① 品牌可强制下线 —— 违规 / 失联 / 纠纷时,平台必须能让某个租户立刻停用; ② 准入是发额度的前置闸门 —— 渠道商没完成「实名 + 用途声明 + 承诺书」,额度发不出去。

★ 下线后客户端会明确拒绝应用并提示「品牌已被下线」—— 不会偷偷换成平台默认品牌,也不会沿用本地缓存继续跑(下线必须是真的下线)。

渠道商准入

★ 提交材料后状态回到待审(材料一改,之前那次通过就作废); 材料不齐时无法通过(主体名称 / 证件号 / 用途声明 / 承诺书签署,缺一不可)。

知识库与术语

AI 接管的每条回复都基于知识检索 —— 你们的报价规则(MOQ / 单价 / 交期 / 认证要求) 写在这里,AI 接管才会用你们的规则,而不是平台通用话术。 只写通用结论("定制包装 MOQ 1000 pcs"),不要写客户名和订单号 —— 那些归会话存档管。

★ 触发词至少填一个:没有触发词/关键词的知识,AI 永远检索不到(保存时会明确提醒)。 ★ 只有「已发布」参与检索 —— 草稿可以让客服先过一遍,不影响 AI。 ★ 预览命中用的是 AI 同一个检索函数:预览说命中,接管时就真会命中。

术语表(客服 hover 看到的解释)

品牌字段

保存即写入 brand_config 新版本并用服务端 Ed25519 私钥签名;客户端启动时验签后才应用。没有这一步,客户端会继续沿用缓存里的旧品牌(粘性降级),不会露馅。

已发布配置的签名

version
—
alg
ed25519
signature
—

终端客户预览

买家 Lisa · 美区
Marco · 欧盟
Aki · 日本
老客户 王先生
买家 Lisa
Hi, do you support custom sizes? What is the MOQ?
Hi Lisa! We support custom sizes, MOQ starts at 500 pcs.
Great. Could you quote FOB Shanghai?

客户端窗口标题、任务栏图标、托盘图标、应用菜单、登录页与关于页,全部由同一份 brand_config 驱动。

Electron 客户端

客户端启动时:拉 /api/client/bootstrap → 验签 → 应用品牌到窗口/图标/托盘/菜单 → 渲染层应用页面内品牌。之后每 60 秒心跳一次,服务端版本更高时提示「重启以应用新品牌」。

失败回退:拉取失败时使用本地缓存的上一份品牌配置,绝不回落到平台默认品牌——否则渠道商的终端客户会在某次网络抖动后突然看到我们的名字。

cd client && npm run shot