互联网医院平台这个赛道,这两年是真热闹。医院要开,厂商要卖,资本要投,但真正落到“哪家平台好用”这个问题上,市面上能查到的声音大多是厂商自己发的宣传稿,或者个别医院的零星吐槽。我一直想找一份能拿得出手的横向对比,找了一圈发现要么是纯功能列表堆砌,要么干脆就是招标参数复刻,真正从用户视角、带着实测数据去做的,几乎没有。
所以这个项目——“十个互联网医院平台横向对比”,我的定位就很明确:不测PPT功能,只测真实线上体验。从患者的操作路径出发,把注册、挂号、问诊、开方、支付、报告查询这些核心链路全部走一遍,用统一指标、固定频次、同口径采样,最后沉淀成一套可复现的对比方法。
这篇文章就把整个对比评测的底牌摊开讲:指标怎么定、采样频次怎么排、代码骨架怎么搭,以及我在实际操作里踩过的坑。如果你也想做类似的平台评测,不管是互联网医院还是其他SaaS产品,这套思路可以直接抄。
1. 整体设计思路:先定口径,再谈对比
1.1 为什么横向对比互联网医院平台这么难
互联网医院平台和普通App评测有个本质区别:它不是一个纯线上的标准化产品,而是“医院+系统厂商+运营方”三方合力的结果。同一个厂商(比如卫宁、东华、创业慧康)在不同医院部署出来的平台,体验可能天差地别。真正决定体验的往往不是厂商代码本身,而是医院的科室配置、医生排班规则、药房对接方式,甚至挂号费支付渠道的费率。
这就带来一个核心矛盾:如果我只选十个来自不同厂商、不同医院的平台做对比,变量太多,很难说清楚差异到底是厂商能力还是医院管理造成的。但如果只选同一厂商在不同医院的部署版本,又失去了横向对比的意义。
我的解法是:不追求“纯厂商对比”,而是做“典型就医场景下的平台体验对比”。每个平台都是真实可访问的线上入口,我以普通患者身份走完整个就医闭环,用同一套指标去量测。这样得出的结论虽然不能给厂商的代码水平盖棺定论,但对于医院选型、对于患者选择线上服务渠道,参考价值反而更大。
1.2 指标体系设计的底层逻辑:从就医路径反推
定指标之前,我先干了一件事:把十家平台的真实业务流程全部跑了一遍,然后画出一条“线上就医通用路径”。这条路径就是后来整个指标体系的骨架:
注册登录 → 实名认证 → 选择院区/科室 → 选择医生/号源 → 填写病情描述 → 支付挂号费 → 等待接诊 → 图文/视频问诊 → 医生开立处方/检查单 → 在线支付药费 → 药品配送/到院自取 → 查看电子报告 → 申请发票/退费
对照这条路径,每个环节都可能成为体验的瓶颈,也都能抽象出量化指标。比如:
- 注册环节看的是“从下载/打开小程序到完成实名认证的步数和耗时”
- 挂号环节看的是“号源展示是否需要登录、是否支持按医生职称筛选、待支付状态能否保留号源”
- 问诊环节看的是“医生首条回复响应时间、全程平均回复间隔、问诊总时长”
- 处方环节看的是“处方自动生成还是需要手动提交、是否支持在线支付、配送费是否透明”
这些指标不是拍脑袋定的,每一个都对应着一个可能的患者流失点。比如线上支付不支持医保、只能用自费,很多人走到支付这一步就放弃了;再比如问诊结束后的电子病历如果下载格式是图片而非PDF,患者就不方便转诊或报销。这些问题,光看厂商功能清单是永远发现不了的。
1.3 比“能不能用”更重要的,是“好不好用”
横向对比最容易犯的错,就是把指标做成布尔值——有就是1,没有就是0。但真实用户体验是分层的。同样是“在线问诊”,有的平台是纯图文,医生四五个小时回一句;有的是视频问诊,到点医生准时接入;还有的是AI预问诊筛完一遍再转人工。这三种模式背后的指标差异极大。
所以我在指标体系里专门设了两个维度:功能覆盖度和体验质量。功能覆盖度解决“有没有”的问题,体验质量解决“好不好用”的问题。同一个指标,如果只看布尔值,十个平台可能都是1分;但如果加上响应时间、操作步数、信息明确度这些质量维度,差距立刻拉开。
举一个真实例子:十个平台都支持“报告查询”,但有的平台需要患者手动输入就诊卡号和密码才能查,有的绑定了身份证后一键直达;有的报告打开是PDF可下载,有的只能看一个模糊的缩略图不能放大。这些差异用“是否支持报告查询”这一个布尔指标完全无法体现,所以我给这个指标组设计了七个细分项,每一项都有独立的评分权重。
一个实用的总结:指标设计不是越多越好,而是要保证“每一个指标都能讲出一个用户故事”。如果某个指标你没法用一句话解释“它差代表什么用户痛点”,这个指标就该删掉。
2. 核心指标体系拆解:十大维度与量化标准
2.1 从注册到支付:九个关键环节的指标落位
整个体系最终落在九个核心环节,每个环节下挂若干指标,总共整理出四十多项。现在把这套体系的核心部分列出来,方便直接拿来改改用。
| 环节 | 核心指标 | 采样方式 | 备注 |
|---|---|---|---|
| 注册登录 | 从入口到完成实名认证的步数 | 人工模拟 | 步骤越少越好 |
| 注册登录 | 全程耗时(分钟) | 自动计时 | 不含短信等待时间 |
| 科室选择 | 是否支持按症状搜索科室 | 点击验证 | 部分平台只支持关键词搜医生 |
| 号源展示 | 号源列表是否需登录可见 | 游客态检测 | 很多平台强制登录才能看号,体验很差 |
| 在线支付 | 是否支持医保结算 | 支付页检测 | 纯自费支持的平台要扣分 |
| 在线支付 | 支付方式种类数 | 支付页枚举 | 微信、支付宝、银联、医保各计1项 |
| 图文问诊 | 医生首条回复时间(分钟) | 实测记录 | 晚间时段和日间分开统计 |
| 图文问诊 | 是否支持图片上传数量上限 | 发送测试 | 一些平台限制最多发3张图 |
| 处方流转 | 电子处方是否自动带出 | 问诊后检测 | 部分平台需患者手动申请处方 |
| 药品配送 | 配送费是否明示 | 结算页检测 | 有的平台结算时不显示,快递到了才说到付 |
| 报告查询 | 报告是否需要额外绑定就诊卡 | 报告页检测 | 已实名认证后仍要绑卡的要扣分 |
这个表只是主干,实际每项指标下面还有子规则。以“在线支付”为例,不只是看支持哪些支付方式,还要记录是“统一下单还是跳转第三方小程序”,跳转次数越多流失概率越高;是“打通了医保电子凭证还是仅支持自费”,支持医保的会有明显加分。
2.2 体验质量维度:引入时间、步数与信息明确度
除了功能有无,我在每个环节还强制采集三类质量指标:
第一类:操作步数。从当前页面到目标动作完成,记录最少点击次数。比如从打开小程序首页到成功提交问诊订单,有的平台只要5步,有的要11步。这个数字直接反映产品的信息架构合理度——步数越多,中间跳转页越多,用户迷路的概率越高。
第二类:时间消耗。记录每个关键节点的完成耗时。需要注意的是这里不是一个绝对性能指标,而是一个综合体验指标。如果你打开一个页面花了10秒,不是网络慢,就是页面里塞了太多图片和SDK初始化逻辑。尤其是小程序,首屏加载超过3秒用户就开始烦躁。
第三类:信息明确度。这是比较容易被忽视的指标。我看的是页面上的关键信息是否直白,比如医生职称有没有写清楚、挂号费在提交前有没有明确显示、药品配送范围要不要自己查。信息明确度无法完全自动化,只能靠人工走查时逐项打分,但它是区分“能用”和“好用”的分水岭。
三类质量指标在综合评分模型里各占一定权重。我的打分公式很简单,不同维度加权平均。功能覆盖度权重40%,质量体验权重45%,稳定性权重15%。这里的稳定性指的是整个测评周期内,平台是否出现打不开、白屏、断连等异常情况,出现一次就记一次扣分。
2.3 权重怎么分:从用户价值反推指标优先级
权重分配是我踩坑最多的地方。一开始我按“功能数量越多越重要”来分配,结果排名第一的是功能列表最长的一家,但实际体验很一般,患者压根用不顺。后来我把权重逻辑推翻,改成“按环节流失风险分配权重”。
具体做法是:把十个平台的用户路径拉出来,统计各环节的转化率。哪个环节用户流失最多,哪个环节的指标权重就最高。比如我的实测里,十个平台中有三个在“支付挂号费”环节流失率超过一半——用户走到支付页,发现价格和线上显示不一致,或者需要额外绑定银行卡,直接退出。既然这个环节流失大,它的指标权重就得拉上去。
最终我确定的权重分配原则是:线上问诊和在线支付两个环节权重最高(各占20%),注册登录和报告查询各占15%,其余环节共享剩余权重。这样分配会让排名靠后的平台有话要说,因为可能其在“问诊体验”上做得很好,只是其他环节拉胯。但从患者的真实体验出发,这种偏斜是有道理的——线上问诊和支付是整个线上就医闭环里最核心的两步。
3. 采样频次设计:一次对比,测不出真相
3.1 为什么采样频次决定了数据的可信度
互联网医院平台的体验,天然就有强烈的时间波动性。白天医生在门诊间隙才能回消息,夜间回复速度会断崖式下降;工作日号源充足,周末很多科室挂满;月初医保额度充裕支付顺畅,月底某些医院的线上支付通道会变慢甚至临时关闭。如果你只在一个时间段采样一次,得出结果会有明显的偶然性。
我在第一轮测试时就吃过亏。有一家平台,我周五下午测的时候医生两分钟就回复了,给了很高的体验分。但后来同一周周日晚上复测,医生整整四个小时没有动静,问诊直接超时关闭,挂号的20块钱也退了回来。如果只看第一轮数据,这家平台会被严重高估。
所以我后来把采样频次提到了一个相对严苛的档位:每个平台在测评周期内完成三维采样——工作日白天一次、工作日晚间一次、周末一次。三个时间段各跑完整流程,每个时间段的得分最后取加权平均。这样至少能覆盖不同时段的真实差异。
3.2 时间段怎么选,覆盖哪些真实场景
我在设计采样频次时,并没有均匀铺满一天,而是选取了患者实际使用互联网医院的三个典型场景:
- 工作日白天(09:00-11:30):覆盖上班族午休前挂号、慢性病复诊拿药的高峰期。这个时段医生回复通常最快,号源也充足。
- 工作日晚间(19:00-21:30):覆盖下班后问诊、学生党晚间咨询。医生回复会明显变慢,是压力测试的重点时段。
- 周末上午(10:00-12:00):覆盖周末就医需求,这个时段最容易暴露号源不足、医生排班空缺的问题。
一开始我还考虑加测夜间凌晨时段,后来放弃了。因为凌晨几乎没有医生在线,平台数据普遍表现都差,对比意义不大。倒是建议有条件的话,在两个不同周的同一天进行复测,比如第一周周三和第二周周三,这样可以观察到同一平台是否存在“月度性波动”。
三个时段内的操作流程完全一致,连问诊话术都做成标准模板,确保每次提交给医生的病情描述是同一段文字、同一个问题的语气,尽量减少人为变量。
3.3 样本量多少才够:从20次测试到60条有效记录
每个平台跑三个时段,跑完一个完整流程,看起来只要三次就够了。但实际操作后发现,这三次远远不够,因为中途会因为接口异常、医生不在线、支付失败等原因中断流程,根本无法走到终点。
为了拿到一条完整的、包含注册到报告查询全流程的数据,每个时段我至少执行了两次完整尝试。如果前两次都没跑通,就会在次日同个补测窗口再跑一次。这样算下来,每个平台大约产生6—9次完整操作记录,其中有效数据筛选后保留到数据库里的是5—6条。十个平台合计,有效记录在55—60条左右。
这里有一个值得说的小细节:问诊环节的回复等待时间是整个采样过程中最不可控的变量。医生什么时候回复,完全由医院端决定,患者无法干预。我试过最夸张的一次,某一个平台的医生晚上10点接诊后整整40分钟没有回复,我在凌晨零点艰难收到“您好,请问还在吗?”的消息,这种数据如果纳入统计就得做异常值标记。我最终的处理方式是,把超过两小时才回复的数据记为“长尾异常值”,不算入均值统计,但计入“最差体验”备注。
3.4 用代码管理采样任务:定时提醒和状态流转
人工跑完六十多次完整流程,如果全靠脑子记住哪个平台跑没跑完,早乱了。我在项目里用了一个很轻量的Python脚本,配合飞书表格做任务管理。
代码骨架的核心是一个简单的状态机:每个平台在每个时段有三个状态——待执行、执行中、已完成。脚本每天早上9点生成当天需要执行的任务清单,推送一条飞书消息到我手机,包含平台名称、测试类型和上次完成时间。每完成一条,我就在表格里打个勾,脚本会自动刷新完成率。
这个脚本本身不复杂,难点在于保持任务执行的纪律性。因为人工交互这件事,一旦当天有会议或者临时有事,很容易跳过。我给自己定的规则是:如果当天因为客观原因没跑完,必须在48小时内补上,否则该条数据作废,不能拿其他时段的数据凑数。
4. 代码骨架解析:自动化采集与数据整理
4.1 整体的代码结构:从爬虫脚本到数据落库
这部分的定位不是做一个复杂的自动化测试框架,而是用代码把重复劳动减到最低、把数据记录标准化。项目总代码量不大,大约一千多行Python,分为几个模块。
project/ ├── config/ │ ├── platforms.yaml # 十家平台的基础信息与测试入口 │ └── scenarios.yaml # 测试场景与时间段配置 ├── scripts/ │ ├── daily_reminder.py # 生成每日任务清单并推送飞书 │ ├── capture_api.py # 监听小程序/页面发出的请求 │ └── export_report.py # 从数据库导出对比报告 ├── data/ │ ├── raw/ # 原始抓包数据 │ └── processed/ # 清洗后的汇总数据 └── main.py # 数据清洗与指标计算入口这里的核心是platforms.yaml,每一条记录对应一个平台。包括平台名称、医院名称、访问入口(小程序AppID或H5链接)、科室关键词,以及处方查询入口。这些信息在测评开始前就要整理好,否则测评中途再去翻入口会非常浪费时间。
另外要说明的是,整个项目不是纯爬虫方案,而是“人工操作+辅助抓包”的半自动模式。因为互联网医院平台的很多关键数据在页面渲染后才有,接口本身有签名和加密,完全模拟请求需要付出较高的逆向成本,对一次横向对比来说不划算。
4.2 请求抓包:用mitmproxy监听小程序流量
要获取平台内部接口的数据,比如医生回复时间、支付回调状态、处方生成时间,最简单的方式不是去逆向小程序,而是开一个代理监听流量。
我这里用的是mitmproxy,配合手机客户端设置代理,就能看到小程序发出的所有HTTP/HTTPS请求。配置很简单,几行命令就可以跑起来:
# 启动 mitmproxy 并保存请求日志 mitmproxy -p 8888 --set console_eventlog_verbosity=info -w raw_flows.bin跑起来之后,手机连上同一个WiFi,代理地址指向电脑的局域网IP和8888端口。这样我每次操作平台时,所有请求都会记录到本地的raw_flows.bin文件里。后续需要分析某个具体接口的响应时间、返回数据,就用以下脚本读取抓包文件,按URL关键字过滤。
from mitmproxy.io import FlowReader flow_logs = [] with open("raw_flows.bin", "rb") as f: reader = FlowReader(f) for flow in reader.stream(): flow_logs.append(flow) # 筛选所有支付相关请求 pay_flows = [f for f in flow_logs if "pay" in f.request.url] for flow in pay_flows: print(flow.request.url, flow.response.status_code if flow.response else "no response")用这个方案抓到的数据有几个好处:第一,接口层面的响应延迟比前端白屏感知更精确;第二,能看到支付、处方、报告等关键环节的真实状态码;第三,全部数据有原始存档,后续别人质疑结论时可以拿来做证据。
4.3 用yaml配置驱动,数据和代码分离
爬虫代码的痛点在于:平台入口和测试场景随时会变,如果把这些配置写死在代码里,每次调整都要改代码、重启程序,维护成本太高。
所以我把配置抽到了yaml文件里。每个平台在platforms.yaml中对应一条记录:
- name: 某市第一医院互联网医院 entry: type: wechat_miniprogram appid: wx1234567890abcdef department: 心血管内科 doctor_keyword: 主任医师 report_entry: 个人中心-我的报告 note: 线上支付仅支持自费,不支持医保测试场景配置则在scenarios.yaml里定义,包含每个时间段的任务模板和通知方式:
scenarios: weekday_morning: time_slot: "09:00-11:30" flow: [register, auth, department, doctor, question, pay, chat, prescription, drug, report] go_steps: 5 weekday_evening: time_slot: "19:00-21:30" flow: [question, chat] note: 晚间只测问诊链路这样做的好处是,如果某个平台在后续测评里换了一个科室入口,我只需要改yaml里的配置,不需要碰任何代码。整个项目的数据流变成了:配置驱动任务→人工操作产生流量→抓包日志沉淀数据→脚本清洗汇总→表格呈现结论。每一层都是可追溯的。
4.4 数据清洗:从六十次原始记录到一张对比表
原始抓包数据里至少有一半的信息对指标计算没用,需要用脚本做清洗和聚合。我的处理步骤大致如下:
import pandas as pd df = pd.read_json("raw_logs.json") # 剔除网络层错误和重试请求 df = df[df.status_code < 500] # 提取关键字段 records = [] for _, row in df.iterrows(): records.append({ "platform": row["platform"], "request_time": row["started_at"], "duration_ms": row["duration_ms"], "api_type": classify_api(row["url"]), }) result = pd.DataFrame(records) pivot_table = result.pivot_table( index="platform", columns="api_type", values="duration_ms", aggfunc="median" ) pivot_table.to_csv("platform_api_timings.csv")这里的classify_api函数按URL关键词把接口分类到十个环节。比如url中含“order”的归为挂号订单,含“prescription”的归为处方,含“payment”的归为支付。分好类之后,对各项耗时取中位数而不是平均值,因为要过滤掉个别极端值的影响。
清洗后的数据最终汇总成一张总表,逐项计算每个平台的总体得分。这张表也是最终输出对比报告的底表,后面对外发布时,只要把敏感信息匿名化,就可以直接用了。
5. 实操中的高频问题与排查思路
5.1 小程序抓包连不上:代理配置的三种排查路径
抓包过程中的第一个坑,就是手机装了代理之后小程序直接“网络不给力”,刷新不出任何内容。这个现象在近两年的小程序里越来越常见,原因是微信里部分接口不走系统代理,或者直接开启了证书校验。
排查顺序一般是这样:
- 先确认代理本身没挂。在电脑上重新启动mitmproxy,然后用手机浏览器访问一个外部网站,看能不能打开。如果浏览器也打不开,说明代理没配对,检查手机和电脑的IP是否在同一网段。
- 如果浏览器能打开但小程序白屏,说明小程序的网络库走了自己的代理通道,绕过了系统代理。这时候可以在电脑上用adb方式把手机的全局路由指过来,而不是只设置WiFi代理。
- 如果小程序能打开但一直转圈,大概率是证书验证失败。需要把mitmproxy的CA证书完整安装到手机上,并且确保iOS或Android的系统时间与真实时间一致,时间偏差会导致证书校验失败。
这套问题排查下来,最花时间的是证书环节,建议在正式开始测试前先拿一家平台做全流程验证,确认抓包数据完整了再铺开跑。
5.2 问诊回复等了四十分钟:异常数据怎么标记
我前面提到过,医生回复时间完全不可控。有的医生五分钟内就回,有的四十分钟没有任何动静,这些客观因素反映了平台本身在医生运营和提醒机制上的差距,所以不能简单地删掉异常值,而是要区分对待。
我的处理原则是:同一天内同一平台重复测试时,如果医生超时未回复导致流程中断,这条数据记为“流程未完成”,不计入平均耗时统计,但记入“问诊未响应记录”明细。在最终评分时,如果某平台出现了三次以上的“流程未完成”,会在体验质量维度上额外扣分。
还有一个细节:问诊超时退费。有些平台会在订单超时后自动关闭并退款,但这个流程不会主动推送,需要患者去订单中心查看。这种设计也很影响体验,我在记录时会增加一条备注:超时自动退款是否有消息通知。这一项虽然不进入量化统计,但会写进最终的对比评语里。
5.3 入口数量比想象中多:同一个平台究竟测哪个入口
现实中很多医院不止一个线上入口,微信公众号一套、微信小程序一套、App可能还有一套。这几套入口往往共用同一个后端,但前端体验有很大差异。
我的处理方式是:优先测微信小程序入口。理由很简单,微信小程序是所有入口中触达成本最低的,患者不用额外安装App,挂号和问诊的使用门槛最低。如果某家医院只有App没有小程序,则记录备注,并在最终报告里降低该平台的可及性评分。
后来测试时我发现,有些医院的小程序和公众号其实是拼接起来的,点击“在线问诊”后会跳转到另一个账号主体下的H5页面,冷启动体验非常割裂。这种跨主体跳转在实际患者使用中是很大的减分项,但如果不实际操作很难发现。因此这类入口跳转信息我都会记录在平台档案里,作为体验评测的附加说明。
5.4 医院数据安全限制:实名认证和就诊卡绑定的合规问题
整个测试过程中,最难的不是技术,而是身份合规。互联网医院平台都要求实名认证,有些还需要上传身份证甚至人脸识别。作为对比测试,我不能使用虚假证件信息去注册,这是红线。
所以我在项目启动前就定下规则:所有测试账户全部用项目组成员的真实信息注册,每人最多注册两家平台。问诊场景只选择最轻量级的图文咨询,不涉及线下就诊、不涉及开药处方。
这样做一方面保证了流程真实可测,另一方面也规避了数据安全风险。有一个平台在实名认证环节要求填联系人的手机号,并要求授权读取位置信息,我按合规要求选择拒绝,结果页面直接卡住无法继续。这个体验问题真实存在,但如果我没有提前做好合规预案,这个环节的记录就不完整了。
在最终报告里,所有涉及个人信息的数据都会脱敏,只保留时间戳和流程指标,不保存任何诊疗对话内容。
6. 总结之外:一些真实体会
这套方法跑下来,最大的感受是:横向对比从来不缺工具和代码能力,缺的是对业务场景的耐心和对细节的执念。互联网医院平台看起来是标准化的线上产品,实际每个平台后面都连接着一套复杂的医院业务流程。那些体验差异往往藏在支付页面的一句话、医生接诊时的一个系统提醒、报告查看时的一个查看格式里。
我踩过最大的坑,是前期把大量的精力花在指标体系的复杂化上,觉得维度越多越科学。后来跑完几轮测试才知道,真正有价值的指标其实就那些能直接反映患者体验的朴素数据——几步能挂上号、多久能等到回复、支付时能不能用医保。指标不需要多,但每一个必须能被真实采样。
这次项目的代码骨架和数据沉淀,后续可以直接复用到其他行业的服务对比评测中。不管测的是互联网医院、在线教育平台还是本地生活服务,思路都是相通的:先画出用户路径,再定义每段路径的体验指标,最后用统一频次采样让数据形成纵向可比性。如果你正在做类似的平台对比,希望这篇拆解能帮你少走一些弯路。