# 日本シャッター LINE Slack Relay

`line.japan-shutter.com` 専用の、LINE公式アカウント受信メッセージを Slack に転送する最小構成アプリです。

## 構成

- `config/app.php`
  ベース設定
- `config/app.local.php`
  本番値を入れる設定ファイル
- `config/load.php`
  `app.php` と `app.local.php` を読み込む
- `public/index.php`
  ブラウザで開く確認ページ
- `public/plain-check.php`
  設定状態を JSON で確認する簡易エンドポイント
- `public/setup-check.php`
  ブラウザで設定不足を確認する画面
- `public/line-webhook.php`
  LINE Messaging API の webhook 受信口
- `src/LineOfficialAccount/*`
  署名検証、重複防止、Slack文面整形、プロフィール取得
- `src/Support/SlackNotifier.php`
  Slack Incoming Webhook 送信

## このプロジェクトのURL

- 確認ページ
  `https://line.japan-shutter.com/`
- plain check
  `https://line.japan-shutter.com/plain-check.php`
- setup check
  `https://line.japan-shutter.com/setup-check.php`
- LINE webhook URL
  `https://line.japan-shutter.com/line-webhook.php`

## 使い始める手順

1. サーバー側で次のどちらかの配置にする
2. `config/app.local.php` の以下を埋める
3. `line_message_relay.enabled` を `true` にする
4. LINE Developers Console の Webhook URL に `https://line.japan-shutter.com/line-webhook.php` を設定する
5. `Use webhook` を有効にする
6. `Verify` を押して 200 応答を確認する

### 配置パターン

パターンA: 推奨  
サブドメインの公開先を `public/` に向ける

```text
line-japan-shutter-com/
├─ config/
├─ public/
├─ src/
└─ storage/
```

パターンB: Xserver で公開先変更を使わず、そのまま公開直下へ置く  
`public/` の中身を公開フォルダ直下へ置き、同じ階層に `config/` `src/` `storage/` も置く

```text
line.japan-shutter.com/
├─ index.php
├─ setup-check.php
├─ plain-check.php
├─ line-webhook.php
├─ bootstrap.php
├─ config/
├─ src/
└─ storage/
```

## 設定項目

`config/app.local.php` の `line_message_relay` に以下を設定します。

- `enabled`
  本番運用する時は `true`
- `account_label`
  Slack に表示する公式LINE名
- `message_header`
  Slack通知の先頭文
- `channel_secret`
  LINE Developers の Channel secret
- `channel_access_token`
  任意。1対1トーク時の表示名取得に使います
- `slack_webhook_url`
  通知先の Slack Incoming Webhook URL
- `slack_mentions`
  先頭に付ける Slack メンション配列
- `include_user_profile`
  `true` なら可能な範囲で送信者表示名を取得します
- `dedupe_storage_path`
  処理済み `webhookEventId` の保存先
- `media_burst_window_seconds`
  同一送信者の同一トーク内メッセージを 1 件にまとめる秒数
- `media_burst_storage_path`
  連投抑制の状態保存先

## 動き方

- `message` イベントだけ Slack に転送します
- `follow` / `unfollow` / `join` などは無視します
- LINE の webhook 再送に備えて `webhookEventId` で重複通知を抑えます
- 画像やファイルは本文そのものではなく「受信した」という通知にします
- 同一送信者が同じトーク内で短時間に連投した場合は、内容種別を問わず最初の 1 件だけ通知します

## メモ

この作業環境では `php` コマンドが入っていなかったため、CLI での実行確認は未実施です。
