お客様は住所を言わない
電話のお客様は、住所を言わない。「◯◯ホテルの302」で全部済ませる。 考えてみれば当たり前で、自分が泊まっているホテルの番地を言える人のほうが珍しい。 だからこのデリヘル管理アプリの受付画面では、目的地入力は住所欄ではなくホテル選択が主役だ。 地域を選ぶと候補が絞り込まれ、ホテルを選んだ瞬間に住所と座標が入り、 昨日書いたガントや移動時間の計算はぜんぶこの座標の上で動く。 その土台に、全国47都道府県ぶん33,934件のホテルマスタを積んでいる。
元データは OpenStreetMap だ。47都道府県のホテルとラブホテル(33,934件のうち 8,705件がラブホテル)を抽出して、市区町村は行政界のポリゴンに緯度経度を 当てて逆引きしている。経路計算を自前で持ったのと同じ理屈で、 マスタも外部のAPIに都度聞きに行かず手元に置く。 ただし取ってきたままでは使いものにならなくて、住所が「福岡県」までしか無い個体や、 同じ番地に複数のホテルがぶら下がっている個体がかなりある。 ここは地道に、名前で検索して実在の住所を確かめる作業を繰り返した。 座標が入っているのはまだ4割ほどで、無いホテルは選んだ瞬間に住所から割り出している。
「読み」を33,934件ぶん作った
名前だけのマスタでは検索が成立しない。この業界のホテル名は 「30L」「W-ONE」のような表記が普通にあって、文字のままでは 聞き取った音と突き合わせられない。そこで全件に読み仮名を振った。 「30L」は「サンゼロエル」。検索時はスペースと中黒を捨てて かなを正規化した形で突き合わせるので、「ダブルワン」でも「W ONE」でも同じ場所に当たる。 AI電話受付が聞き取った名前で探すときもこの読みが効いていて、 英語話者の発音がラテン文字で書き起こされたときのために、読みをローマ字に落とした照合も持っている。
同名ホテルで一度やらかした
7月に、あるチェーンホテルからの部屋番号連絡を、同じ市内にある 同チェーンの別店舗だと誤確信する事故を起こした。原因は二段重ねで、 照合の実装が経路ごとに分かれていて片方は候補を8件で切り捨てており、 そこにマスタの座標入れ違いが重なった。チェーンホテルは同名がずらりと並ぶので、 8件の外に正解が落ちたのだ。いまは照合の実装を1本にまとめて候補は50件まで見る。 絞り込みは住所の文字列照合を先、座標の近さは最後の手段で、 しかも800m以内かつ2番手より明確に近いときしか確定しない。 取り違えて派遣するくらいなら「特定できませんでした」と人間に渡すほうがずっとましだ。
マスタは月に1回、OpenStreetMap の差分と、本番で店舗さんが手入力したホテルの 逆輸入で更新している。現場が足した1件は、次の月には全店の候補に載る。 明日は、ホテルがまだ決まっていない電話のための「エリアだけ決めて取る予約」の話を書く。