JavaScript
gas
Slack
kibela

kibelaとSlackの連携にGASを噛ませてメンション化する方法

通知をメンション化する

  • kibelaとSlackを連携させている(させたい)人向け
  • メンションが付いていると自分に必要な情報がピックアップしやすくなるのでおすすめです
  • 24時間稼働でも無料です
  • GAS使ったことない人、非エンジニアでも出来るように書いてます。

使うもの

GAS
google スプレッドシート(userIdの管理)

流れ

kibelaの発信webhook→GAS→Slackの着信webhook

コード

https://github.com/mur71mur/kibela_slack_mention

var postUrl = "{your slack incoming webhook url}";
var spreadSheetId = "{your spreadSheetId}";

// kibalaからのpostを受け取るメインfunction
function doPost(e){
  var body = JSON.parse(e.parameter.payload);
  var converted_body = get_mention(body); //メンション化
  e.parameter.payload = JSON.stringify(converted_body);
  postSlack(e);
}

function postSlack(e){
  var payload = JSON.parse(e.parameter.payload);
  payload['channel'] = e.parameter.group; //このGASの実行urlの最後尾に?group=slackChannelIdをつける

  var options = {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : JSON.stringify(payload)
  };
  UrlFetchApp.fetch(postUrl, options);

}

// メンバーシートを配列で取得
function getSlackMemberArray() {
  var memberSheet = SpreadsheetApp.openById(spreadSheetId);
  var arr = memberSheet.getSheetValues(1, 1, memberSheet.getLastRow(), memberSheet.getLastColumn());
  return arr;
}

// jsonの中身を修正
function get_mention(body){
  var slackMemberArray = getSlackMemberArray();
  for(var i in slackMemberArray){
    if(slackMemberArray[i][1]==""){

    }else{
      var kibelaId = new RegExp('@'+slackMemberArray[i][1], 'g');
      body.attachments[0].text = body.attachments[0].text.replace(kibelaId, '<@'+slackMemberArray[i][0]+'> ');
    }
  }
  body.username = "your bot name";
  body.icon_url = "your bot icon url";
  return body;
}

1,2,43,44行目を変えてください。
44行目はコメントアウトしても大丈夫です。うちの会社ではアイドルが通知してくれてます笑

公開→ウェブアプリケーションとして導入
を忘れずに。

spread sheet

A列をslackのid,B列をkibelaのidとしてください。