diff --git a/docs/contact-telegram-channels-design.html b/docs/contact-telegram-channels-design.html new file mode 100644 index 0000000..8e0d4f7 --- /dev/null +++ b/docs/contact-telegram-channels-design.html @@ -0,0 +1,316 @@ + + +
+ + +交互设计 · Telegram/LINE 多频道 · 群组 · 内容 DB 配置 · 前端 + 后端 + 数据库
+ +@PangolinVPN_bot)。
+需求:点 Telegram 进入二级页,列出该平台下的多个频道 / 群组 / Bot,
+每项含名称、@handle、一句说明、可选成员数、认证标记与「打开 / 加入」动作,
+全部由数据库配置(运营可随时增删改,客户端不写死)。本页给出交互原型 + 数据模型 + 接口,待你统一后再开发。
+下方为内嵌可交互原型,配色用 App 真实暗色 token(clay/espresso)。点 Telegram 或 LINE 卡进详情;「邮箱客服 / 自助发卡商店」为单链接,点即直接打开(原型里仅提示)。
+ +遇到问题?通过以下任一渠道联系我们,通常数分钟内回复。
+ +同一原型内切换三态 · 真机为路由 push(移动端整页)/ 内容区替换(桌面)
+ +›,点击进二级页(Telegram / LINE)。
+仅 1 条链接的平台(邮箱、发卡商店)→ 点击直接执行该链接动作(打开邮件 / 浏览器),不进二级。
+规则统一由「该平台 link 条数」驱动,无需前端写死哪个进二级。‹ 返回 + 平台头(图标 + 名 + 一句副标题);下方按 kind 分组展示
+——频道 CHANNELS / 群组 GROUPS / 客服机器人 BOT(分组标题仅在该组有内容时出现,顺序固定)。@handle ·
+可选成员数(展示用缓存文本,不实时拉 Telegram)· 动作按钮。tg://resolve?domain=… 唤起已装 Telegram,失败回退 https://t.me/…(浏览器)。enabled=0 → L1 不展示该平台;二级页某分组为空 → 不渲染该分组标题。
+全部为空的平台不出现在联系页。单表承载 L1 平台入口与 L2 子项:一行 = 一条可点链接。L1 由 platform 聚合而来,二级由 kind 分组。
contact_link +───────────────────────────────────────────────────────────── +id INTEGER PK +platform TEXT -- telegram | line | email | store | ...(L1 分组键) +kind TEXT -- channel | group | bot | link(L2 分组键 & 动作样式) +title TEXT -- "穿山甲 · 官方频道" +handle TEXT -- "@PangolinVPN"(展示;可空) +url TEXT -- "https://t.me/PangolinVPN"(点击目标;App 侧优先转 tg://) +description TEXT -- 一句说明(可空) +member_hint TEXT -- "12.3k"(纯展示缓存,可空;不实时拉) +verified INTEGER -- 0/1 认证勾 +sort_order INTEGER -- 组内排序 +enabled INTEGER -- 0/1 下线开关 +locale TEXT -- "zh"|"en"|NULL(全部) 可选按语言过滤 ++
L1 平台的图标 / 显示名 / 强调色由前端按 platform 枚举内置(Telegram=✈+强调、LINE=💬…),
+不入库,避免图标资源塞数据库。库里只配内容。单链接平台(email/store)建议各配 1 行 kind=link。
GET /v1/contact # 无需登录亦可(客户端普通请求)
+→ 200
+{
+ "platforms": [
+ { "platform":"telegram",
+ "links":[
+ {"kind":"channel","title":"穿山甲 · 官方频道","handle":"@PangolinVPN",
+ "url":"https://t.me/PangolinVPN","description":"产品更新与公告",
+ "member_hint":"12.3k","verified":true},
+ {"kind":"group","title":"穿山甲 · 用户交流群","handle":"@PangolinChat",
+ "url":"https://t.me/PangolinChat","description":"使用问题互助","member_hint":"8.7k"},
+ {"kind":"bot","title":"客服机器人","handle":"@PangolinVPN_bot",
+ "url":"https://t.me/PangolinVPN_bot","description":"自动答疑/提交工单"}
+ ]},
+ { "platform":"line", "links":[ ... ] },
+ { "platform":"email", "links":[{"kind":"link","title":"邮箱客服","url":"mailto:support@pangolin.vpn"}] },
+ { "platform":"store", "links":[{"kind":"link","title":"自助发卡商店","url":"https://shop.pangolin.vpn"}] }
+ ]
+}
+enabled=1 过滤、按 sort_order 排序、按 platform→kind 分组返回;客户端只渲染。server/migrations/{mysql,sqlite}/ 各加建表 + 种子数据(把现有 4 渠道灌入,Telegram 先补真实频道/群)。member_hint 手工填/留空)/v1/contact 还是并进现有配置引导(如 /me bootstrap)一起下发?