6
5

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 1 year has passed since last update.

Google Apps Sciprt(GAS)でSlackのchallenge認証を処理する

Last updated at Posted at 2020-08-23

先日社内Slack上のイベントを処理して業務改善を行うボットをSlackAppで作成しました。
簡単な処理のためGASと連携させて処理しましたが、たまにしか行わずchallenge認証のやり方を毎回忘れてしまうので備忘録として残します。

challenge認証とは

Event SubscriptionなどでSlack上のイベントをトリガーにして何かしら処理する場合、処理をリクエストするURLを事前に認証しておく必要があります。
Slackから以下のようなパラメータでPostリクエストが飛んでくるため、challengeパラメータをレスポンスで返してあげる必要があります。

{
    "token": "xxxxxxxxxxxxx",
    "challenge": "yyyyyyyyyyyyyyyyyyyyyyy",
    "type": "url_verification"
}

challenge認証が正式な呼び方なのかは不明。

GASでの処理

最終的に以下のような形でchallengeパラメータを返してあげます。

function doPost(e) {
  const params = JSON.parse(e.postData.getDataAsString());

  if (params.type === 'url_verification') {
    return ContentService.createTextOutput(params.challenge);
  } 
}

外部からのリクエストを処理するためウェブアプリケーションとしてGASを公開しますが、セキュリティの問題上、文字列をそのままreturnすることはできないようです。
GAS ウェブアプリケーションの条件

//これはエラーになります
return params.challenge;

なのでContentServiceクラスのcreateTextOutputメソッドを使ってTextOutputクラスのオブジェクトに変換してから返してやる必要があります。
TextOutputクラス

return ContentService.createTextOutput(params.challenge);
6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?