社区药急送与24小时药房即时履约落地

日期:2026-08-19

一、项目背景

我们接的这家连锁药房,线下几十家门店,夜间急用药订单原来散在电话和第三方平台里,门店一关门就接不了单。有次半夜顾客找退烧药,骑手到了发现门店已锁,白跑一趟,投诉直接到监管。总部对账也乱,急用药的履约数据散落各处,店长半夜被电话叫醒是常态。更棘手的是,夜间订单和白天库存是两套账,白天卖掉的夜间药柜不知道,顾客下单时看到有货,到了发现早空了,这种体验比没货更伤人。我们翻过一个月的夜间工单,因为这种信息不同步导致的白跑和投诉,占了夜间履约问题的大头,店长们对这套流程怨言最多。

我们当时意识到,急用药场景和普通电商最大的区别是等不起,三十分钟送不到,这单就没意义了,而且药品还牵涉合规,不能像普通商品那样随便发,错发和误发都比普通商品后果重。

二、落地场景

我们把四件事打通。一是 24 小时无人药房接入:部分门店布了智能药柜,夜间也能出药。二是急用药库存可视:所有门店的急救类药品(退烧、止泻、外用)实时上报库存,顾客下单时先看得到哪家有货。三是就近智能派单:系统按库存、距离、骑手位置算出最近出药店,下单即派。四是用药禁忌提示:接 OTC 药品时弹出禁忌说明,避免误用。五是夜间产能看板:总部实时看各店夜间出药能力和急送时效,哪家电柜离线、哪个骑手空闲,一眼能发现,异常门店不再靠投诉才暴露。

三、关键技术挑战与解决思路

最磨人的是夜间产能。不是每家店都开智能药柜,普通店关门后只能靠附近药柜和值班店兜底,派单逻辑得先判断此刻哪家能出,不能只看距离。我们用门店营业状态加药柜在线状态做了一层可用性过滤,再算距离权重,避免了"就近但已关门"的无效派单。

另一个坎是库存可见性。急救药周转快,十分钟前的库存可能已卖出,我们用了短过期缓存加下单预占,顾客看到有货才允许下单,下单即锁库存,避免到了没药。这个预占和白天电商的预占思路一致,只是窗口更短,我们设成三分钟,超时自动释放,防止占而不买卡住别人。

还有用药安全。上线首周我们只做了派单,没接禁忌提示,被监管提醒一次。后来在结算前加了强制阅读环节,虽然多了一步,但合规红线不能碰,这个环节宁可慢一点也不能省,毕竟药不是普通快消品。

还有一个容易被忽略的点,是夜间运力的调度。急用药订单不像白天那样均匀分布,往往集中在晚上八九点和凌晨的突发需求,骑手平时在跑普通外卖,夜间空闲却不一定在药房附近。我们让调度系统和骑手运力平台打通,夜间把药房周边三公里内的空闲骑手优先推给急送订单,并且给这类订单更高的优先级权重,避免被普通订单插队。上线初期我们没接运力平台,靠药房自己联系的兼职骑手,响应慢且不稳定,有次顾客等了快一小时才等到人,后来打通运力平台才算真正稳下来。另一个坑是多店库存的一致性,白天卖出的药夜间药柜不知道,我们靠统一的库存中心做实时扣减,任何一端的销售都立刻反映到所有出药点,这个问题不解决,就近派单算得再准也会把顾客导到没货的地方,前面所有努力都白费。现在夜间的单量曲线我们也能拉出来看,哪片小区需求高,就在那附近多布药柜,调度从被动接单变成了主动布防。

案例片段(已脱敏): 就近派单路由(伪配置):dispatch:  candidate_filter:    - store.open == true or locker.online == true    - stock[item] > 0  score: 0.6*distance_norm + 0.4*rider_eta  prehold: true  prehold_ttl: 180s某次凌晨两点,顾客在下单页看到 800 米外药柜有退烧药,系统派单后骑手 18 分钟送达,而此前同类订单因门店关门平均流失约四成。另一晚系统因预占拦截了一笔已无货的订单,避免了一次空跑投诉,顾客改选了三公里外有货的店。

案例片段(已脱敏): 运营复盘某冬季流感高峰夜,晚上十点到凌晨一点的急用药订单是平日的近三倍,系统把附近三家药柜和一家值班店全部纳入候选,按骑手实时位置动态派单,那一晚夜间接单率仍维持在九成以上,没有因为单量突增而崩溃,店长第一次没有被电话叫醒。

四、效果数据

夜间接单率从原来的约 40% 提到 92%,急送平均时效从 47 分钟压到 26 分钟,缺药率下降约七成。客诉里买不到急用药的占比基本归零。代价是用药禁忌提示让结算多了一步,但换来合规安稳,值。文中数据为项目复盘口径,已做脱敏。

五、可复用经验总结

急用药履约的命门是此刻能不能出、出了能不能送到,把门店营业态和药柜在线态做成派单前置过滤,比单纯算距离靠谱,无效派单从源头就掐掉。库存可见必须配预占,否则看到有货到了没有就是骗用户,预占还要设超时释放。用药安全那一步别省,我们栽过一次就长了记性。说实话,派单算法现在还有优化空间,高峰期骑手抢单时距离分权重还得再调,这部分我们还在灰度观察,先把不接单和接错单这两类硬伤按住。