search
LoginSignup
0

More than 1 year has passed since last update.

みらい翻訳 Advent Calendar 2020 Day 15

Organization

良いことがあったら花火を上げるスラックのスラッシュコマンドを作った話

背景

みらい翻訳ではコミュニケーションツールのslackを使っており、様々なbotが動いています。
私も商用サービスの契約数やDAUの情報を投稿するbotを作成して運用しています。
このbotは毎日の契約数を淡々と投稿するだけで、あまり面白味もないので、
大きな契約など嬉しいことがあった時に、速報として花火が打ち上げある機能があると良い
と思ったので、それを実装しました!

実装までの段階

  1. slackbotを導入(slashコマンドを使えるように)
  2. Google Apps Scriptと連携
  3. Google Apps Scriptの内容を花火を打ち上げるものに変更(今回はこちらを説明)

1., 2.については
https://qiita.com/zama_8722/items/5893d968f120dad90f11
こちらの通りに実装すれば問題ないと思います。

3. Google Apps Scriptの内容を花火を打ち上げるものに変更

まずは花火の画像を用意します。
今回はPAKUTASOの素材を使わせていただきます。
GASに素材URLの画像を書き込むのはダサいので、google spread sheetに素材のURLを入れていおいて、その中からランダムに選ぶようにします。
スプレッドシートの中身は以下のようにしておきます。
mojikyo45_640-2.gif

GASの中身を以下のようにすることでうまく動きます。

function doPost(e) {
  // スプレッドシートからの情報取得
  var url = "https://docs.google.com/spreadsheets/d/************/edit";
  var spreadsheet = SpreadsheetApp.openByUrl(url);
  var sheets = spreadsheet.getSheets();
  var sheet = sheets[0]; //シート複数ある場合には変更する必要があります
  var url_num = sheet.getLastRow();
  var row_num = Math.floor(Math.random()*(url_num))+1; //ランダムで選びます
  var sheetdata = sheet.getSheetValues(row_num, 1, row_num, 1)[0][0]; //A列に入っているURLのうちをrow_num行のものを読み込み

  // slack投稿する内容
  post_json = {
    "response_type":'in_channel',
    "text": "<@"+e["parameters"]["user_id"]+">" + "から嬉しいお知らせがあるようです!",
    "attachments": [{
        "image_url": sheetdata
     }]
  };

  out = ContentService.createTextOutput();
  out.setMimeType(ContentService.MimeType.JSON);
  out.setContent(JSON.stringify(post_json));
  return out
}

jsonの中身で"response_type":"in_channel"としておかないと、スラッシュコマンドを打った人にしか見えないので注意が必要です。1

また、最後の4行もQiita内に良い解説2がありますのでご参照ください。

これによって見事に花火が上がるようになりました!

mojikyo45_640-2.gif

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
What you can do with signing up
0