心理咨询行业有一个很现实的问题:来访者往往在情绪最低落的时候才决定求助,而这时候他们最不想做的,就是打电话、加微信、反复沟通时间。一个顺畅的预约入口,能显著降低求助门槛。这也是我接到的第一个人开发需求——为一位独立执业咨询师做一个心理咨询预约小程序。
需求拆解:别把它当成普通预约工具
心理咨询预约和理发、看牙的预约有本质区别,开发前必须想清楚这几点:
- 隐私优先:来访者不希望预约记录被别人看到,手机号、真实姓名都要做脱敏处理。
- 时段敏感:咨询通常固定50分钟或60分钟,且咨询师之间不能撞档,时段冲突校验必须严谨。
- 咨询方式多样:面询、视频、语音,不同方式对应不同的准备事项和链接生成逻辑。
- 取消与改期规则:行业惯例是提前24小时免费取消,临期取消可能扣费,规则要可配置。
如果一上来就写代码,很容易做成一个“通用预约模板”,后期改起来非常痛苦。我的建议是先画出状态机:待确认 → 已确认 → 已完成 / 已取消 / 爽约,每个状态对应不同的通知和权限。
技术选型与整体架构
考虑到个人开发者维护成本,我选择了微信小程序原生 + 云开发方案,省去服务器运维和备案的麻烦。核心模块如下:
- 前端:微信小程序(WXML + WXSS + JS),使用 TDesign 或 Vant Weapp 组件库加速界面搭建。
- 后端:微信云开发(云函数 + 云数据库 + 云存储),按量付费,初期成本几乎为零。
- 通知:订阅消息 + 云函数定时触发器,做预约提醒和爽约预警。
- 管理端:咨询师用小程序内的隐藏入口进入管理页,不需要单独做后台。
核心功能实现
1. 可预约时段生成
咨询师在管理端设置每周的固定排班,比如周一、周三 19:00-21:00,每场 60 分钟。云函数根据排班和已有预约,动态生成未来 14 天的可约时段。这里要注意时区问题,云函数默认是 UTC 时间,必须统一转换成北京时间再计算。
// 云函数:生成可预约时段
exports.main = async (event) => {
const { counselorId, days = 14 } = event;
const schedules = await db.collection('schedules')
.where({ counselorId, active: true }).get();
const booked = await db.collection('appointments')
.where({ counselorId, status: _.in(['pending', 'confirmed']) }).get();
const slots = [];
const now = new Date();
for (let i = 0; i < days; i++) {
const date = new Date(now.getTime() + i * 86400000);
const weekday = date.getDay();
schedules.data
.filter(s => s.weekday === weekday)
.forEach(s => {
for (let t = s.start; t + 60 <= s.end; t += 60) {
const key = `${formatDate(date)} ${formatTime(t)}`;
if (!booked.data.some(b => b.slotKey === key)) {
slots.push({ slotKey: key, date: formatDate(date), time: formatTime(t) });
}
}
});
}
return { slots };
};2. 预约创建与并发防重
两个来访者同时点同一个时段是真实会发生的情况。云数据库没有行锁,我的做法是在 appointments 集合上建唯一索引 slotKey,插入冲突时捕获错误并提示“该时段已被预约”。这比先查后写更可靠。
3. 隐私与脱敏
来访者填写的手机号在管理端默认显示为 138****8888,只有点击“查看完整号码”并记录一次操作日志后才展示完整值。所有敏感字段在数据库权限中设为“仅创建者可读写,管理端走云函数”。
4. 订阅消息提醒
预约成功后引导用户授权订阅消息,云函数定时触发器在咨询前 24 小时和 1 小时各推送一次。注意微信订阅消息是一次性授权,需要在每次预约时重新请求,不能想当然地以为授权一次就永久有效。
踩过的坑
- 时间格式化:小程序端
new Date('2024-01-01 10:00')在 iOS 上会返回 Invalid Date,必须用replace(/-/g, '/')处理。 - 云函数超时:默认 3 秒,生成大量时段时容易超时,要在配置里调到 10 秒以上。
- 取消规则:一开始把取消逻辑写死在前端,后来咨询师想调整扣费比例,只能改代码。后来改成读取配置表,管理端可改。
上线后的思考
这个小程序上线三个月,咨询师的预约转化率比之前用微信群接单提升了大约 40%。但更重要的是,来访者反馈“不用解释太多就能约上”,这恰恰是心理咨询预约工具最该做到的事。如果你也在做类似项目,记住:技术不难,难的是对行业规则和用户情绪的理解。
评论 (0)
还没有评论,快来抢沙发吧~