1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API Lab for LINE WORKSAdvent Calendar 2024

Day 5

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

Last updated at Posted at 2024-12-04

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

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

以下の URL で Google Colab を使って簡単に試せます。
Google Colab で試す

必要な準備

  1. LINE WORKS Developer Console での設定

    • Bot を作成し、Bot ID を取得します。
  2. Access Token の発行

    • LINE WORKS API を使用するためのアクセストークンを取得します。
  3. アップロードするファイルの準備

    • アップロードしたいファイル(例: example.png)を用意します。

スクリプト

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

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) が使用されます。

レスポンス例

成功時:

{
  "fileId": "jp1.1733205053418691464.1733291453.1.3725434.0.0.0",
  "fileName": "example.png",
  "fileSize": 144812
}

失敗時

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

例: 認証エラー

ファイルのアップロードに失敗しました: 401
{
    "code": "UNAUTHORIZED",
    "description": "Authentication failed."
}

原因:

  • ACCESS_TOKEN が無効または期限切れです。

対処法:

  • 正しいアクセストークンを取得して設定します。

例: ファイル名エラー

ファイルのアップロードに失敗しました: 400
{
    "code": "INVALID_PARAMETER",
    "description": "File name is invalid."
}

原因:

  • ファイル名に特殊文字(例: /, ?, * など)が含まれている。
  • ファイル名が長すぎる、または空白のみになっている。

対処法:

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

例: アップロード URL の期限切れ

ファイルのアップロードに失敗しました: 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 の機能をさらに強化してみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?