From 14bcdc2e79b5f1e76066d9f0a4ec9dd06916ecfe Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Thu, 2 Jul 2026 12:30:24 +0800 Subject: [PATCH] =?UTF-8?q?docs(contact):=20=E8=90=BD=E5=AE=9A=E6=B8=A0?= =?UTF-8?q?=E9=81=93=E4=BA=8C=E7=BA=A7=E9=A1=B5=E8=AE=BE=E8=AE=A1=20?= =?UTF-8?q?=E2=80=94=E2=80=94=20=E7=BB=9F=E4=B8=80=E5=8D=95=E8=A1=A8=20+?= =?UTF-8?q?=20LINE=20=E7=81=B0=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拍板:不展示成员数;群组=「加入」其余=「打开」;独立 GET /v1/contact; 全渠道(Telegram/LINE/邮箱/发卡)统一一张 contact_link 表,靠 url 协议区分 (mailto:/https:/tg://),邮箱=kind=link+mailto。L1 平台图标/名/强调色由前端 platform 注册表内置(唯一不入库的皮)。LINE 也做二级、同构,但先灰置「即将开放」 (registry comingSoon=[line],配好去灰即用)。 Co-Authored-By: Claude Opus 4.8 --- docs/contact-telegram-channels-design.html | 77 ++++++++++++++-------- docs/index.html | 2 +- 2 files changed, 50 insertions(+), 29 deletions(-) diff --git a/docs/contact-telegram-channels-design.html b/docs/contact-telegram-channels-design.html index 8e0d4f7..e4e4c92 100644 --- a/docs/contact-telegram-channels-design.html +++ b/docs/contact-telegram-channels-design.html @@ -90,6 +90,9 @@ .p-detail-hd .nm{font-size:18px;font-weight:700;color:var(--p-fg1)} .p-detail-hd .sb{color:var(--p-fg3);font-size:12.5px} .hide{display:none!important} + .p-card.disabled{opacity:.5;cursor:not-allowed} + .p-card.disabled:hover{border-color:var(--p-border);background:var(--p-surface)} + .p-soon{font-size:10px;font-weight:600;padding:1px 7px;border-radius:999px;background:var(--p-bg-subtle);color:var(--p-fg3);border:1px solid var(--p-border)} .flag{margin-left:auto;color:var(--p-fg3);font-size:12px} .toggles{display:flex;gap:8px;margin:10px 0 2px} .toggles button{background:var(--panel2);color:var(--fg2);border:1px solid var(--border);border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer} @@ -141,9 +144,9 @@ -
+
💬
-
LINE
官方账号 · 中文/日文群
+
LINE 即将开放
官方账号 · 中文/日文群
@@ -172,13 +175,11 @@
📣
穿山甲 · 官方频道
产品更新与公告 · @PangolinVPN
- 👥 12.3k
📶
穿山甲 · 节点状态
节点/故障实时播报 · @PangolinStatus
- 👥 3.1k
@@ -186,13 +187,11 @@
👥
穿山甲 · 用户交流群
使用问题互助交流 · @PangolinChat
- 👥 8.7k
🌏
Pangolin · English Group
English support & chat · @PangolinEN
- 👥 1.2k
@@ -229,9 +228,10 @@
- +
-

同一原型内切换三态 · 真机为路由 push(移动端整页)/ 内容区替换(桌面)

+

同一原型内切换三态 · 真机为路由 push(移动端整页)/ 内容区替换(桌面)。 +L1 上 LINE 为灰置「即将开放」不可点;「L2 · LINE」按钮仅用于预览其预留的二级结构(去灰后即此样式)。

交互规则

-

数据模型(DB 配置)

-

单表承载 L1 平台入口与 L2 子项:一行 = 一条可点链接。L1 由 platform 聚合而来,二级由 kind 分组。

+

数据模型(DB 配置)· 全渠道统一一张表

+

一张表覆盖所有联系方式 —— Telegram 频道/群组/Bot、LINE、邮箱、发卡商店都是 contact_link 里的一行, +差别只在 platform(分到哪个 L1 卡)+ kind(二级分到哪组 & 动作样式)+ url 协议。 +一行 = 一条可点链接;L1 按 platform 聚合,L2 按 kind 分组。

contact_link
 ─────────────────────────────────────────────────────────────
 id           INTEGER  PK
-platform     TEXT     -- telegram | line | email | store | ...(L1 分组键)
+platform     TEXT     -- telegram | line | email | store | whatsapp | ...(L1 分组键)
 kind         TEXT     -- channel | group | bot | link(L2 分组键 & 动作样式)
-title        TEXT     -- "穿山甲 · 官方频道"
-handle       TEXT     -- "@PangolinVPN"(展示;可空)
-url          TEXT     -- "https://t.me/PangolinVPN"(点击目标;App 侧优先转 tg://)
+title        TEXT     -- "穿山甲 · 官方频道" / "邮箱客服" / "自助发卡商店"
+handle       TEXT     -- "@PangolinVPN"(展示;可空,邮箱/商店留空)
+url          TEXT     -- 点击目标(见下表);App 侧对 telegram 优先转 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

+

邮箱之类怎么进这张表 —— 就是把 url 换个协议、kind=link

+ + + + + + + + + +
渠道platformkindurl 示例动作
Telegram 频道telegramchannelhttps://t.me/PangolinVPN(App 转 tg://打开
Telegram 群组telegramgrouphttps://t.me/PangolinChat加入
Telegram Bottelegrambothttps://t.me/PangolinVPN_bot打开
LINE 账号linelinkhttps://line.me/R/ti/p/@pangolinvpn打开
邮箱客服emaillinkmailto:support@pangolin.vpn打开(拉起邮件)
自助发卡商店storelinkhttps://shop.pangolin.vpn打开(浏览器)
WhatsApp(将来)whatsapplinkhttps://wa.me/…打开
+

动作按钮文案由 kind 决定:group「加入」(实心强调);其余(channel/bot/link)→ 「打开」(描边)。 +点击一律「用系统方式打开 url」,App 侧仅对 telegram 平台做 https://t.me/x → tg://resolve?domain=x 的唤起优化,失败回退原 url。

+

唯一不入库的是「皮」:L1 平台卡的图标 / 强调色 / 默认显示名由前端一个小 platform 注册表platform 键内置 +(telegram=✈+强调色、line=💬、email=✉、store=🛍…),避免把图标资源塞进数据库;未知 platform 用通用图标兜底。 +库里只配内容。加已有平台的新频道/群 = 纯 DB,无需发版;加一个全新平台类型(新图标)= 注册表加一行 + 发版。

接口

GET /v1/contact            # 无需登录亦可(客户端普通请求)
@@ -278,10 +294,9 @@ locale       TEXT     -- "zh"|"en"|NULL(全部)  可选按语言过滤
     { "platform":"telegram",
       "links":[
         {"kind":"channel","title":"穿山甲 · 官方频道","handle":"@PangolinVPN",
-         "url":"https://t.me/PangolinVPN","description":"产品更新与公告",
-         "member_hint":"12.3k","verified":true},
+         "url":"https://t.me/PangolinVPN","description":"产品更新与公告","verified":true},
         {"kind":"group","title":"穿山甲 · 用户交流群","handle":"@PangolinChat",
-         "url":"https://t.me/PangolinChat","description":"使用问题互助","member_hint":"8.7k"},
+         "url":"https://t.me/PangolinChat","description":"使用问题互助"},
         {"kind":"bot","title":"客服机器人","handle":"@PangolinVPN_bot",
          "url":"https://t.me/PangolinVPN_bot","description":"自动答疑/提交工单"}
       ]},
@@ -296,13 +311,19 @@ locale       TEXT     -- "zh"|"en"|NULL(全部)  可选按语言过滤
 
  • 迁移:server/migrations/{mysql,sqlite}/ 各加建表 + 种子数据(把现有 4 渠道灌入,Telegram 先补真实频道/群)。
  • -

    待你拍板

    +

    已定(本轮拍板)

      -
    • 成员数是否展示?(要真实数需定期抓取;建议先用 member_hint 手工填/留空)
    • -
    • 群组动作叫「加入」还是统一「打开」?(原型里频道=打开、群组=加入)
    • -
    • LINE 是否同样做二级(配了多账号才需要),还是暂时仍单链接?
    • -
    • 是否要认证勾与分组标题(频道/群组/Bot),还是拍平成一个列表?
    • -
    • 接口走独立 /v1/contact 还是并进现有配置引导(如 /me bootstrap)一起下发?
    • +
    • 不展示成员数 —— 已从模型与 UI 移除 member_hint
    • +
    • 群组动作叫 「加入」kind=group,实心强调);频道/Bot/普通链接 「打开」(描边)。
    • +
    • 接口走 独立 GET /v1/contact(不并进 /me 引导)。
    • +
    • 全渠道统一一张 contact_link:邮箱/发卡/LINE 与 Telegram 同表,靠 url 协议区分(mailto: / https: / tg://)。
    • +
    • LINE 也做二级(与 Telegram 同构),但先灰置——L1 上 LINE 卡置灰 + 「即将开放」,不可点进;二级页结构预留,等运营在库里配好 LINE 链接、去灰即用。
    • +
    + +

    仍可再定(不阻塞,先给默认)

    +
      +
    • 认证勾 与分组标题:默认保留(频道/群组/Bot 分组 + 官方项带勾)。若想更简可拍平成单列表 —— 说一声即可。
    • +
    • 成员数字段是否保留在库里(仅不展示):默认删列,需要时再加回不迟。
    diff --git a/docs/index.html b/docs/index.html index ffce753..0e1610b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -46,7 +46,7 @@

    设计方案 / Specs

    联系我们 · 渠道二级页(Telegram 频道/群组,DB 配置)HTML
    -
    点 Telegram/LINE 进二级页,按 kind 分组(频道/群组/Bot)列出多条链接,含 @handle/说明/成员数/认证/「打开·加入」动作,全部 DB 配置。含可点原型 + 单表 contact_link 数据模型 + GET /v1/contact 接口。规则:平台 >1 条链接才进二级,否则点击直达。
    +
    点 Telegram 进二级页,按 kind 分组(频道/群组/Bot)列多条链接,含 @handle/说明/认证/「打开·加入」动作,全渠道(含邮箱/发卡)统一一张 contact_link 表(靠 url 协议区分 mailto/https/tg)。独立 GET /v1/contact。规则:平台 >1 条链接才进二级,否则点击直达。LINE 同构但先灰置「即将开放」(registry comingSoon 开关,配好即去灰)。不展示成员数、群组=加入。含可点原型。
    docs/contact-telegram-channels-design.html