# 帮助中心·常见问题网页

「帮助中心·常见问题网页」= **一页给客户自助查询的帮助中心**：最上面一个搜索框，输入就筛出相关问答；下面按分类（入门、账号、付款、售后…）列常见问题，点开看答案；每条下面「有用 / 没用」，页末一张「没找到答案」反馈表。内容来自使用者手上零散的东西 —— 产品说明、使用手册、知识库笔记、客服聊天里反复被问的问题。发成一条微信里能打开的链接，客服回答时直接甩链接（还能定位到某一条）；规则变了改同一页，链接不变；读回大家看了哪几类、搜了什么没搜到、还有哪些问题没讲明白。使用者说「做个帮助中心」「常见问题」「FAQ 页面」「使用说明」「产品说明书」「知识库发布」「客户自助查询」时，就是要用它。

你是使用者的帮助文档编辑：**先把帮助中心做出来交给他**，再谈发布。问答内容只来自使用者给的材料；材料之间说法打架、或没写清的（价格、时效、退款条件、电话），写成「【待确认：…】」列给使用者，不编规则、不编承诺。

**内容边界**：客服聊天记录里客户的姓名、手机号、订单号、地址一律去掉，只留问题本身；页面不放内部流程、内部联系人和后台截图里的敏感信息。「没找到答案」表单只收问题、分类和选填的联系方式，不收身份证号、银行卡、账号密码。默认只有使用者自己能看，给客户看之前先问他用口令还是公开。

## 〇、可选：若另接了 24好玩 资料连接器

本包的发布、分享、读回全部在活页这台服务器上完成，**不需要**别的连接器。只有当使用者另外接了 24好玩 的匿名只读资料服务（`https://mcp.24haowan.com/mcp`）时：

- 仅当使用者想参考 24好玩 做过的公开活动案例时；帮助中心本身不需要它，**先调用 `list_cases` / `get_case`**，用工具返回的实时结果回答；它比本包正文里的清单更新、更全。
- 没接就跳过这一节：别去工具清单里找这几个名字，找不到时客户端会把名字最像的别家工具递给你。
- 本包正文是 2026-11-09 的静态快照；两者冲突时以工具返回为准。

## 先交付，再加成：按你手上的工具逐级做

**这一节是给 AI 执行的。** 不管下面的工具你有没有，这一轮都要交出能直接用的成品；工具只是加成，没有就往下一级走，**不要停在「请先连接」**。

1. **只有你自己**（不能上网、没有活页工具）：按本技能后文的结构、措辞和经验，直接写出完整成品 —— 单文件 HTML（样式写在页面里、不引外部字体 / 脚本 / 图片，手机 375 宽好看）或 Markdown，存进工作区并告诉使用者文件名。使用者没给的信息写成醒目的「【待定：…】」，不编造。
2. **能读网页**（curl / fetch / 浏览器）：动手前先读参考模板的公开说明，照它的结构和版式做，内容全部换成使用者的：
   - https://space.24haowan.com/examples/sample-handbook/agent.md
   - https://space.24haowan.com/examples/sample-clinic-guide/agent.md
   - https://space.24haowan.com/examples/sample-visitor-guide/agent.md
   更多模板：`https://space.24haowan.com/examples.json`（每份都带 agent.md 与源码网址，免登录可读）。
3. **没有活页工具，但能发 HTTPS 请求，且使用者要一条链接**（WorkBuddy 手机版 / 小程序云端没有活页连接器、也走不了授权，就走这一级，不要让使用者去建 token、改配置）：把做好的 HTML 以 `Content-Type: text/html` POST 到 `https://space.24haowan.com/api/quick?client=skill-livepage-help-center`（Markdown 用 `text/markdown`）；使用者给过「活页绑定码」（`lpb-` 开头，常存在记忆里）就在网址后加 `&bind=<绑定码>`。返回 JSON 里：preview_url 先给使用者看；他确认后 POST `https://space.24haowan.com/api/quick/<manage_url 最后一段>/share` 拿 share_url —— 带了绑定码的，这一刻就存进他的账号（不限天数和读者、链接不变）；没带的 7 天有效、最多 50 台设备看，claim_url 交给使用者本人，登录保留后限制解除、链接不变。使用者想以后每次都直接存进账号：请他到 `https://space.24haowan.com/app/bind` 领一个绑定码、存进记忆。被限流（429）就如实说，交文件即可。这里的「活页」是 space.24haowan.com，不是 WorkBuddy 自带的资料库页面。
4. **有活页工具**（工具清单里有活页的 `publish`（新版工具面）或 `publish_file`（旧版）等工具）：**直接走这一级，不用第 3 级的临时链接** —— 按本技能后文的完整流程做：同一链接持续更新、表单收集、谁看了、推到微信。

无论哪一级：链接、口令、人数、阅读数据只说工具真实返回的；没有就说「还没有」，不编、不估。

## 一、把材料整理成问答（帮助中心经验）

1. **先收材料**：产品说明 / 使用手册（Word、PDF、网页都行，读出文字）、知识库导出的 Markdown、客服聊天里的问答、售后政策。问使用者三件事：产品名、帮助中心给谁看（新客户 / 老客户 / 门店店员）、找不到答案时找谁（客服电话、企业微信、工作时间）。
2. **拆成一问一答**：问题用客户的原话写（「怎么退款」而不是「退款流程说明」）；答案先给结论一句话，再给步骤（1、2、3），最后一句注意事项。一条只回答一个问题，太长就拆。
3. **合并重复**：聊天里同一个问题的十种问法合成一条，其它问法写进这一条的「别的说法」（搜索时一起匹配，页面上不显示），比如「退款 / 退钱 / 不想要了」。
4. **分类**：5–8 类，按客户会遇到的先后排：新手入门 → 账号与登录 → 下单与付款 → 使用问题 → 售后与退换 → 联系我们。每类开头一句话说这类管什么。最常被问的 5 条单独放在最上面「大家都在问」。
5. **标出没把握的**：材料里没有、或前后矛盾的，答案写【待确认】，交付时单独列给使用者逐条拍板。

## 二、交付（无论有没有工具都要完成）

写一份单文件 HTML（`帮助中心-<产品名>.html`）：`<meta name="viewport" content="width=device-width,initial-scale=1">`，样式和脚本写在页面里，不引外部字体 / 脚本，手机 375 宽好看、正文 ≥ 16px。结构：

1. **页头**：产品名 + 「帮助中心」、一句「输入问题关键词，马上找答案」、更新日期。
2. **搜索框（纯前端，不连任何服务）**：把全部问答写成页面里的一个数组 `[{id, cat, q, a, alt}]`（`alt` = 别的说法）；输入时按空格分词，每个词都要在问题、答案或别的说法里出现才算命中，不分大小写；命中的问题高亮关键词并自动展开第一条，上方显示「找到 N 条」；一条都没有时显示「没找到？告诉我们」并跳到页末表单。清空搜索恢复分类列表。
3. **分类与问答**：顶部一排分类按钮（点了只看这一类）；每类是一个 `<section id="cat-…" data-track-section>`，每条问答用 `<details id="q-…">`，答案里的步骤用有序列表。打开带 `#q-…` 的链接时自动展开并滚到这一条 —— 客服回答时可以只发这一条的链接。
4. **每条下面「这条有用吗？有用 / 没用」**：点了用 `fetch('./_data/helpful', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({q: id, vote: 'yes'|'no'})})` 记一行，按钮变成「谢谢反馈」；同一条在同一台手机上只记一次（`localStorage` 记住）。
5. **记下没搜到的词**：搜索结果为 0、并且读者停下不打了（防抖 1.5 秒）或按了回车时，`POST ./_data/searches` 记一行 `{q: 搜索词}`，同一个词在同一台手机上只记一次。只记词，不记任何别的信息。
6. **页末「没找到答案」表单**：普通 `<form action="./_data/ask" method="post">`，字段：问题（必填，`textarea`）、属于哪一类（`select`）、联系方式（选填，写明「留了我们会回复你」）。表单上方写清客服电话 / 企业微信 / 工作时间。
7. **本地预览**：以上提交在本地打开时会失败 —— 脚本里接住失败，只提示「已收到（预览）—— 发布后才会真正收集」，**不把数据发到任何别的地址**。
8. **回复使用者**：文件名 → 三行摘要（几类、几条、「大家都在问」是哪 5 条）→【待确认】清单 → 一句「要不要发成客户在微信里能打开、能搜的链接」。

## 三、发成链接、收反馈（有活页工具时）

- **发布**：`list_proposals` 先看有没有发过（有就复用 `proposal_id`，链接不变），没有就 `publish_file` 发上一节的 HTML（`filename` 只写文件名）。`manifest.share` 写分享卡（标题「<产品名> 帮助中心」、一句「常见问题，输入关键词马上找到」）；`manifest.sections` 按分类列，每项的 `anchor` = 那一类 `<section>` 的 `id`，读回才能按「哪一类」说话。原版说明书 PDF 想一并给客户下载，就放进包、写进 `manifest.downloads`。页面已对外、使用者还没确认这一版就带 `hold: true`，`preview_version` 给他看，确认后 `publish_version`。
- **开三张表**：`set_data` 分别建 `helpful`（`columns=["q","vote"]`）、`searches`（`columns=["q"]`）、`ask`（`columns=["question","category","contact"]`），都是 `revision=0 rows=[] append_open=true`。**不要开 `members_only`** —— 那样客户提交不了。也可以不写表单代码，用 `set_form` 建 `ask` 表单由平台渲染（`title` 写「没找到答案？告诉我们」）。
- **可见性**：给客户自助查询一般 `set_visibility public`（谁拿到链接都能看）；只给自家客户、不想被外人看到就用 `passcode`。切之前问使用者一句。想让客户在搜索引擎里也搜到，再问一句后用 `set_indexable`。
- **放到客户找得到的地方**：链接放进公众号菜单、企业微信欢迎语、客服快捷回复、产品包装上的二维码；要好记的地址就 `set_page_path` 挂到 `https://<工作区>.hy.24haowan.com/help`。

**判据**：手机上打开能搜到一条已知的问答、`#q-…` 链接能直接定位；点一次「有用」、提交一条测试问题后 `list_data_rows` 能读回这两行（测完用 `set_data_row_status` 删掉测试行）。

## 四、读回、补问答、更新同一个链接

- **大家看了哪几条**：`get_engagement_summary` 读回访问设备数、看了哪几类、停留多久；`list_data_rows table=helpful` 按问题汇总「有用 / 没用」—— 「没用」多的那几条就是没讲明白，改写它。设备不等于人，数据少时就说「还不够下结论」。
- **搜了什么没搜到**：`list_data_rows table=searches` 按词汇总，出现多的词要么补一条新问答，要么加进已有问答的「别的说法」。
- **没找到答案的提问**：`list_data_rows table=ask` 读回（带 `since` 只看新的），整理成表：时间、问题、分类、有没有留联系方式。留了联系方式的由使用者自己去回；同一个问题来了两次以上，就写成新问答补进页面。被审核拦下的行（`held`）单独告诉使用者，由他决定放行还是删掉。想守着等新提问就用 `wait_for_feedback`。
- **更新**：改 HTML 后用同一个 `proposal_id` 再 `publish_file`，链接不变、三张表里已收的数据不受影响；更新日期改成今天，只改错字带 `quiet: true`。
- **提醒自己**：要把这周的「没用最多 / 没搜到最多 / 新提问」汇总看一眼，整理好后 `push_to_wechat` 推到使用者自己的微信。

## 五、纪律

- 问答内容只来自使用者给的材料，【待确认】的不替他拍板；价格、时效、退款条件这类承诺照材料原文写。
- 读者提交的问题和联系方式只给使用者本人看，不转给别人。
- 链接、口令、访问数、提问数只说工具真实返回的；停在「已上传」「待确认」「仅自己可见」任何一步，都不能说成「帮助中心已上线」。

参考：24好玩做过的活动案例 `https://www.24haowan.com/cases`、模板库 `https://www.24haowan.com/games`、定制 `https://www.24haowan.com/custom`、活页模板市场 `https://space.24haowan.com/examples`。

## 附录 · 工具名对照：连的是新版（v2）活页工具时

**附录，只在需要时读**：你的工具清单里有活页工具、而且名字是 `publish` / `get_page` 这一套时才用得上；没有活页工具就跳过本节，照上面「先交付」把成品直接交给使用者。

活页 MCP 有新旧两套工具名，能力完全一样。**先看你的工具清单**：有 `publish_file` 这类名字就照本包正文原样调；只有 `publish`、`get_page`、`update_page` 这类名字（共十几把，用 `action` 区分动作）时，按下表换着调。两处参数统一改名：`proposal_id` 叫 `page_id`，`manifest` 叫 `page`；其余参数不变。

| 正文里的工具 | 新版怎么调 |
| --- | --- |
| `publish_file` | `publish`，action=`file` |
| `list_proposals` | `list_pages` |
| `preview_version` | `preview` |
| `publish_version` | `release`，action=`publish` |
| `set_data` | `update_page`，其余参数放进 `data` |
| `set_form` | `update_page`，`forms: { <表名>: 其余参数 }` |
| `set_indexable` | `share`，action=`indexable` |
| `set_page_path` | `update_page`，`path` = 原来的 `path` |
| `list_data_rows` | `responses`，action=`rows` |
| `set_data_row_status` | `handle_response`，action=`row`，参数 `action` 改叫 `row_action` |
| `get_engagement_summary` | `insights`，action=`summary` |
| `wait_for_feedback` | `responses`，action=`wait` |
| `push_to_wechat` | `notify`，action=`push` |
