スプレッドシートのリストからランダムで選んでSlackに投稿する積ん読BOT


共有の積ん読リストから1冊ピックアップしてSlackに投げる、積ん読BOTを作る!

スプレッドシートにメモした積ん読リストの中から、週に一度、一冊ピックアップして情報を投げるアプリを作成しました。

Slackに投げることで、チーム内で感想を言い合うなどコミュニケーションの活性化も狙えます。

1. スプレッドシートを作る

今回は、下記のような構造のデータを作成しました。
1列目: タイトル
2列目: 著者
3列目: 概要
4列目: 読むポイント
5列目: AmazonのURL

※行: 三 、列: |||

2. SlackのIncoming Web hookでBOTを作成

Slack botを作成して、チャンネルに招待し、Web hook URLを控えてください。
やり方は、GoogleフォームとSlackとメールをGASで連携する【後編 フォームで入力された内容をIncoming Web Hookを使ってSlackで通知する】を参考にしてください。

3. GASを書く

GAS
function doPost() {

  var sheet = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName('タブ名');
  var data = sheet.getDataRange().getValues(); //スプレッドシートのオブジェクトからデータを配列で取得します。
  var pickedNum = Math.floor(Math.random() * Math.floor(data.length));

  var text = "*今週のおすすめ図書は「" +data[pickedNum][0] +'」!! *\n'+
    "■著者: "+ data[pickedNum][1] + "\n" +
    "■概要: \n"+ data[pickedNum][2] + "\n" +
    "■読むポイント: \n"+ data[pickedNum][3] + "\n" +
    "■Amazonリンク: \n"+ data[pickedNum][4] + "\n";

  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: '{"text":"'+text+'"}'
  };

  UrlFetchApp.fetch("YOUR WEB HOOK URL", options);

}

変更する場所

  • スプレッドシートのID: スプレッドシートのURLに含まれています。 https://docs.google.com/spreadsheets/d/【ここの数字とアルファベットの羅列がID】 /edit#gid=0
  • タブ名: タブの名前を入れる
  • YOUR WEB HOOK URL: 「2. SlackのIncoming Web hookでBOTを作成」で控えたURLを入れる

許可をする

一度再生アイコンを押し、アプリを許可してください。
これで、Salckに通知が飛べば成功です!

補足情報

getDataRange().getValues()について

getDataRange().getValues()は、配列でデータをまるっと取得します。

たとえばこのようなスプレッドシートがあった場合

var data = sheet.getDataRange().getValues();

data の中身はこのようになります。

data
[
[タイトル1,著者1,概要1],
[タイトル2,著者2,概要2],
[タイトル3,著者3,概要3],
]

そのため、data[行][列]で、特定のセルのデータを取得できます。

5. トリガーを作成

イベントのソースを時間主導型にして、発火させたい日時を指定してください。
今回は、週に1度お知らせして欲しいため、週ベースのタイマー/水曜日/9:00-10:00を選択しています。

完成!

これで、トリガーがきちんと動作すれば成功となります!