ブライダルのLINE公式アカウント:来館前・来館後・成約後でリッチメニューを切り替える設計
結婚
この
この
ブライダルの
株式会社bundlyzeでは、
式場とお二人の関係は、来館から挙式後まで続く
フィットネスや
その
状態を絞り、きっかけと記録する人を決める
最初に、
| 状態 | 変わる |
記録するのは | メニューの |
|---|---|---|---|
| 来館前 | 友だち追加 | 自動 |
フェアの |
| 来館の |
予約の確定 | 予約の |
当日の |
| 来館後・検討中 | 来館の受付 | 受付の |
見積もりの |
| 成約後 | 契約の記録 | 担当の |
打ち合わせの |
| 挙式後 | 挙式日を |
自動 |
写真や |
決めて
- 「来館前」は
ユーザー単位の 友だち追加したメニューを 使わない。 直後の 人には、 デフォルトの メニューを 出せば 足ります。 ユーザー単位で 結びつけるのは、 状態が 進んだ 人だけに します - 見送りに
なった 結びつけをお二人は、 デフォルトに 戻す。 解除すると、 デフォルトの メニューが 代わりに 表示されます - メニューは
人ごとではなく、 1つの状態ごとに 作る。 チャネルで 作れる リッチメニューは 最大1000件です。 お二人ごとに 名前入りの 画像を 作るような 設計は、 上限にも 運用にも 合いません
2人で1組:ユーザーIDを組にひも付ける
式場の
create table couples (
id text primary key,
stage text not null, -- before_visit / visit_booked / visited / contracted / after_wedding / closed
wedding_date date
);
create table couple_line_users (
couple_id text not null references couples(id),
line_user_id text not null unique, -- Webhook の source.userId
added_at timestamp not null,
primary key (couple_id, line_user_id)
);2人目を
切り替えは「計算して合わせる」処理を1つだけ持つ
状態が
const MENU_BY_STAGE: Record<string, string[] | null> = {
before_visit: null, // デフォルトのメニューに任せる
visit_booked: ['richmenu-visit-booked'],
visited: ['richmenu-visited'],
contracted: ['richmenu-prep', 'richmenu-contact'], // タブで切り替える2枚
after_wedding: ['richmenu-after'],
closed: null,
};
async function syncRichMenu(coupleId: string) {
const couple = await db.getCouple(coupleId);
const wanted = MENU_BY_STAGE[couple.stage];
for (const userId of await db.lineUsersOf(coupleId)) {
const current = await line.getUserRichMenuId(userId); // GET /v2/bot/user/{userId}/richmenu
if (wanted === null) {
if (current) await line.unlinkRichMenu(userId); // DELETE /v2/bot/user/{userId}/richmenu
continue;
}
// 同じ状態のタブのどれかが出ていれば、合っているとみなす
if (current && wanted.map(menuIdOf).includes(current)) continue;
await line.linkRichMenu(userId, menuIdOf(wanted[0])); // POST /v2/bot/user/{userId}/richmenu/{richMenuId}
}
}この
- 状態が
変わった :予約のとき 確定、 来館の 受付、 契約の 記録の 直後 - フォローイベントが
届いた :友だち追加と、とき ブロック解除の 両方 - 毎晩:挙式日を
過ぎた 組を 「挙式後」に 進めたうえで、 全組を 見直す
ユーザー単位で
ブロック中の人と、タブの扱いでつまずかない
運用に
ブロックしているfollow.isUnblocked が
タブで
まとめて替える場面では、APIを使い分ける
1組ずつ
| 場面 | 使うもの | 注意する |
|---|---|---|
| 1組の |
POST /v2/bot/user/{userId}/richmenu/{richMenuId} |
すぐに |
| 毎晩、 |
POST /v2/bot/richmenu/bulk/link |
1回で |
| 季節に |
POST /v2/bot/richmenu/batch(type: link で |
1時間にresumeRequestKey を |
季節の
メニューの画像には、お二人の情報を入れない
状態ごとの
個別の
公開前に確かめること
状態ごとの
- 状態と
記録する :5つ前後の人 状態ごとに、 変わる きっかけと、 記録する 人 (受付・ 担当の スタッフ・ 自動の 処理)が 決まっている - お二人の
2人目 :後から友だち追加した 2人目が、 IDトークンの 検証を 通って 組に 加わり、 その 時点の 状態の メニューが 出る - ブロック解除:ブロック中に
状態が 進んだ 人が、 ブロックを 解除した ときの フォローイベントで 正しい メニューに 替わる - タブ:成約後の
タブを 切り 替えた あと、 毎晩の 処理を 流しても、 開いていた タブが 元に 戻されない - 見送り:
見送りに なった 組の 結びつけを 解除すると、 デフォルトの メニューが 出る - まとめての
切り :複数人への替え 結びつけの あと、 1人 分ずつ取得して 結び ついた ことを 確かめる 手順が ある - 画像の中身:メニューの
画像に、 お二人の 名前や 日付などの 個別の 情報が 入っていない
自社でやる場合と、任せる場合
自社で
任せる
出典(一次情報)
LINEの
- ユーザー単位で
出すメニュー (即時の(LINE Developers の 解説) 反映、 解除すると デフォルトが 表示される) - メニューの
表示の (表示の優先順位と 反映 (LINE Developers の 解説) 優先順位、 反映される タイミング) - エイリアスを
使った (エイリアスとタブ (LINE Developers の 解説) 切り 替えの アクション) - Messaging API の
仕様一覧 (作成の(LINE Developers の リファレンス) 上限1000件、 複数人への 結び つけは 最大500人で 非同期、 一括 操作は 1時間に 3回・ resumeRequestKeyは14日、 ブロック中の 人の 扱い、 follow.isUnblocked) - LIFF で
利用者を (IDトークンを確かめる (LINE Developers の 解説) 送り、 受け取った 側で 検証する) - 管理画面での
メニューの (管理画面で作り方 (LINEヤフーの 事業者向けマニュアル) 作る メニュー)
よくある質問
お二人のうち片方しか友だち追加していない場合、メニューはどうなりますか?
友だち追加していない
来館したかどうかは、どうやってシステムに伝えればいいですか?
受付の
メニューの画像を季節ごとに替えたいときは、全員を結びつけ直す必要がありますか?
ありません。