凌晨 2 点 17 分打开站点,右下角还是「在线客服」,点进去排队十分钟没人接,第二天早上运营说那个点根本没人值班。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

$tz = wp_timezone();
$now = new DateTime('now', $tz);
$open = ($now->format('H:i') >= '09:00' && $now->format('H:i') < '18:00');
echo $open ? 'online' : 'offline';

模板里把状态图标直接写成了 online,没有去问客服系统的在线接口,也没有营业时间配置。判断营业时间的那段代码用了 UTC 小时,和站点时区差八小时,白天反而被判成下班。这一点先确认清楚,后面就不用反复试。

「客服在线状态写死」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。

具体做法是,把状态改成接口取值,接口里读客服系统的在线坐席数和营业时间段,别在前端写死;时间比较统一用站点时区对象,别拿 date 的小时数直接比;状态缓存六十秒就够,太长会出现下班了还显示在线的情况。

改完照着核一遍,凌晨打开显示离线并给留言入口,上午十点显示在线,两个时点都对得上。

作者 9823189