×を押しても、通報は止まらない

昨日の最後に、誰も確認しなければもう一度知らせるのは緊急の通報だけだ、と書いた。今日はその「もう一度」の中身を書く。 うちのデリヘル管理ツールでは、SOS・転倒・無動作・電源OFFの4種類を緊急として扱っていて、店の誰かが「確認」を押すまで鳴り直す。 毎分、開いたままの緊急を見て回り、最後に知らせてから2分たっていたら、最初とまったく同じことをやり直す。 登録してある連絡先へのSMSと電話、店の画面のお知らせ、赤いポップと3連のビープ音だ。

アラート履歴の画面の上に、赤い「SOS(緊急通報)」のポップが出ている。ポップには「再通知 3 回目」とあり、「地図で現在地」「確認して対応」と×のボタンが並ぶ。下の一覧では、対応中のSOSの行に「↑3」、解決済みの無動作の行に「↑2」が付いている
アラート履歴を開いているところへ届いた、3回目の再通知。種別の横の「↑3」が再通知の回数(画面はデモデータです)。

×を押しても、通報は止まらない

ポップには「確認して対応」と×の2つがある。どちらを押しても、再通知は止まらない。 ×はポップを画面から消すだけ。「確認して対応」は安全モニタリングの画面へ移るだけで、確認済みにはしない。 止まるのは、移った先の一覧で「確認」か「解決」を押したときだ。 鳴っている最中のポップは邪魔なので、人は反射で消す。消す操作と「わかった」を同じボタンにすると、反射ひとつで通報が終わってしまう。 それに、一覧に並ぶのは未確認の通報だけなので、ポップの側で確認済みにすると、移った先にその行がもう無い。

再通知は5回まで。最初の1回と合わせて6回鳴って、それでも誰も押さなければ止まる。 何回目かはポップに出るし、履歴にも「↑3」のように残る。あとから見て、何回鳴ってから気づいたのかが分かる。

鳴らないまま、回数だけ減っていた

7月にコード全体を読み直したとき、この仕組みに穴を見つけた。 「最後に知らせた時刻」を書き込むのが、実際に通知を出す処理の側だけだった。 通知は順番待ちの列に積んでから出している。列が2分以上詰まると時刻が進まないので、毎分の見回りが同じ通報を毎回「もう2分たった」と数える。 回数は1分ごとに上がって、5分で上限に着く。そのあいだ、電話は1本も鳴っていない。 詰まりが解けても、回数はもう使い切っている。

直したのは1か所で、列に積んだ時点で時刻を進めるようにした。次の2分は、積んだときから数える。 鳴らし続ける仕組みは、鳴らす側が詰まったときにいちばん壊れやすい。 警告にはもうひとつ、派遣先逸脱というのがある。明日はその話を書く。