LoginSignup
2
0

More than 1 year has passed since last update.

LINEWORKSでaxiosを使って通信

Posted at

この記事はLINEWORKS Advent Calendar 2021の16日目となります。

はじめに

request という npm のパッケージが非推奨となっており、新しいパッケージに移行するため axios を導入しました。
意外とaxiosを使っての記事が少なかった?っぽいので書きました。
合わせて簡単にですが request からの書き換えについても触れます。

メッセージの送信

コードはこんな感じになります

send.js
const body = {
  accountId: 'アカウントID',
  content: {
    type: 'text',
    text: 'メッセージ'
  }
};
const options = {
  url: 'https://apis.worksmobile.com/r/{API ID}/message/v1/bot/{botNo}/message/push',
  method: 'POST',
  headers: {
    consumerKey: consumerKey,
    Authorization: authorization,
    'Content-type': 'application/json'
  },
  body: JSON.stringify(body)
};
axios
  .request(options)
  .then((res) => {
    if (response.status < 200 || response.status >= 300) {
      throw res.data;
    } else {
      console.log('success');
      console.log(res.data);
    }
  })
  .catch((e) => {
     console.log('failed');
     console.log(e);
  });

大まかな request からの変更点は以下になると思います。

  • リクエストボディのキーが body から data に
  • コールバックから Promise に
  • レスポンスの引数が一つに

コンテンツのアップロード

send.js
const FormData = require('form-data');
const fs = require('fs-extra');
formData.append('resourceName', fs.readFileSync(filePath), {
  filename: filename,
  contentType: contentType
};
const options = {
  url: 'https://storage.worksmobile.com/openapi/message/upload.api',
  method: 'POST',
  headers: {
    consumerKey: consumerKey,
    Authorization: authorization,
    'x-works-apiid': apiId,
    ...formData.getHeaders()
  },
  data: formData.getBuffer()
};
axios
  .request(options)
  .then((res) => {
    if (response.status < 200 || response.status >= 300) {
      throw res.data;
    } else {
      console.log('success');
      console.log(res.data, res['x-works-resources-id']);
    }
  })
  .catch((e) => {
     console.log('failed');
     console.log(e);
  });

request の場合では、options のキーを formData とすることで form-data 形式が使えましたが、axios だとその機能はないため、form-data を使うのが無難です。
また、ヘッダーも良い感じに処理はしてくれないので、自分で getHeaders() をしてヘッダーを追加する必要もあります。
またファイルを buffer ではなく stream で処理する場合は、LINEWORKS ではそのままだと StreamLength を正しく認識してくれないので、Content-Lengthを正しく設定してあげる必要があると思います。

2
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
2
0