読者です 読者をやめる 読者になる 読者になる

技術のメモ帳

気が向いたときに書いてます

[GAS]Slackに任意のメッセージをPOSTする

SlackへのPostは、SlackAppというライブラリを使うと、非常に簡単に実装できます。

スケジュールに登録したり、メッセージをSpreadSheetで管理すれば、立派なBotが作れます。

アクセストークンの取得と設定

Slackにリクエストするためのトークンを取得します。

トークンの取得後、スクリプトエディタの[ファイル]→[プロジェクトのプロパティ]→[スクリプトのプロパティ]に、SLACK_ACCESS_TOKENとして、トークンを保存します。

ライブラリの登録

[リソース]→[ライブラリ]で、M3W5Ut3Q39AaIwLquryEPMwV62A3znfOOの文字列のライブラリを登録します。バージョンは、2015年9月現在で、22を選択しました。

投稿用関数の設置

下記関数を設置して実行すれば、任意のメッセージが投稿されます。

function postMessageSlack() {
  var token    = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'),
      slackApp = SlackApp.create(token),
      props    = {
        channelId: "***CHANNEL_ID***",
        userName:  "***USER_NAME***",
        message:   "Hello, World"
      };
  slackApp.postMessage(props.channelId, props.message, { username: props.userName });
}

SpreadSheetからランダムでメッセージを取得して投稿

Slack BotというSpreadSheetファイルを作成し、一列目にメッセージを入力していきます。

入力されたメッセージをランダムで選択して投稿します。

postRandomMessageSlack関数を実行すると、動作確認できます。

function postRandomMessageSlack() {
  var message = selectMessageBySpreadSheet();
  postMessageSlack(message);
}

function selectMessageBySpreadSheet() {
  var ss      = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/****ID****/edit'),
      sheets  = ss.getSheets(),
      sheet   = sheets[0],
      data    = sheet.getSheetValues(1, 1, sheet.getLastRow(), 1),
      message = data[Math.floor( Math.random() * data.length )][0];
  return message;
}

function postMessageSlack(message) {
  var token    = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'),
      slackApp = SlackApp.create(token),
      props    = {
        channelId: "***CHANNEL_ID***",
        userName:  "***USER_NAME***"
      };
  slackApp.postMessage(props.channelId, message, { username: props.userName });
}

実行すると、次のように表示されますので、後はアイコンなり、メッセージを工夫するなり、スケジュールをかますなどして、遊んでみてください。

参考リンク

GoogleAppsScript - Slack BotをGASでいい感じで書くためのライブラリを作った - Qiita