2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

chatterからSlackへ転送する(後編)

Last updated at Posted at 2020-05-09

chatterで入力したメッセージをslackへ転送する処理を紹介します
この章ではSlackの転送時にメンションをつけたり複数のチャンネルへ転送する方法を紹介しています

前編ではchatterの投稿文をあらかじめ指定したSlackの宛先に転送する方法を紹介しています
https://qiita.com/SyogoSuganoya/items/4bf1b7991a7445aa351f

イメージ

image.png

概要

前編では「@」でメンションをつけてchatter投稿をしても、Slackではメンション通知がされず
プレーンテキストのまま出力されます


今回は「@」でSlackでもメンション通知の転送がされる処理を追加します

送信先チャンネルについても前編ではプロセスビルダーで指定した宛先へ固定して転送されますが、
同様に「@」で宛先チャンネルを指定できるようにします

実装方法

スプレッドシート

「slackID」、「宛先チャンネル一覧」のシートを用意します

「slackID」では以下のような表を準備します

氏名 ユーザID
@山田太郎 ???????
@田中次郎 ???????
@佐藤ゆうこ ???????

氏名をキーワードにしてメンバへの通知を行う管理テーブルです
SlackではユーザIDを基にメンション通知を行っています

ユーザIDの調べ方についてはこちら↓
Slackワークスペースに属するユーザIDを調べる方法・手順を解説
https://auto-worker.com/blog/?p=27

「宛先チャンネル一覧」では以下のような表を準備します

キーワード チャンネル名
@general #general
@raodom #random
@営業部 #営業部

キーワードに反応して該当のチャンネル先へメッセージを送信します


ちなみに以下のようにキーワードを複数指定しておいて可用性を高めることも可能です。

氏名 ユーザID
@山田太郎 001
@田中次郎 002
@佐藤ゆうこ 003
@山ちゃん 001

「@山田太郎」でも「@山ちゃん」でも山田太郎さんへ通知が飛びます

キーワード チャンネル名
@general #general
@raodom #random
@営業部 #営業部
@全体 #general

@general」でも「@全体」でも#generalへ通知が飛びます

GAS

chatter投稿メッセージをメンション通知が飛ぶように整形します
GASにて以下のコードをコピペします

chatter2slack.gs
/*
* post送信された時の挙動
*/
function doPost(e) {
  
  // chatterからの投稿本文
  var text = e.parameter.text;
  var message = text.replace('chatterから送信されました','');
  
  message = changeName2SlackId(message);
  changeChannelName(message);
}

/*
* 含まれたメンションをslackIDへ置換する
* 
* @param {string} msg - 送信メッセージ
*/
function changeName2SlackId(msg) {
  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var idSheet = spreadsheet.getSheetByName('slackID');
  var idVal = idSheet.getDataRange().getValues();
  
  msg = msg.replace('','@');
  
  for(var i = 0; i < idVal.length; i ++) {
    
    if(msg.indexOf(idVal[i][0]) > -1) {
      
      msg = msg.replace(idVal[i][0], '<@' + idVal[i][1] + '>');
    }
  }
  return msg;
}

/*
* 指定したチャンネルへslack送信を行う
* 
* @param {string} msg - 送信メッセージ
*/
function changeChannelName(msg) {
  
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var channelSheet = spreadsheet.getSheetByName('宛先チャンネル一覧');
  var channelVal = channelSheet.getDataRange().getValues();
  
  var isSend = false;
  
  for(var i = 0; i < channelVal.length; i ++) {
    
    if(msg.indexOf(channelVal[i][0]) > -1) {
      
      sendSlack('ボット名','female_fairy',msg,channelVal[i][1]);
      isSend = true;
    }
  }
  
  // 宛先チャンネルが見つからない場合は、「general」へ送信する

  if(!isSend) {
    sendSlack('ボット名','female_fairy',msg,'#general');
  }
  return msg;
}

「sendSlack」は別の記事にて記載があります

【Slack】SlackでBotを開発する【GAS】
https://qiita.com/SyogoSuganoya/items/bb6a4f5256c0e944a0f5


image.png
「公開」タブから「ウェブアプリケーションとして導入」をクリックします


image.png

Current web app URL:をコピーします
Who has access to the app:は「Anyone,even anonymous」を選択します


コードの修正を行った場合、適宜「更新」ボタンをクリックします

プロセスビルダー

チャンネルを一時チャンネルへ変更します
Slack messageの文頭にキーワードを設定します
今回のキーワードは「chatterから送信されました」に設定します

Slack

使用するワークスペースとチャンネルを用意します

転送メッセージを受信するため、「Outgoing Webhook」をインストールします
SlackのサイドバーのAppから「Outgoing Webhook」を検索、インストールを実行します

Outgoing Webhookの設定をします
image.png
Slackに追加をクリックします


image.png
Outgoing Webhookインテグレーションの追加をクリックします


チャンネルはプロセスビルダーで設定したチャンネル名を設定します
引き金となる言葉もプロセスビルダーで設定したキーワードを設定します
URLは「GAS」でコピーしたURLをペーストします

動作確認

chatterでスプレッドシートで設定したキーワードを含む文章を投稿します

2
0
0

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
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?