はじめに
こんにちは、今年は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}
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形式に変更してみました!
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;
}
試しにリクエストを送った結果
実行プログラム
function testChannelsListPost() {
const token = PropertiesService.getScriptProperties().getProperty("slackApiToken");
const options = { "limit" : 5 };
let channels = newSlackApi(token, "conversations.list", options);
console.log(channels)
}
よし無事に返ってきて安心しました〜!
終わりに
GASでの新しいRequest方法について、今回まとめてみました。
公式ドキュメントが丁寧ですごく実装をしやすかったです!
移行や新しいSlackアクセストークンを利用する際に参考にしていただけると幸いです!!