D1

LINE 経由で再訪 (登録済)

✅ 完走可

既に CommunityMember 存在、welcome ではなく joined メッセージ

✅forcommunity アカウント
✅@997qsntl 友だち

フロー詳細 (4 ステップ)

  1. 1

    @997qsntl を友だち追加

    ユーザーが LINE 公式アカウント「琴平デジタル町民」を友だち追加。LINE Platform から webhook follow event が発火する。

    src/app/api/webhooks/line/community/route.ts
  2. 2

    webhook で friend 観測 + 分岐配信

    POST /api/webhooks/line/community で follow event を受信し handleFollowEvent を実行: (a) kotohiraLineFriend.upsert で friend ID を観測テーブルに記録 (P7-3 / 本人確認なし、unfollow 履歴も保持)。(b) resolveAppUserIdByLineUserId で provider=line-kotohira-prod の Account を逆引き → アプリ User を解決。(c-1) User が見つかれば自動 join (CommunityMember.upsert) + tier に応じた richmenu 適用 (applyKotohiraRichMenuForUser) + joined Flex を pushMessage。(c-2) User が無ければ guest richmenu を適用 (applyKotohiraGuestRichMenu) + 移行 LP 誘導付き welcome Flex (createKotohiraNewFriendWelcomeMessage) を pushMessage。B1 は forcommunity 側の User しか持たないため通常 (c-2) の welcome 経路に入る。

    src/app/api/webhooks/line/community/route.tssrc/lib/line/kotohira-richmenu.tssrc/lib/line/flex-messages.ts
  3. 3

    既登録ユーザーとして joined メッセージ受信

    handleFollowEvent が User を逆引き → 既に CommunityMember あれば update 走らず、joined Flex を返信。

    src/app/api/webhooks/line/community/route.ts
  4. 4

    /c/kotohira/mypage で残高 / 履歴を確認

    町民として活動開始。リッチメニューが tier に応じて切替適用される。

    src/app/c/kotohira/mypage/page.tsx

静的解析の自信度: Hi (Hi=確定、Mid=要実機検証、Lo=推測のみ)