BOTのファイルアップロードAPI
BOTのコンテンツアップロードAPIを利用して、ファイルのアップロード、最終的にはメッセージの送信がしたいと考えています。
①アップロードURLの取得
②ファイルのアップロード
③メッセージ送信
上記の②がうまくいかず、以下エラーが起きています。
code: 'ECONNRESET'
node.js(express)で開発を行っており、
ファイルの読み出しを行った後、axiosを利用してPostリクエストを行っています。
【コード例】
// API実行用データ準備
const headers = {
Authorization: <アクセストークン(権限はuser,bot,bot.message,group)>,
};
let getUploadURL = "https://www.worksapis.com/v1.0/bots/${<作成したBOTのID>}/attachments";
let data = { "fileName": "sample.xlsx"}
let config = { headers: headers }
let fileId = "";
let uploadURL = "";
let formData = new FormData();
await axios.post(getUploadURL, data, config).then(res => {
// fileIdの格納
fileId = res.data.fileId;
uploadURL = res.data.uploadUrl;
let fileData = fs.createReadStream(<読み込み対象のファイルパス>);
formData.append("file", fileData);
});
//ファイルアップロード
await axios.post(uploadURL, formData, { headers: { ...formData.getHeaders(), Authorization: <アクセストークン(権限はuser,bot,bot.message,group)} })
投稿に新しいコメントが追加されましたら通知を送信します。
コメント2
업데이트 된 답글입니다.
河井翔平_6ae873 投稿者
もしかすると送信しているデータが何か誤っている、もしくは不足しているのでは、と考えています。
継続して調査中です。
2023.12.28
업데이트 된 답글입니다.
developers master
まず、ファイルをアップロードするための関数を作成します。ファイルをmultipart/form-data形式で送信する必要があるため、FormDataを使用してリクエストボディを構築します。
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
async function uploadFile(botId, channelId, filePath, accessToken) {
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
try {
const response = await axios.post(`https://www.worksapis.com/v1.0/bots/${botId}/channels/${channelId}/contents/upload`, formData, {
headers: {
...formData.getHeaders(),
'Authorization': `Bearer ${accessToken}`
}
});
return response.data;
} catch (error) {
console.error('Error uploading file:', error);
throw error;
}
}
次に、アップロードしたファイルを含むメッセージを送信する関数を作成します。
async function sendMessage(botId, channelId, contentId, accessToken) {
const messageData = {
content: {
type: 'file',
fileId: contentId
}
};
try {
const response = await axios.post(`https://www.worksapis.com/v1.0/bots/${botId}/channels/${channelId}/messages`, messageData, {
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
});
return response.data;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}
これらの関数を使用する前に、適切なaccessTokenを取得し、botId、channelId、およびファイルのパスを指定する必要があります。また、エラーハンドリングを適切に行い、エラーの原因を特定するためのログを出力することが重要です。
問題が解決しない場合は、以下の点を確認してください:
アクセストークンが有効であることを確認してください。
ファイルパスが正しいこと、およびファイルが存在することを確認してください。
リクエストのタイムアウト値が適切であることを確認してください。大きなファイルをアップロードする場合は、タイムアウト値を増やす必要があるかもしれません。
ネットワーク接続が安定していることを確認してください。
これらの基本的なチェックに加えて、サーバー側のログを確認することで、問題の原因を特定する手助けになる場合があります。
2023.12.29
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。