# LINE 公式アカウント停止（Suspend / BAN 相当）の検知（Monaka）

## 概要

Monaka は次の経路で **LINE 公式アカウントの停止** を検知し、シナリオの **LINE通知設定 → LINEアカウントBAN通知**（Chatwork / Slack / Discord）へ送ります。

| 経路 | 対象 | タイミング |
|------|------|------------|
| **定期 API 監視** | 通常の Messaging API 連携（Primary） | **最大約5分**（`putage:line-account-suspend-watch`） |
| **API エラー監視** | 送信・STEP3 確認・Webhook 同期など | **API 呼び出し直後** |
| **Webhook `botSuspended`** | モジュールチャネル | **イベント受信時**（即時） |

## 利用者が行う設定

1. **シナリオ** → **LINE管理** → **LINE通知設定**
2. **LINEアカウントBAN通知** の通知先を Chatwork / Slack / Discord のいつかに設定し保存
3. **テスト** ボタンで疎通確認

停止検知後、紐づくシナリオごとに上記通知先へ本文を送ります（通知先が「通知しない」のシナリオはスキップ）。

## モジュールチャネル（`botSuspended`）

LINE 公式ドキュメントどおり、`botSuspended` は **Primary チャネルの Webhook には届きません**。

モジュールチャネルを Monaka に繋ぐ場合:

1. モジュールチャネルの Webhook URL を  
   `https://{APP_URL}/api/webhook/line-module`  
   に設定
2. サーバの `.env` に **`MONAKA_LINE_MODULE_CHANNEL_SECRET`**（モジュールチャネルの Channel secret）を設定
3. STEP 1 保存などで **`line_bot_user_id`** が Monaka に入ると、`destination` から送信用アカウントを特定できます

## 環境変数

| 変数 | 既定 | 説明 |
|------|------|------|
| `PUTAGE_LINE_SUSPEND_WATCH_ENABLED` | `true` | 5分ごとの API 監視 |
| `PUTAGE_LINE_SUSPEND_NOTIFY_COOLDOWN_MINUTES` | `360` | 同一アカウントの再通知間隔（分） |
| `MONAKA_LINE_MODULE_CHANNEL_SECRET` | 空 | モジュール Webhook 用。未設定時は module エンドポイント無効 |

## 運用

- `php artisan schedule:run` が動いていること（cron）
- 手動確認: `php artisan putage:line-account-suspend-watch --account=16`

## 参考（LINE 公式）

- [モジュールチャネルから Messaging API を利用する](https://developers.line.biz/ja/docs/partner-docs/module-technical-using-messaging-api/)（`botSuspended` / `botResumed`）
- [Messaging API リファレンス](https://developers.line.biz/ja/reference/messaging-api/)
