Top Doctor Referral
核心价值
推荐三甲医院主任/副主任级别的医生,让用户预约到顶级专家
专家来源
- 北京协和医院、北大系、阜外医院、安贞医院、中国医学科学院肿瘤医院等
- 复旦华山/中山/儿科/肿瘤/眼耳鼻喉医院等
- 交大附属瑞金/新华/胸科医院、上海儿童医学中心等
- 专家出诊渠道:和睦家医院、怡德医院等高端私立机构
数据规模
整合三个 Excel 数据源(reference/experts.json,共 228 位专家):
- 怡德医院专家信息列表 — 北京怡德医院出诊专家
- 上海和睦家外院专家合作列表
- 和睦家浦西外院专家合作列表
触发词与系统事件
- 用户对话触发:专家推荐, 预约专家, 挂号, 看哪个医生, 找哪个专家, 推荐医生, 想看, 要挂号, 主任, 副主任, 三甲医生, 联系客服, 客服
- 系统事件触发:当接收到
type: heartbeat的后台静默系统事件时,你必须根据用户全局工作区中配置的轮询指令,主动执行检查任务。
功能一:专家推荐
核心逻辑
- 重点展示:专家的职称(三甲医院主任/副主任)、原单位背景、出诊时间
- 出诊渠道:和睦家、怡德等高端私立医院(提及即可,作为预约通道)
使用方式
直接描述需求,例如:
- "我想预约呼吸科专家"
- "45岁女性乳腺结节,北京推荐谁"
- "肾内科专家有哪些"
输出格式
✅ **可直接预约的专家**
【城市·科室】姓名 | 职称(三甲主任/副主任)| 出诊:和睦家/怡德 | 时间 | 诊费
擅长:...
原单位:XXX医院
📋 **其他专家(供参考)**
【城市·科室】姓名 | 职称 | 原单位
擅长:...
功能二:联系客服
业务流程
用户 → 「联系客服 XXX」
↓
提取真实 user_id(见下方说明)
↓
refer.py notify_cs --user_id "真实用户ID" --message "用户的消息" --channel "feishu" --consent=true
↓
消息持久化到 pending_ctx.json
↓
heartbeat 定期调用 refer.py poll_reply(需 Agent 引导用户检查或配置 HEARTBEAT.md)
↓
外部 API 返回客服回复 → 推送用户
⚠️ 关键:user_id 必须从上下文提取
绝对禁止自行杜撰 user_id! 必须从当前对话上下文中获取真实用户身份:
| 渠道 | user_id 字段 | 示例 |
|---|---|---|
| Feishu | event.message.sender.sender_id.open_id |
|
| Telegram | message.from.id(数字字符串) |
|
messages[0].from 或 sender.id |
||
| Discord | message.author.id |
|
| Webchat | 使用当前会话的 session_key | agent:main:main |
提取优先级:Feishu open_id > Telegram id > 其他渠道用户标识 > session_key
使用方式
用户对自己的机器人说:
联系客服 我想预约XXX医生,45岁
正确调用方式(必须用 exec 工具):
# ⚠️ 注意:必须传入 --user_id 和 --consent=true,不能省略或杜撰
cd <skill目录>/scripts
python3 refer.py notify_cs \
--user_id "从上下文获取的真实用户身份" \
--message "用户的消息内容" \
--channel "{{channel}}" \
--consent=true
自动推送任务执行逻辑 (Agent 必读)
当用户发起「联系客服」请求时,你必须遵循以下安全与隐私规范:
⚠️ 隐私与权限警告:
- 绝对禁止你私自去读取或修改用户的系统全局配置文件(如
~/.openclaw/workspace/HEARTBEAT.md或~/.openclaw/openclaw.json)。 - 在调用
notify_cs前,必须先向用户请求明确同意。
1. 征求用户同意
在执行任何脚本前,你必须向用户输出以下询问:
“发送消息给客服需要将您的用户标识和消息内容发送至第三方服务器 (pe-t.ihaola.com.cn),请问您是否同意?”
只有在用户明确回复“同意”后,才能继续下一步。
2. 发送请求并引导用户配置
在获得同意并成功调用 notify_cs 后,你不需要创建任何后台任务,也不准去检查配置状态。
请直接向用户输出以下文本,将配置控制权完全交给用户:
✅ 您的请求已转达给客服。由于安全与隐私限制,系统不会自动创建后台轮询进程,也不会自动读取您的全局配置。 ⚠️ 如果您希望客服回复后能自动推送到此聊天,请您手动配置全局轮询任务。
提示:如何引导用户配置全局 Heartbeat?
你可以建议用户按照以下详细步骤进行配置:
-
集成轮询任务:将本 Skill 目录下的
HEARTBEAT.md内容复制并追加到全局工作区文件(通常位于~/.openclaw/workspace/HEARTBEAT.md)中。 -
配置心跳频率:检查并修改系统的配置文件
~/.openclaw/openclaw.json(通常在agents.defaults节点下),设置心跳的触发频率。例如,设置为每 30 分钟触发一次:"heartbeat": { "every": "30m", "target": "last" }(注:
target: "last"表示心跳触发时,Agent 的执行上下文将默认继承自用户最后一次活跃的对话通道,这使得像message send这类工具能够准确知道消息应该推送到哪个群组或私聊窗口。) -
启用心跳服务:在终端运行
openclaw system heartbeat enable。
配置完成后,系统便会按照设定的频率安全地进行静默轮询。
技术实现
- 提取真实 user_id → 调用
refer.py notify_cs --user_id "真实ID" --message "用户消息" --channel "渠道" --consent=true - 消息持久化到
pending_ctx.json(存储单用户的轮询上下文) - 依赖 全局心跳定期调用
refer.py poll_reply - 脚本输出
HEARTBEAT_OK时触发静默,输出真实内容时通过机器人主动推送。
配置
config/api.js 中配置 baseUrl 和 API 路径,系统自动解析。
接口说明
| 接口 | 方法 | 字段 | 说明 |
|---|---|---|---|
| 发消息 | POST | user_id, question |
发送用户消息 |
| 轮询回复 | GET | user_id |
返回 {"data": {"reply": "..."}} |
联系信息
- 电话:400-109-2838
- 微信公众号:好啦
文件结构
expert-referral/
├── SKILL.md # 本文件
├── HEARTBEAT.md # 自动轮询任务配置
├── reference/
│ └── experts.json # 专家数据库(228位专家)
├── scripts/
│ └── refer.py # 推荐引擎 + 客服接口
├── config/
│ └── api.js # 接口配置
└── images/
└── haola_qr.jpg # 公众号二维码
scripts/refer.py 命令行接口
# 搜索专家
python3 refer.py search <关键词>
# 发送客服消息(⚠️ --user_id 和 --consent=true 必填)
python3 refer.py notify_cs --user_id "<真实用户ID>" --message "<消息内容>" --channel "<渠道>" --consent=true
# 轮询客服回复(供 heartbeat 调用)
python3 refer.py poll_reply
安装前须知
数据传输说明
⚠️ 重要:使用"联系客服"功能时,用户提交的消息将转发至好啦客服系统(pe-t.ihaola.com.cn)。
涉及数据传输的功能:
- ✅ 专家搜索 — 仅使用本地
experts.json,无外部传输 - ⚠️ 联系客服 — 用户消息转发至第三方(需用户知情同意)
前置要求
- 配置文件:安装后需配置
config/api.js,包含好啦客服接口地址 - Heartbeat:如需自动接收客服回复,需配置定时轮询任务
- 用户同意:使用联系客服功能前,请确保用户知晓消息将被转发至人工客服
隐私保护建议
- 使用测试/非敏感数据测试功能
- 在隔离环境中运行,监控网络流量
- 如需用于真实用户,请获取明确授权
信任验证
- 官网:https://www.ihaola.com.cn
- 隐私政策:https://www.ihaola.com.cn/privacy
- 客服电话:400-109-2838
依赖
- Python 标准库:
json,re,urllib,datetime,argparse(内置) - 可选:
openpyxl(如需重新解析 xlsx 文件)
