LoginSignup
1
2

More than 5 years have passed since last update.

GASを使ってSlackと会話する

Last updated at Posted at 2019-04-12

GoogleAppsScript(以降GAS)を使ってSlackと会話するアプリケーションを作ってみます。

1. 事前準備

2. App Credentialsの取得

  • 以下のリンクをクリックする。(ログインしていない場合はログインする)

  https://api.slack.com/apps

  • 「Incoming Webhooks」を作成したSlackアプリを開き、Basic Informationにある「Verification Token」を確認する。

3. スクリプトの作成

  • Google Driveにログインして、「Google Apps Script」ファイルを新規作成する。

 ※右クリック→「その他」→「Google Apps Script」より選択できます。(存在しない場合はアプリの追加より追加してください)

  • 以下のようなスクリプトを書いて保存する。(プロジェクト名は任意の名称でかまいません)

VERIFICATION_TOKEN変数には「Verification Token」、INCOMING_WEBHOOKS_URL変数には「Incoming Webhooks URL」を設定する。

var VERIFICATION_TOKEN = "ここにVerification Tokenを設定する";
var INCOMING_WEBHOOKS_URL = "ここにIncoming Webhooks URLを設定する";

function doPost(e) {
  var returnData = {};
  var jsonString = e.postData.getDataAsString();
  var jsonObj = JSON.parse(jsonString);
  if ('type' in jsonObj) {
    if (VERIFICATION_TOKEN != jsonObj['token'] ) {
      return null;
    }   
    if (jsonObj['type'] == 'event_callback') { 
      if (jsonObj['event']['type'] == "message" || jsonObj['event']['channel_type'] == "channel") {
        var returnText = getReturnText_(jsonObj['event']['text']);
        send_(returnText);
      }
    } else if (jsonObj['type'] == 'url_verification') {
      var challenge = jsonObj['challenge'];
      returnData = {
        "challenge": challenge
      };
    }
  }
  var returnDataString = JSON.stringify(returnData);  
  var returnOutput = ContentService.createTextOutput(returnDataString);
  returnOutput.setMimeType(ContentService.MimeType.JSON);
  return returnOutput;
}

function getReturnText_(text) {  
  if (text == "おは") {
    return "おはようございます";
  } else if (text == "こん") {
    return "こんにちわ";
  } else if (text == "ばん") {
    return "こんばんわ";
  } else if (text == "あなたの職種は") {
    return "エンジニアです";
  }
  return ""; 
}

function send_(text) {
  if (text == "") {
    return;
  }
  var payload = {"text": text};
  var options = {
    "method" : "POST",
    "contentType": "application/json",
    "payload" : JSON.stringify(payload),
    "muteHttpExceptions" : false
  };
  try {
    UrlFetchApp.fetch(INCOMING_WEBHOOKS_URL, options);
  } catch (e) {
  }
}

[Channelにメッセージ送信時、GAS側で受け取るJSON]
https://api.slack.com/events/message.channels

  • メニューバーの「実行」→「関数を実行」→「doPost」を選択する。

  • 「承認が必要です」ダイアログが表示されたら「許可を確認」ボタンをクリックする。

  • アカウントの選択で、対象のアカウントを選択し、スコープの許可を行う。

※「このアプリは確認されていません」のダイアログが表示された場合は、「詳細」のリンクをクリックして、「・・・(安全ではないページ)に移動」リンクをクリックする。(自己責任で!)

  • 許可ボタンクリック後にスクリプトが実行され、スクリプト実行エラーになりますが問題ありません。

  • メニューバーの「ファイル」→「版を管理」をクリックし、版を管理ダイアログを表示する。

  • 「新しいバージョンを保存」をクリックし、バージョン1の行が追加されることを確認する。

  • メニューバーの「公開」→「ウェブアプリケーションとして導入」をクリックする。

  • 「プロジェクトバージョン」には新しい番号のバージョンを、「次のユーザーとしてアプリケーションを実行」には「自分」を、「アプリケーションにアクセスできるユーザー」には「全員(匿名ユーザーを含む)」を選択し、「導入」ボタンをクリックする。

  • 「ウェブアプリケーションのURL」が発行されます。

4. Event Subscriptionsでの設定

  • ブラウザに戻り「Incoming Webhooks」を作成したSlackアプリの設定を開く。

  • サイドメニューより「Event Subscriptions」をクリックする。

  • 「Enable Events」をONに設定する。

  • 「Request URL」に「3. GASを使って会話スクリプトの作成」で生成した「ウェブアプリケ−ションURL」を設定する。

 ※Verifiedと表示されれば認証成功

  • 「Subscribe to Workspace Events」には、「message.channels」のみを選択する。

  • 「Save Change」ボタンをクリックする。

  • 画面上部にパーミッション変更に伴うリンクが表示されるので、「click here」をクリックして会話したいチャンネルを選択の上、パーミッションの許可を行う。

5. Slackと会話してみる。

  • メッセージを送信してみる。

04_2.png

6. 会話スクリプトを変更したい場合

  • 工事中(
1
2
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
1
2