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

技術のメモ帳

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

[GAS]PivotalTrackerのアクティビティをSlackに通知する

Google Apps Script

今回は、PivotalTrackerのActivity WebHookを受けて、(Bot経由で)Slackにアクティビティを送信して通知するWebアプリケーションを、Google Apps Scriptで書いてみます。

実装手順としては次の通りです。

  1. 新規gsファイルを作成
  2. doPost()関数を作成
  3. Pivotal TrackerからPOSTされるデータを加工する
  4. SlackにPOSTする(ライブラリを使用)
  5. 処理結果をテキストで返す
  6. Projectの[Integration]→[Activity Web Hook]に公開アプリケーションのURLを入力

まずは、SlackAppライブラリを導入します。GASからSlackにPOSTする方法の詳しい手順は、過去エントリを参考にしてください。

yoshiyuki-hirano.hatenablog.jp

なお、送信されるPostDataの仕様は、PivotalTrackerのAPIドキュメントに記載されています。

実装したコード

JSONが送られてくるので、それをパースしてSlackに渡すだけのシンプルな処理です。

function doPost(e) {
  PivotalTrackerWebHookHandler(e, function(err, result) {
    try {
      if (err) throw err;
      var slack = SlackApp.create('xoxb-9918463123-nIYXVA3jxk8hrZGUcsMtsMoc'),
          props = {
            channelId: 'C0ATXJ1AM',
            userName: 'gas',
            message: [
              "*[", result.project.name, "] ", result.primary_resources[0].name, "*\n",
              result.message, "\n",
              "https://www.pivotaltracker.com/story/show/", result.primary_resources[0].id
            ].join('')
          };
      slack.postMessage(props.channelId, props.message, { username: props.userName });
      return makeResponse('success');
    } catch(ex) {
      return makeResponse(ex.toString());
    }
  });
}

function PivotalTrackerWebHookHandler(e, callback) {
  try {
    if (!e.postData) throw new Error('Missing required postData.');
    var result = JSON.parse(e.postData.contents);
    callback(null, result);
  } catch(ex) {
    var result = { message: ex.toString() };
    callback(ex, result);
  }
}

function makeResponse(message) {
  var mimeType = ContentService.MimeType.TEXT;
  return ContentService.createTextOutput(message).setMimeType(mimeType);
}

動作確認

PivotalTrackerでStoryに変更が加えられると…

このようなテンプレで、Slackに通知が送信されました。

アクティビティ別にゴニョゴニョしたい場合も、処理を追加するなり、テンプレ毎に関数分けるなりすれば、簡単に実装可能です。

PivotalTrackerを利用して、ストーリーベースの開発を行っているのであれば、導入しても便利かもしれませんね。