Help us understand the problem. What is going on with this article?

Google Apps Scriptを使ってSlackBotを作ってみた。

More than 1 year has passed since last update.

はじめに

slackで特定の文字に反応してくれるBOTをGoogle Apps Script( GAS )で作ります。

=>ランチ候補をpostしてくれるslackbotを、Google Apps Scriptで作る

こういうのが作りたい

成果物はこちら、

sample.gif

仕様

  • ルーレットと送信すると登録した名前から一つslackに投稿される
  • スプレッドシートに名前を登録しておく
  • GAS上でスプレッドシートの情報を読み込み、ランダムに一件取得

目次

  1. Google スプレッドシートにデータ入力
  2. Incoming WebHooksの設定
  3. Google Apps Scriptにコード書く + デプロイ
  4. Outgoing WebHooksの設定

1. Google スプレッドシートにデータ入力

まずは、Google スプレッドシートにアクセスします。

新しいスプレッドシートを作成 => 空白 を選択して新規プロジェクトを立ち上げましょう。

スクリーンショット_2019-11-19_10_09_43.png

そして、スプレッドシート内に次のように記述してください。

無題のスプレッドシート_-_Google_スプレッドシート.png

また、このスプレッドシートのURLは後で使うのでコピーして控えておいてください。

2. Incoming WebHooksの設定

まずは、Incoming WebHooksにアクセスします。

Incoming_Webhook___ゲーム部門_Slack.png

① 自分のワークスペースにログイン
② 投稿したいチャンネルを選択
③ Incoming Webhook インテグレーションの追加

次に、Webhook URLをコピーして控えておきましょう。

Cursor_と_Incoming_Webhook___Slack_App_ディレクトリ.png

そして「設定を保存する」を押してください。

3. Google Apps Scriptにコード書く + デプロイ

いよいよコードを書いていきます。
まずは Google Apps Scriptにアクセスしてください。

「新しいプロジェクト」 を押して新規プロジェクトを立ち上げます。

Cursor_と_自分のプロジェクト_-_Apps_Script.png

コード.gsに以下を記述してください。
( 先ほどコピーしておいたスプレッドシートのURLとWebhook URLを使用します。 )

コード.gs
var SLACK_WEBHOOK = 'https://hooks.slack.com/services/***********/';  // Incomig Webhook URL
var SLACK_CHANNEL = '#*******'; // channel名
var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/**********';  // スプレッドシートURL
var EMOJI_ICON = ':question:'; // アイコン(slackのスタンプを使っているのでお好みで)
var BOT_NAME = 'ルーレットくん'; // BOTの名前

Array.prototype.random = function () {
    return this[Math.floor(Math.random() * this.length)]
}

function postMessage(message, hookPoint) {
  var payload = {
    "text": message,
    "icon_emoji": EMOJI_ICON,
    "username": BOT_NAME,
    "channel": SLACK_CHANNEL
  }
  var options = {
    "method" : "POST",
    "payload" : JSON.stringify(payload),
    "headers": {
      "Content-type": "application/json",
    }
  }
  var response = UrlFetchApp.fetch(hookPoint, options);

  if (response.getResponseCode() == 200) {
    return response;
  }
  return false;
}

function main() {  

  var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var sheet = spreadsheet.getSheets()[0];


  var messageAll = sheet.getRange(2, 1, sheet.getLastRow()-1, 1).getValues(); // getLastRow()は空白の最終行もとって来てしまう
  var messageList = [];
  var message = "";

  for (var i in messageAll) {
     messageList.push(messageAll[i][0]); //textだけ格納
  }
  message += messageList.random();

  message += "、キミに決めた!\n\n\n候補を編集する → <" + SPREADSHEET_URL + "|:memo:>";

  postMessage(message, SLACK_WEBHOOK);
}


function doPost(e) {
  if(e.parameter.user_id == "USLACKBOT"){
    return;
  }

// 今回はGAS上でキーワードを設定しているのでOutgoing WebHooksでトリガーの設定は不要 
  if(e.parameter.text.match(/ルーレット/)){
    main();
  }
}

SlackApp_と_「」を編集_-_Qiita-2.png

書き終わったら「公開」ボタンを押してデプロイします。

「公開」 => 「WEBアプリケーションとして導入...」を押してください。

無題のプロジェクト.png

Project versionは「New」です。
Who has access to the appは「Anyone, even anonymous」に設定してください。

設定が終わったら「deploy」を押してください。
( この時ユーザー認証についてGoogleから聞かれる場合がありますが、「許可を確認」を押してください。 )

無題のプロジェクト-2.png

この、Current web app URLは後で使うのでコピーして控えておいてください。

4. Outgoing WebHooksの設定

まずは、Outgoing WebHooksにアクセスしてください。

Cursor_と_Outgoing_Webhook___Slack_App_ディレクトリ.png

チャンネル欄はお好みで。
引き金となる言葉は空欄、URLには先ほどコピーしたCurrent web app URLをペーストしてください。

設定が済んだので「設定を保存する」を押してください。

最後に

以上でSlackBotの作成が完了です。

ルーレットと送信してみてください。

無事にBotからメッセージが帰って来ましたか?

参考にしたサイト

shunyaendoh
セブ島にてエンジニア留学+語学留学をしている大学生です。 勉強していて躓いた箇所や課題をまとめています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away