LINE WORKS API トーク内容のダウンロード

# LINE WORKS トーク内容のダウンロード（新モニタリング API 対応）

## 🚨 重要な変更について

**2025 年 11 月末より、従来の監査ログAPI（`/audits/logs/download`）によるトーク内容の取得が廃止されるため、新しいモニタリング API（`/monitoring/message-contents/download`）に移行する必要があります。**

本記事では、新APIに対応したトーク内容ダウンロードツールを紹介します。Google Colab上で動作し、手軽に試すことが可能です。

## 主な変更点

| 項目 | 旧API（廃止予定） | 新API |
|------|------------------|-------|
| **エンドポイント** | `/audits/logs/download` | `/monitoring/message-contents/download` |
| **スコープ** | `audit.read` | `monitoring.read` |
| **対象** | 全監査ログ（20種類のサービス） | トーク内容のみ |
| **必須パラメータ** | `service`, `startTime`, `endTime` | `startTime`, `endTime` |
| **管理者設定** | [サービス設定 > 監査] | [サービス設定 > モニタリング] |

## サンプルコードについて

このサンプルコードは、以下の機能を提供します：

- **トーク内容のダウンロードURLの取得**：新しいモニタリングAPIを使用
- **CSV形式でログを保存**：取得したトーク内容をローカルにCSV形式で保存
- **Google Colab対応**：環境構築が不要で、すぐに試せます
- **フィルター機能**：Bot、ラジャー、CXトークのメッセージを個別にフィルタリング可能

ノートブックは以下のリンクから利用できます：  
[**LW_Message_Content_Download_Tool.ipynb**](https://colab.research.google.com/drive/1gbXLFV9PeYwyL1s3bCspdBOTZ5tprEY4?usp=sharing)

## サンプルコードの使い方

### 1. Google Colabで実行

1. 上記のリンクをクリックしてGoogle Colabを開きます。
2. 必要なパラメータ（アクセストークンやログ期間など）を入力します。
3. 実行ボタンをクリックしてトーク内容をダウンロードします。

---

### 2. サンプルコードの内容

以下はコードの主要な部分です。

#### 必要なライブラリのインストール

Google Colabでは`requests`が標準でインストール済みのため、追加インストールは不要です。

#### 設定パラメータの入力

トーク内容を取得するために必要なパラメータを入力します。

```python
# ========================================
# 設定パラメータ
# ========================================
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN_HERE"  # モニタリングAPI用アクセストークン（monitoring.readスコープが必要）
START_TIME = "2024-12-01T00:00:00+09:00"  # 開始日時 (ISO8601形式)
END_TIME = "2024-12-19T23:59:59+09:00"  # 終了日時 (ISO8601形式)
LANGUAGE = "ja_JP"  # 言語設定 (デフォルト: en_US)
OUTPUT_FILE = "message_contents.csv"  # 出力ファイル名

# フィルター設定（オプション）
BOT_MESSAGE_FILTER_TYPE = "include"  # Bot メッセージフィルター: include, exclude, only
ROGER_MESSAGE_FILTER_TYPE = "include"  # ラジャーメッセージフィルター: include, exclude, only
CX_TALK_MESSAGE_FILTER_TYPE = "include"  # CXトークメッセージフィルター: include, exclude, only
DOMAIN_ID = None  # ドメインID（グループ企業の場合に指定）
```

#### ダウンロードURLの取得

新しいモニタリングAPIを使用してダウンロードURLを取得します。

```python
def get_message_contents_url():
    headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
    params = {
        "startTime": START_TIME,
        "endTime": END_TIME,
        "language": LANGUAGE,
        "botMessageFilterType": BOT_MESSAGE_FILTER_TYPE,
        "rogerMessageFilterType": ROGER_MESSAGE_FILTER_TYPE,
        "cxTalkMessageFilterType": CX_TALK_MESSAGE_FILTER_TYPE
    }
    
    # オプションパラメータを追加
    if DOMAIN_ID:
        params["domainId"] = DOMAIN_ID

    response = requests.get(BASE_URL, headers=headers, params=params, allow_redirects=False)
    
    if response.status_code == 302:
        return response.headers.get("Location")
    elif response.status_code == 401:
        raise Exception("認証エラー: monitoring.readスコープが必要です")
    elif response.status_code == 403:
        raise Exception("権限エラー: 管理者画面の[サービス設定 > モニタリング]で事前同意が必要です")
    else:
        raise Exception(f"ダウンロードURL取得失敗: {response.status_code}")
```

#### トーク内容のダウンロード

取得したURLを使用してCSVファイルを保存します。

```python
def download_message_contents(download_url, output_file):
    headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
    response = requests.get(download_url, headers=headers, stream=True)
    
    if response.status_code == 200:
        with open(output_file, "wb") as file:
            for chunk in response.iter_content(chunk_size=1024):
                file.write(chunk)
        print(f"✅ トーク内容を{output_file}に保存しました。")
        return True
    else:
        print(f"⛔ CSVダウンロード失敗: {response.status_code}")
        return False
```

#### Google Colab用の追加機能

```python
def main():
    # アクセストークンの確認
    if ACCESS_TOKEN == "YOUR_ACCESS_TOKEN_HERE":
        print("⛔ ACCESS_TOKENを設定してください。")
        return
    
    # Google Driveを使用するかの選択
    use_drive = input("Google Driveに保存しますか？ (y/n): ").lower() == 'y'
    
    if use_drive:
        from google.colab import drive
        drive.mount('/content/drive')
        output_path = f'/content/drive/MyDrive/{OUTPUT_FILE}'
    else:
        output_path = OUTPUT_FILE
    
    # ダウンロード実行
    download_url = get_message_contents_url()
    if download_url:
        success = download_message_contents(download_url, output_path)
        
        if success and not use_drive:
            # ローカルファイルとしてダウンロード
            from google.colab import files
            files.download(output_path)
```

## 新機能

### 1. フィルター機能
- **Botメッセージ**: Bot からのメッセージを含める/除く/のみ取得
- **ラジャーメッセージ**: ラジャーのメッセージを含める/除く/のみ取得  
- **CXトークメッセージ**: CXトークのメッセージを含める/除く/のみ取得

## 実行結果

Google Colab上で実行すると、以下のようにログが保存されます。

1. フィルター設定が表示されます
2. ダウンロードURLが取得されるとコンソールに表示されます
3. トーク内容が指定したファイル名で保存されます

```
⏳ トーク内容ダウンロードを開始...
📅 期間: 2024-12-01T00:00:00+09:00 ～ 2024-12-19T23:59:59+09:00
🔧 フィルター設定:
   Bot: include
   ラジャー: include
   CXトーク: include
✅ ダウンロードURL取得成功
✅ トーク内容をmessage_contents.csvに保存しました。
```

## 注意事項とトラブルシューティング

### 1. 認証関連
- **アクセストークン**: `monitoring.read`スコープが必要（従来の`audit.read`では動作しません）
- **管理者設定**: [サービス設定 > モニタリング]での事前同意が必須

### 2. API制限
- **取得期間**: 最大31日間
- **並行実行**: 同時に複数のAPI呼び出しは避けてください
- **URL有効期限**: 取得したダウンロードURLは一定期間で無効になります

### 3. エラー対応
- `401エラー`: アクセストークンまたはスコープを確認
- `403エラー`: 管理者画面でのモニタリング同意を確認
- `404エラー`: エンドポイントURLを確認

## 旧APIからの移行

既存の監査ログAPIを使用している場合：

1. **アクセストークン再取得**: `monitoring.read`スコープで新しいトークンを取得
2. **管理者設定**: モニタリング機能の同意を実施
3. **コード修正**: 新しいエンドポイントとパラメータに変更
4. **機能制限の確認**: トーク内容のみの取得となることを確認

## まとめ

新しいモニタリングAPIにより、トーク内容の取得がより専門的かつ効率的になりました。このサンプルコードを使用することで：

- **簡単な移行**: 旧APIからスムーズに移行可能
- **フィルター機能**: 必要なメッセージのみを効率的に取得
- **Google Colab対応**: 環境構築不要で即座に利用開始

ぜひ新しいモニタリング機能をご活用ください！

---

**関連リンク:**
- [LINE WORKS Developer Console](https://developers.worksmobile.com/)
- [モニタリングAPI仕様](https://developers.worksmobile.com/jp/docs/content-log-download)

フィードバックや質問があれば、コメント欄でお知らせください！