2026.05.16 開発ログ

LINEで予約が完結する、
ネイルサロンのBotを作った。
— Lien 開発ログ #1

スマホのカメラロールを開かなくていい。電話しなくていい。DM を待たなくていい。
LINEを開いて、写真を見て、ボタンを押すだけで予約が入る。

そういう体験を、架空のネイルサロン「Lien Nail Studio」向けに実装した。

← Blog に戻る

ネイルサロンの予約は、今もDMや電話が多い。 LINEで連絡はできても、空き確認→日程調整→確定という往復が発生する。 お客さんは待たされ、サロン側は都度返信しなければならない。

これは自動化できる。LINEのBot機能を使えば、カルーセルでメニューを見せて、カレンダーで空きを選んで、名前を入れたら予約完了まで全部LINEの中で完結する。

作ったもの

「Lien Nail Studio」という架空のネイルサロン向けLINE予約Botをゼロから実装した。デモとして実際に動いている。

Lien Nail Studio リッチメニュー — 8セル構成

— LINE のリッチメニュー。写真背景に8機能を配置した。

1
写真付きカルーセルでメニュー選択

ワンカラー・ニュアンスデザイン・アート込みコースなど7メニューを写真付きで表示。価格と所要時間も一目でわかる。

2
スタッフ指名

前回来店時の担当を自動で提案。初回なら全スタッフの紹介カードを表示して選べる。

3
1ヶ月先まで空き日程を自動計算

定休日・スタッフの休憩・すでに埋まっている枠を除外して、本当に予約できる時間だけをボタンで表示する。同じ枠に2人が同時に予約しようとしても、1件しか入らない仕組みになっている。

4
仮受付 → 確定通知

予約は即確定せず「仮受付」として管理画面に届く。サロン側が確認して確定ボタンを押すと、お客様のLINEに通知が届く。

5
前日リマインダー自動送信

予約前日の夜20時に、タイマーが自動でリマインドメッセージを送る。サロン側が何もしなくていい。

どうやって動いているか

仕組みをざっくり説明すると、LINEでメッセージを送るたびに「サーバー」が瞬時に反応して返事を作っている。この「サーバー」は世界中に分散していて、月間コストはほぼゼロ円。特別な機材も契約も不要だ。

— 役割分担
メッセージ処理LINEから届いたメッセージを受け取り、返事を作る頭脳
予約データ保管誰がいつ何を予約したか記録するデータベース
会話の記憶「今この人は予約の何ステップ目か」を30分間覚えておくメモ帳
自動タイマー毎晩決まった時刻にリマインドを送る仕掛け
管理画面サロン側が予約を確認・確定するブラウザ画面

設計で工夫したこと

一番考えたのは「会話の途中を覚えておく」仕組みだ。LINEのBotは、メッセージが来るたびに「初対面」として起動する。前のメッセージを覚えていない。だから「今この人はメニュー選択が終わって日付を選んでいる最中」という状態をどこかに記録しておく必要があった。

解決策は、メモ帳のようなストレージに「この人の現在地」を書いておくことだ。予約が完了したら消す。30分間放置されたら自動で消える。シンプルだが、これだけで会話が途切れずに成立する。

— 会話の状態を保存するコード(エンジニア向け)
// 「この人は今ここにいる」と記録(30分で自動消去)
await kv.put(`state:${userId}`, JSON.stringify(state), { expirationTtl: 1800 });

// 次のメッセージが来たとき、記録を読み出す
const raw = await kv.get(`state:${userId}`);
const state = raw ? JSON.parse(raw) : null;

もう一つは二重予約の防止だ。同じ時間帯を2人が同時に選ぼうとした場合、どちらか片方しか入れないようにしなければならない。「データベースのルール」として「同じ日時・同じスタッフには1件しか入らない」と設定することで、アプリ側で複雑な処理をしなくても自動的に弾かれる仕組みにした。

— 二重予約を防ぐルール(エンジニア向け)
CREATE UNIQUE INDEX IF NOT EXISTS uniq_slot
  ON reservations(date, start_time, staff_id)
  WHERE status IN ('confirmed', 'pending');

作ってみて詰まったこと

「30秒ルール」の壁が最初の難関だった。LINEのBotはメッセージを受け取ってから30秒以内に返事をしなければならない。重い処理を順番にやっていると、あっという間に超える。

対策は「まず『受け取りました』とだけ返してから、重い作業を並行で走らせる」設計に変えることだった。完成したものから順番にLINEへ送る。レストランで「ご注文承りました」と言ってから調理する感覚に近い。

もう一つは言葉の誤解の問題だ。「ニュアンスデザイン」というメニューを選んだとき、Botが「デザイン」という言葉に反応して「作品ギャラリーはこちらです」と的外れな返事をしてしまっていた。予約の最中はこういったキーワード検索を完全にオフにすることで解決した。

— 対応できる質問の種類 20+ 料金・営業時間・アクセス・キャンセル規定・駐車場など
— メッセージの表示形式 5種 テキスト・写真カルーセル・ボタン・カード・地図
Lien Admin 管理画面と LINE 通知

— 管理画面で確定ボタンを押すと、お客様の LINE に即座に通知が届く。

できたもの

動くデモとして公開している。実際にLINEで友だち追加して予約操作が体験できる。スタッフは架空だが、Botの動きは本物だ。

LINEを開く。リッチメニューの「予約」を押す。
写真付きのメニュー一覧が流れてくる。
ワンカラーを選ぶ。スタッフを選ぶ。日付を選ぶ。名前を入れる。
確認画面が出て、「確定」を押す。

それだけで予約が入る。
お客さんは待たなくていい。サロン側は手が空いたときに確認すればいい。

Lien Nail Studio ネイルギャラリー

— Bot から「ギャラリー」と送ると、作品写真のカルーセルが流れてくる。

次回は管理画面と、受信ボックス(お客様からのフリーメッセージに返信できる機能)について書く。