サービス利用フロー¶
smooth がどのように使われるか、主要なシナリオごとに全体像を示します。
1. ドライバーの初回利用フロー¶
初めて smooth を利用するドライバーが、駐車場を使えるようになるまでの流れです。
アプリへの入口は LINE です。 LINE 公式チャンネルを友だち追加し、チャット画面から Mini App を起動します。LIFF 認証が自動的に走るため、別途ログイン操作は不要です。「サインアップ」画面も存在せず、初回認証時にバックエンドが自動でアカウントを作成します。
① 認証
flowchart LR
A([LINE 公式チャンネルを友だち追加]) --> B[チャット画面から Mini App を起動]
B --> C[LIFF 認証が自動実行<br>LINE アカウントで認証]
C --> D{ロール選択<br>car-owner / car-co-owner}
② 初期設定(car-owner のみ)
flowchart LR
D{ロール選択} -- car-owner --> E[メールアドレス登録<br>確認コードで本人確認]
D -- car-co-owner --> H
E --> F[ナンバープレートを登録<br>日本語プレート形式で入力]
F --> G[決済方法を登録<br>クレジットカード / Apple Pay / Google Pay]
G --> H([駐車場メイン画面<br>利用開始 ✓])
2. 駐車から決済までのフロー¶
登録済みのドライバーが駐車場を利用する際の、入場から決済完了までの流れです。
sequenceDiagram
participant Car as ドライバー(車)
participant Device as SmoothBox
participant API as バックエンド
participant Stripe as Stripe
participant App as smooth-mobile
participant LINE as LINE
Note over Car,Device: 入場
Car->>Device: 駐車場に入る
Device->>API: ナンバープレート画像を送信
API->>API: OCR でプレート番号を認識
API->>API: 登録ドライバーと照合
API->>API: 駐車セッション開始(active)
API-->>App: 「駐車中」ステータスを表示
Note over Car,Device: 駐車中
App-->>Car: アプリで現在の駐車状況を確認可能
Note over Car,Device: 出場
Car->>Device: 駐車場から出る
Device->>API: 出場検知を送信
API->>API: 料金計算(滞在時間 × 料金設定)
API->>API: クーポン割引を適用(あれば)
alt デフォルトカードあり
API->>Stripe: 自動決済を実行
Stripe-->>API: Webhook で決済完了を通知
else デフォルトカードなし
API->>App: 決済リンクを送信
App->>Car: Stripe ホスト型決済ページで手動決済
end
API-->>App: SSE でリアルタイム通知(決済完了)
API->>LINE: LINE プッシュ通知を送信
App-->>Car: 「決済完了」画面を表示
3. 駐車場オーナーの利用フロー¶
駐車場オーナーが smooth に登録し、運用を開始するまでの流れです。
① 登録・審査
flowchart LR
A([smooth-owner にアクセス]) --> B[アカウント作成]
B --> C[オーナープロフィール設定]
C --> D[Stripe Connect<br>本人確認・口座登録]
D --> E[駐車場情報・料金を登録]
E --> F[smooth 管理者が審査・承認]
② 運用開始・日常業務
flowchart LR
F[審査・承認] --> G[SmoothBox を設置<br>APIキーを設定]
G --> H([運用開始 ✓])
H --> I{日常業務}
I --> J[ダッシュボードで<br>稼働状況を確認]
I --> K[収益・分析レポートを閲覧]
I --> L[入金履歴を確認]
4. システム全体の連携フロー¶
smooth を構成する各コンポーネントが、どのように連携しているかの全体像です。
① アプリ・デバイス間の連携
flowchart LR
subgraph ドライバー側
App[smooth-mobile]
Car[車]
end
subgraph 駐車場
Camera[IPカメラ]
Device[SmoothBox]
end
subgraph バックエンド
API[smooth-backend]
DB[(PostgreSQL)]
Redis[(Redis)]
end
subgraph オーナー側
OwnerApp[smooth-owner]
end
Camera -->|RTSP映像| Device
Device -->|プレート画像<br>APIキー認証| API
App <-->|HTTPS / SSE| API
OwnerApp <-->|HTTPS| API
API <--> DB
API <--> Redis
② バックエンド ↔ 外部サービス連携
flowchart LR
API[smooth-backend]
API <-->|決済・Connect| Stripe[Stripe]
API <-->|OAuth 検証| Firebase[Firebase Auth]
API -->|プッシュ通知| LINE[LINE]
API -->|画像保存| GCS[GCS]
5. 決済パターンの分岐¶
ドライバーの状況によって決済フローが分岐します。
① 登録確認・料金計算
flowchart LR
A[出場検知] --> B{ドライバーは<br>登録済み?}
B -- No --> C[未登録プレートとして記録<br>セッションキャンセル]
B -- Yes --> D[料金計算]
D --> E{デフォルト<br>カードあり?}
E -- Yes --> F[自動決済<br>Stripe PaymentIntent]
E -- No --> G[決済リンクを生成<br>Stripe Payment Link]
② 決済実行・完了
flowchart LR
F[自動決済] --> H{決済成功?}
H -- Yes --> I[セッション completed<br>SSE・LINE 通知]
H -- No --> G[決済リンクを生成<br>Stripe Payment Link]
G --> J[ドライバーが手動で決済]
J --> I