Bot

BOTのファイルアップロードAPI

河井翔平_6ae873

2023.12.27既読 757

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

    0
  • 업데이트 된 답글입니다.

    ECONNRESETエラーは、接続が相手側によって突然閉じられたことを示しています。これは、サーバー側で何らかの問題が発生しているか、リクエストがサーバーの期待する形式でない場合に起こり得ます。以下に、ファイルアップロードとメッセージ送信を行うための基本的なaxiosを使用したコード例を示します。

    まず、ファイルをアップロードするための関数を作成します。ファイルを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

    0
前の投稿 リマインダーbot
次の投稿ユーザーリッチメニューの強制更新
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。