LINE WORKS API Bot コンテンツ アップロード

# LINE WORKS API を使用して Bot にファイルをアップロードする

この記事では、LINE WORKS API を使用して、Bot にファイルをアップロードする方法を解説します。

以下の URL で Google Colab を使って簡単に試せます。  
[Google Colab で試す](https://colab.research.google.com/drive/1vI_Pl6o5G-iKBw3Ek7uqjqtTUQQDSMuE?usp=sharing)

## 必要な準備

1. **LINE WORKS Developer Console での設定**
   - Bot を作成し、`Bot ID` を取得します。

2. **Access Token の発行**
   - LINE WORKS API を使用するためのアクセストークンを取得します。

3. **アップロードするファイルの準備**
   - アップロードしたいファイル（例: `example.png`）を用意します。

## スクリプト

以下のスクリプトを使用して、LINE WORKS API でファイルをアップロードします。

```python
import requests
import mimetypes
from google.colab import files

# 必要な変数を設定
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"  # @param {type:"string"}
BOT_ID = 2000001  # @param {type:"integer"}

# アップロード URL を取得する関数
def get_upload_url(file_name):
    url = f"https://www.worksapis.com/v1.0/bots/{BOT_ID}/attachments"
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json",
    }
    response = requests.post(url, headers=headers, json={"fileName": file_name})
    if response.status_code == 200:
        data = response.json()
        return data["uploadUrl"], data["fileId"]
    else:
        raise Exception(
            f"アップロード URL の取得に失敗しました: {response.status_code}\n{response.text}"
        )

# ファイルをアップロードする関数
def upload_file(upload_url, file_path, mime_type):
    with open(file_path, "rb") as file:
        files = {
            "FileData": (file_path, file, mime_type),
            "resourceName": (None, file_path),
        }
        headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
        response = requests.post(upload_url, headers=headers, files=files)
    if response.status_code in [200, 201]:
        print("ファイルが正常にアップロードされました！")
        print(response.json())
    else:
        raise Exception(
            f"ファイルのアップロードに失敗しました: {response.status_code}\n{response.text}"
        )

# メイン処理
def main():
    print("アップロードするファイルを選択してください:")
    uploaded = files.upload()
    if not uploaded:
        print("ファイルがアップロードされませんでした。")
        return
    file_name = next(iter(uploaded))
    mime_type, _ = mimetypes.guess_type(file_name)
    mime_type = mime_type or "application/octet-stream"
    print(f"ファイル名: {file_name}, MIME タイプ: {mime_type}")
    upload_url, file_id = get_upload_url(file_name)
    print(f"アップロード URL: {upload_url}")
    print(f"ファイル ID: {file_id}")
    upload_file(upload_url, file_name, mime_type)

# 実行
main()
```
## スクリプトのポイント

### 必要なパラメータ

1. **`ACCESS_TOKEN`**  
   - LINE WORKS API の認証に使用されるアクセストークンです。

2. **`BOT_ID`**  
   - 使用する Bot の ID です。LINE WORKS Developer Console から確認できます。

3. **ファイル選択**  
   - Google Colab 上で `files.upload()` を使用して、アップロードするファイルを選択します。

4. **MIME タイプの自動判定**  
   - ファイルの MIME タイプは自動的に判定されます。不明な場合はデフォルト値 (`application/octet-stream`) が使用されます。

---

### レスポンス例

成功時:
```json
{
  "fileId": "jp1.1733205053418691464.1733291453.1.3725434.0.0.0",
  "fileName": "example.png",
  "fileSize": 144812
}
```
### 失敗時

以下のようなエラーが発生した場合、エラーコードとメッセージを確認して対処してください。

#### 例: 認証エラー
```plaintext
ファイルのアップロードに失敗しました: 401
{
    "code": "UNAUTHORIZED",
    "description": "Authentication failed."
}
```
**原因**:
- `ACCESS_TOKEN` が無効または期限切れです。

**対処法**:
- 正しいアクセストークンを取得して設定します。

#### 例: ファイル名エラー
```plaintext
ファイルのアップロードに失敗しました: 400
{
    "code": "INVALID_PARAMETER",
    "description": "File name is invalid."
}
```
**原因**:
- ファイル名に特殊文字（例: `/`, `?`, `*` など）が含まれている。
- ファイル名が長すぎる、または空白のみになっている。

**対処法**:
1. ファイル名を適切な形式に変更します（半角英数字とアンダースコア `_` のみを使用）。
2. 再度ファイルを選択し、アップロードしてください。

---

#### 例: アップロード URL の期限切れ
```plaintext
ファイルのアップロードに失敗しました: 403
{
    "code": "FORBIDDEN",
    "description": "Upload URL has expired."
}
```
**原因**:
- アップロード URL の有効期限（通常 24 時間）が切れています。
- URL を取得してから一定時間が経過している可能性があります。

**対処法**:
1. 新しいアップロード URL を取得し直します。
2. ファイルを再度アップロードしてください。

---

## 応用

- **アップロード後のファイル使用**:  
  作成された `fileId` を活用して、以下の API 操作を行えます。
  - メッセージ送信 API: アップロードしたファイルをトークルームやユーザーに送信。
  - リッチメニュー設定 API: ファイルを背景画像として利用。

- **多様なファイル形式のアップロード**:  
  このスクリプトは、画像ファイル（PNG、JPEG）、PDF、ドキュメント（DOCX など）に対応しています。アップロード可能な形式は LINE WORKS の仕様に従ってください。

---

## まとめ

LINE WORKS API を活用することで、Bot にファイルを簡単にアップロードできます。アップロードされたファイルを活用して、さまざまな操作を実現することが可能です。このスクリプトを基に、トーク Bot の機能をさらに強化してみてください！