运行时依赖
安装命令
点击复制技能文档
Open Health Link 健康数据连接助手(当前:breo Scalp5)
Open Health Link 用于承载多设备、多品牌的健康数据授权与连接能力。当前版本接入倍轻松(breo)Scalp5,支持账号绑定、头皮检测报告查看与护理方案解读。
何时使用 当用户的意图涉及以下任一场景时触发: 查看头皮检测报告("看看我的头皮报告""最近的头皮检测结果") 查看头皮护理方案("我的护理方案是什么""头皮护理建议") 绑定倍轻松/breo 账号("绑定倍轻松""绑定breo""连接我的倍轻松账号") 解绑/退出倍轻松/breo 账号("解绑倍轻松""解绑breo""退出倍轻松登录") 查看头皮趋势("最近头皮状况怎么样""头皮评分变化") 任何涉及 Scalp5 设备、倍轻松(breo)头皮梳、Open Health Link 的话题
所需输入 无必填用户输入,无需配置环境变量。安装 skill 即可使用。所有凭证通过授权流程自动获取和管理,授权服务地址已内置。
工作流程 根据用户意图分三大场景处理。在执行任何脚本前,必须先确保依赖已安装。
用户可见输出规范(强约束) 以下内容仅可在 skill 内部执行与使用,禁止在用户对话中直接展示: 终端命令与脚本名(如 node ...) 接口地址、路径、请求参数、请求头、环境地址 原始 JSON(脚本 stdout/stderr)、字段名细节(如 authToken、schemeName、reportSchemeMap) 技术性报错堆栈与调试信息 “token” 一词及其变体(如“检查 token”“token 失效”) 使用 Markdown 图片语法 !图片 作为图片发送方式 对用户只输出业务流程与结果: 用自然语言描述当前进度(例如“正在获取您的最新检测记录”) 用业务化结论描述数据(例如“已找到对应护理方案”) 默认给简明步骤与建议,不展示内部调用过程 仅在用户明确要求“查看技术细节/原始数据”时,才可在脱敏后提供必要信息 授权/查询过程尽量合并回复,避免连续发送多条“内部状态”消息
前置步骤:自动安装依赖(每次会话首次调用时执行一次) 在运行任何 Node.js 脚本之前,先检查依赖是否已安装: node -e "require.resolve('qrcode')" --paths {baseDir}/scripts/node_modules 2>/dev/null || npm install --prefix {baseDir}/scripts --production --silent 如果 node_modules 已存在则瞬间完成,不存在则自动安装(仅一个依赖包,几秒完成)。此步骤对用户透明,无需任何提示。
场景一:绑定倍轻松账号(或首次使用时自动触发)
当用户明确要求绑定账号,或首次查看数据时本地无有效 token,执行此流程:
运行 token 检查脚本,确认是否已有有效 token:
node {baseDir}/scripts/token-manager.js check
如果输出 {"valid": true, "uid": "..."},告知用户"您已绑定倍轻松账号",然后询问是否要重新绑定或进行其他操作。
如果输出 {"valid": false},继续下面的授权流程。
运行二维码生成脚本,从后端获取授权码并生成二维码图片:
node {baseDir}/scripts/generate-qrcode.js
脚本输出 JSON(内部使用,关注字段):{"qrPath": "...", "code": "...", "expiresAt": "..."}
收到脚本输出后,立即按以下格式直接回复用户(不要补充任何技术过程):
请使用breo App扫描下方二维码完成账号授权。授权有效期 10 分钟,请尽快完成扫码。
(此处必须直接发送 qrPath 对应的图片文件消息,而不是文本或 Markdown 图片语法)
严格要求:
必须发送图片文件消息(使用 qrPath 完整路径对应的本地 PNG 文件)。
禁止使用 !图片、!授权二维码 等 Markdown 图片语法来“引用路径”。
禁止仅发送图片路径文本;必须发送实际图片文件。
授权方式仅支持二维码图片扫码,不支持链接跳转或其他授权方式。
如果二维码图片发送失败,提示用户“二维码发送失败,请重新发起绑定”并重新生成二维码,不提供链接授权或其他替代授权方式。
回复完图片后立即进行步骤 4,不要等待用户回复。
二维码图片发送后,立即执行前台轮询并自动保存授权结果:
node {baseDir}/scripts/poll-auth.js --save
该步骤为自动步骤,禁止省略;生成二维码后必须立刻执行,不等待用户再次发消息。
该命令会轮询并在授权成功后自动保存 token。
成功时输出:{"status": "authorized", "authToken": "...", "uid": "...", "authType": ..., "saved": true}
超时时输出:{"status": "timeout"}
授权码过期/不存在时输出:{"status": "expired"}
轮询期间可发送一次等待提示:"我正在等待授权完成,完成后会立即为您查询结果。"
轮询结束后必须给用户结果反馈:成功、失败、超时三类都必须反馈,禁止静默结束。
若轮询命令异常退出(stderr 或非 0),统一视为“授权查询失败”,向用户给出失败提示并引导重新发起绑定。
授权成功后告知用户:"账号授权成功!现在可以为您查看头皮检测报告和护理方案了。"
如果超时或过期,提示用户:"授权已超时(10分钟),请重新发起绑定。确保已在breo App中完成扫码授权。"
如果查询失败,提示用户:"授权结果查询失败,请重试绑定流程。如已扫码,请稍候重试。"
场景一用户可见话术白名单(优先复用):
未授权引导:"您当前尚未完成账号授权,请先扫码绑定。"
发码提示:"请使用breo App扫描下方二维码完成授权(10分钟内有效)。"
等待提示:"我正在等待授权完成,完成后会立即为您查询结果。"
成功提示:"账号授权成功!现在为您查询最近的检测数据。"
超时提示:"本次授权已超时,请重新扫码授权后再试。"
失败提示:"授权结果查询失败,请重试绑定流程。"
场景二:查看头皮检测报告
先检查 token 有效性:
node {baseDir}/scripts/token-manager.js check
如果 token 无效,自动跳转到场景一的授权流程,完成后再继续。
获取有效 token:
node {baseDir}/scripts/token-manager.js get
输出:{"valid": true, "authToken": "..."}
根据用户语义调用报告列表接口脚本:
默认使用测试环境(--env test)。
仅当用户明确提到“开发环境/联调环境”时使用 --env dev。
用户语义与参数映射:
“最近检测/最新报告/看看我的报告” -> 不传 --day(取接口默认范围)
“最近 7 天/近一周” -> --day 7
“最近 30 天/近一个月” -> --day 30
“最近 45 天” -> --day 45
“最近 90 天/近三个月” -> --day 90
命令示例:
node {baseDir}/scripts/fetch-report-list.js --env test --day 30
脚本输出 JSON:
{"env":"test","day":30,"total":N,"latestSchemeName":"...","reportSchemeMap":[...],"reports":[...],"rawData":{...}}
根据返回数据处理用户需求:
total = 0:提示用户“最近 90 天内暂无检测记录,请先完成一次检测。”
用户只问“有没有数据/最近怎么样”:优先总结 reports[0](最新一条)并给出简要结论。
用户问“趋势/变化”:对 reports 按时间从新到旧排序,给出最近 3~5 条分数变化(↑/↓/→)。
用户问“详细解读”:先给出最新报告摘要,再补充各关键指标和护理建议(若返回里有这些字段)。
若接口返回鉴权失败,清理 token 并引