ぼまぼま
投稿
コメント
【自己解決】BotでPDF送信時、アップロードURLで401になる件の原因 同様の現象で詰まる方が出ると思われるため、解決内容を共有します。 ■ 症状 Bot から PDF ファイルを送信する処理で、以下の手順を実装。 POST /bots/{botId}/attachments で uploadUrl と fileId を取得 → 成功 (200) 取得した uploadUrl に対してファイルをアップロード → 401 Unauthorized fileId を使ってメッセージ送信 → content.fileId is invalid トークン取得、Scope(bot / bot.message / file)も正常で、fileId も正しく返ってきているのに、ストレージへのアップロードだけが 必ず401 になる状態でした。 ■ 原因 ストレージサーバー(apis-storage.worksmobile.com)へのアップロード時のリクエスト形式が仕様通りになっていなかったことが原因でした。 重要ポイントは以下の2つです。 Authorization: Bearer {token} を付ける multipart/form-data 形式(requests の files=)でアップロードする PUT や binary 送信、Content-Type: application/pdf では 401になります。 ■ 正しいアップロード方法(Python例) def upload_binary(token, upload_url): headers = {"Authorization": f"Bearer {token}"} with open(PDF_PATH, "rb") as f: files = { 'file': (os.path.basename(PDF_PATH), f, 'application/pdf') } res = requests.post(upload_url, headers=headers, files=files) print(res.status_code, res.text) この形式にしたところ、 step2 upload: 200 step3 send: 201 となり、正常にファイル送信できました。 ■ 結論(重要) uploadUrl へのアップロードは Authorizationヘッダー付き + multipart/form-data でなければならない。 ここがドキュメントから非常に読み取りにくく、多くの方がハマるポイントだと思われます。 同様の症状の方の参考になれば幸いです。
Bot 2026.02.10