移動支援AI、其の全記録——ブラウザ電話予約が動くまでにやったこと
移動支援AI、其の全記録——ブラウザ電話予約が動くまでにやったこと
出典: note.com / 2026-05-24
移動支援AI、其の全記録
ブラウザ電話予約が動くまでにやったこと
ある地方都市で、高齢者や障害者の通院と買い物を支えるコミュニティ交通が動いている。利用者は電話で予約を入れ、ドライバーが自宅まで迎えに来る。便利なシステムだが、電話予約の受付に人的負担がかかっていた。
これが全記録だ。
まずAI電話受付を作った。Vapiという音声AIプラットフォームを使い、日本語で自然に会話する電話ロボットを構築した。名前はayame。利用者が電話をかけると「はい、こちら予約センターです」と応答し、日付と時間と行き先を聞き出して予約を確定する。人間のオペレーターが対応しているのと変わらない体験を、AIが24時間提供する。
次に、会話の内容を予約データとして保存する仕組みが必要だった。Vapiは通話終了時に会話の要約をWebhookで送信してくる。これを受け取るサーバーをPHPで書いた。受信した会話データをLLMに渡して構造化データに変換し、SQLiteに保存する。このパース処理が曲者で、日付の解釈や地名の特定が思い通りにならないことが何度もあった。
自律テストループを組んだ。30分おきに3つのシナリオ(新規予約、キャンセル、日時変更)を自動実行し、パース精度を監視する。テストはCodexに書かせた。GPT-5.5を指定して「予約の会話ログを構造化データに変換するテストスクリプトを書いてくれ」と依頼すると、エッジケースまで考慮したコードを生成してくれた。全てを一人で書く必要はない。AIに書かせて、自分は設計と検証に集中する。これがバランスだ。
Web音声テストページも作った。ブラウザから直接マイクで会話し、ayameの応答を確認できる環境だ。電話をかけなくてもテストできるので、開発速度が格段に上がった。
プライバシーは厳格に処理した。テストで既存の予約データを使う場合、利用者名は全てイニシャルに変換し、住所は丁目以降を削除した。匿名化のルールを決め、全てのテストスクリプトにそのルールを強制した。
現状、ブラウザ経由の電話予約フローは実用的に動作している。自律テストは全シナリオをPASSし続けている。バグを見つけては直し、直してはテストするサイクルを延々と回した結果だ。動くものは壊さず、動いたまま保存する。これが基本方針だ。
次のフェーズは自営化だ。現在はVapiという外部サービスに依存しているが、これを全てローカルで動かせるOSSに置き換える。音声認識はfaster-whisper、音声合成はVOICEVOX、会話制御はLiveKit Agents、言語処理はOllama。電話番号以外は全て自宅のMacで動く。サイファーパンクの精神に従う。「自分でやれ、自分で持て」。クラウドに預けるな。自分のコンピュータは自分で動かせ。
中高生や同好の士に一つ言っておく。
コードの複雑な部分はAIに書かせろ。この記事に出てくるWebhookのパース処理のような複雑なコードこそ、GPT-5.5クラスのモデルに質問すると実装のヒントが得られる。自分がやるべきは設計と検証であり、実装の細部はAIに任せろ。全部を一人で書くな。AIに書かせて、設計と検証に集中しろ。
動くものを壊すな。新しいものは隣に作れ。既存のシステムが動いているなら、そのままにしておけ。改造するより、新しいコンポーネントとして横に作って、徐々に置き換える方が安全だ。このプロジェクトでも旧来の予約システムには一切手を触れず、新しいAI受付だけを横付けした。
全ての生成物にはtasteを反映した。トープとベージュとグレージュを基調に、エルメスオレンジを一点だけ差し色に使う。紫色のグラデーションは禁止だ。この統一されたビジュアルポリシーが、プロジェクト全体に一貫性をもたらしている。
やったことは残る。次に進める。
この記事は note.com から KTBLOG に移行されました。元記事: https://note.com/famous_prawn2009/n/n51e226e44c4a