3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SlackAdvent Calendar 2020

Day 9

Slackの新しいWebApiに対応したGasでのRequestに変更してみた

Last updated at Posted at 2020-12-08

はじめに

こんにちは、今年はSlack Advent Calendar 2020に挑戦させていただきました!
今回は、GasでのSlackの新しいWeb API requestsに対応したGasを作成しましたので、是非活用をしていただけると幸いです!!

Slack WebApi Request変更に関して

Slackより新しいWebApi Request変更に関しての内容を確認し自分でまとめてみました。

  • 2021年2月24日以降に、新しく作成されたSlackアプリは、新しいRequest方法で行う必要があり
  • 2021年2月24日より前に作成したトークンは、利用できるが、新しいRequest方法へ変更をすることを推奨
  • GET Requestを利用する場合は、headerのAuthorizationに付与してRequestを送ってね
  • POST Requestを利用する場合は、Request bodyに付与してRequestを送ってね

Requestの具体的な方法が丁寧に記載されていたので、早速変更を実施しました!

新しいGasRequestに関して

昨年、自分で作成したコードを使って変更を行っていきます。

変更が必要だったプログラム

昔のRequest方法は、RequestURLにクエリパラメーターを付与して、Requestを送っていました。
URL:https://slack.com/api/{SlackMethod}?token={xoxb- か xoxp}&{それぞれのSlackMethodのoption}

oldSlackApi.gs
function oldSlackApi(token, path, options) {
  if (!options) options = {};
  var url = "https://slack.com/api/" + path;
  var q = "?token=" + encodeURIComponent( token );
  for (var key in options) {
    q += "&" + encodeURIComponent( key ) + "=" + encodeURIComponent( options[ key ] );
  }
  url += q;
  var res = UrlFetchApp.fetch(url);
  var ret = JSON.parse(res.getContentText());
  if (ret.error) {
    throw "GET " + path + ": " + ret.error;
  }
  return ret;
}

今回はPOST形式に変更してみました!

newSlackApi.gs
function newSlackApi(token, slackMethod, options) {
  if (!options) options = {};
  let url = "https://slack.com/api/" + slackMethod;
  let params = "token=" + encodeURIComponent( token );
  for (var key in options) {
    params += "&" + encodeURIComponent( key ) + "=" + encodeURIComponent( options[ key ] );
  }
  const body = {
    "method" : "post",
    "payload" : params,
    "Content-type" : "application/x-www-form-urlencoded",
    "muteHttpExceptions": true
  };

  let response;
  try {
    response = UrlFetchApp.fetch(url, body);
  } catch(e) {
    // fetch失敗時の処理
    console.log("エラー内容:" + e);
    throw "fetch error";
  }
  let responseJson = JSON.parse(response.getContentText());
  if (responseJson.error) {
    throw "POST " + slackMethod + ": " + responseJson.error;
  }
  return responseJson;
}

試しにリクエストを送った結果

実行プログラム

testChannelsListPost.gs
function testChannelsListPost() {
  const token = PropertiesService.getScriptProperties().getProperty("slackApiToken");
  const options = { "limit" : 5 };
  let channels =  newSlackApi(token, "conversations.list", options);
  console.log(channels)
}

返ってきた結果
スクリーンショット 2020-12-06 20.05.11.png

よし無事に返ってきて安心しました〜!

終わりに

GASでの新しいRequest方法について、今回まとめてみました。
公式ドキュメントが丁寧ですごく実装をしやすかったです!
移行や新しいSlackアクセストークンを利用する際に参考にしていただけると幸いです!!

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?