こんにちは!内藤です!
寒暖差が激しくなっていますね。体調管理に気を付けたいです。
弊社では社内の蔵書管理にサスケWorksを使用しています。
参考:社内の蔵書管理にサスケWorksを使い始めました
蔵書管理としては非常に使いやすくなったのですが、書籍の登録後社内に周知する際は、登録した人が社内Slackに投げていました。
2024年3月にリリースされた、サスケWorksのオートメーション機能を使用して、この部分を自動化してやろう、というのが今回の趣旨です。
参考:新機能「オートメーション機能」をリリース!
全体像
下記の流れで機能を実現します。
- サスケWorksにレコードが新規登録されたタイミングで、Gmailにメールを送信する
- GmailアカウントでGASスクリプトを用意し、定期的にメールをチェックする
- メールが存在したら、本文からSlackに送信するメッセージを作成し、投稿する
Slack側の設定は別件で作成したアプリを使いまわしていますので、本記事では取り扱いません。
下記記事に詳しい手順が載っているので、参考にしてください。
【google-app-script】gasを利用してslackに投稿するbotを作る
サスケWorks側の設定
サスケWorksのアプリの右上のスパナマークをクリック
表示された設定画面で、機能一覧から「オートメーション機能」をオンにします
左側のメニューに「オートメーション設定」が表示されます
左メニューに表示された「オートメーション機能」をクリックして、オートメーション設定一覧画面を表示します
右上の「追加」をクリックして、オートメーション設定を追加します
オートメーション設定をしていきます
設定項目 | 設定値 |
---|---|
イベント選択 | 書籍登録時に通知したいので、「レコード登録完了時」にします |
アクション | 「メール送信」をオンにします |
送信先種別 | 「固定のメールアドレス」を選択します |
送信先メールアドレス | メール送信用のGmailアドレスを記載します |
送信方法 | 一件ずつSlackに通知したいので、「レコード単位で送信」を選択します |
差出人名 | メールのFrom欄に設定する値を記載します |
件名 | メールの件名を記載します |
本文 | 最終的にはSlackに出力するので、必要なデータだけを出力するように設定します |
オートメーション名 | わかりやすい名前を付けます |
設定完了したら「登録」をクリックすると、オートメーション設定が追加されます。
試しにレコードを追加して、設定したアドレスにメールが届いているか確認します。
Gmail側の設定
Gmail側の設定です。
下記の条件を満たす必要があります。
- サスケWorksから来たメールにだけ反応したい
- 一度通知した内容は、再通知しないようにしたい
方法はいろいろとありますが、Gmailの自動振り分けを使用して、サスケWorksから来たメールにラベルを付けるようにします。
Gmailのサイトにアクセスしてメールボックスを開きます。
先ほど試験送信したメールを表示し、「メールの自動振り分け設定」をクリックします。
「From」に送信元メールアドレスを、「件名」にサスケWorks側で設定したメールの件名を設定します。
「フィルタを作成」をクリックします。
「受信トレイをスキップ(アーカイブする)」にチェックを付けます
「ラベルを付ける」にチェックを付けます。
「ラベルを付ける」のコンボボックスから「新しいラベル」を選択して、ラベル「SaaskeWorks」を作成します。
「xx件の一致するスレッドにもフィルタを適用する」にチェックを付けます
「フィルタを作成」をクリックします。
対象のメールが受信トレイから消え、指定したラベルがつけられていれば、完了です
GAS(Google Apps Script)の作成
Gmailを確認して、Slackに投稿するスクリプトを作成します。
Gmail設定をしたアカウントで、Google Driveを表示します。
適当なフォルダで右クリックして、「Google Apps Script」を選択します。
共同編集者に関する警告が表示されるかもしれません。
「スクリプトを作成」をクリックします。
プロジェクト名をわかりやすい名前に変更します
「ファイル」の一覧から、ファイル名をわかりやすい名前に変更します
Slack送信用のライブラリを追加します。
「ライブラリ」の右の「+」マークをクリックします。
スクリプトIDに
を入れて検索します。1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq
ライブラリが見つかったら、「追加」をクリックします。
「ライブラリ」の下に、「SlackApp」が追加されます。
Slackに投稿するためのトークンと、投稿対象のチャンネル名を、スクリプトプロパティに設定します。
左側メニューの歯車マークをクリックします。
下の方にスクロールして、「スクリプトプロパティを追加」をクリックします。
「Slack_CHANNEL」「Slack_TOKEN」の2つのプロパティを追加し、それぞれ投稿先のチャンネル名、アクセストークンを設定します。
設定後、「スクリプトプロパティを保存」をクリックします
左のメニューから「<>」マークをクリックして、コード編集ウィンドウを表示します。
もともとのコードを削除し、メールの内容をチェックしてSlackに送信するコードを記載します。
プログラムの流れは、
- Gmailのメールボックスから、下記を満たすメールを取得します
- ラベル「SaaskeWorks」 が設定されている
- 未読である
- メールの本文を解析して、Slackに投稿する内容を作成します
- 作成した内容をSlackに投稿します
- メールを既読にします
- 取得したメールの数だけ、上記を繰り返します
コードは、下記になります。
それぞれの環境に合わせて改造してみてください。
///
/// エントリ関数
///
/// - SaaskeWorksから送信したメールをGMailのメールボックスから探す
/// - メールが存在した場合は、Slackに通知する
///
function notifyNewBookInfo() {
// GASのスクリプトプロパティの取得
var scriptProperty = PropertiesService.getScriptProperties().getProperties();
// Slack関連パラメータ
var Slack_Token = scriptProperty.Slack_TOKEN;
var channel = scriptProperty.Slack_CHANNEL;
// SlackAppインスタンスを生成
var slackApp = SlackApp.create(Slack_Token);
// Gmailのメールボックスを確認
let threads = GmailApp.search('label:saaskeworks is:unread');
for(let thread of threads) {
// メール本文を取得
let msgs = thread.getMessages();
// 該当メッセージについて送信
if(msgs[0]) {
// メッセージ本文を行ごとに分解
let msg = msgs[0];
let contents = msg.getPlainBody();
let content_lines = contents.split('\n');
if (content_lines.length > 8) {
// 行数があっている場合
reportToSlack(slackApp, channel, content_lines);
}
// 既読にする
msg.markRead();
}
}
}
///
/// 追加された書籍情報をSlackに報告する
///
function reportToSlack(slackApp, channel, content_lines){
let link_url = content_lines[0];
let title = content_lines[1];
let author = content_lines[2];
let publisher = content_lines[3];
let regist_user = content_lines[4];
let tag1 = content_lines[5];
let tag2 = content_lines[6];
let tag3 = content_lines[7];
let image = content_lines[8];
var option = {
attachments: JSON.stringify([
{
"fallback" : "Registered book.",
"color": "#910000",
"title": title,
"title_link": link_url,
"fields": [
{
"title": "作者",
"value": author,
"short": "true",
},
{
"title": "出版社",
"value": publisher,
"short": "true",
},
{
"title": "タグ",
"value": tag1 + "," + tag2 + "," + tag3,
},
{
"title": "登録者",
"value": regist_user,
},
],
"image_url": image,
}
])
}
var text = "新しい書籍が登録されました!";
sendMessageToSlack(slackApp, channel, text, option);
}
///
/// Slackにメッセージを送信する
///
function sendMessageToSlack(slackApp, channel, text, additionalOptions){
// 必ずつけるOptionを定義
var option = {
username: "Librarian", // Slackに投稿するユーザ名
}
// 追加オプションを連結
if (additionalOptions){
for(var key in additionalOptions){
option[key] = additionalOptions[key];
}
}
slackApp.postMessage(channel, text, option);
}
GASの自動実行を設定する
ここまでで処理のほとんどは完了です。
最後に、作成したGASスクリプトを定期的に実行する設定をします。
左のメニューの時計のマークをクリックします
右下の「トリガーを追加」をクリックします
「時間ベースのトリガーのタイプを選択」を「分ベースのタイマー」に設定
「時間の感覚を選択(分)」を「1分おき」に設定
「保存」をクリックします
これで、1分おきにGmailを確認し、サスケWorksからのメールをSlackに通知するようになります。
まとめ
サスケWorksのオートメーション機能は、工夫すればいろいろと使えそうです。
また、ちょっとした処理を行うコードを記載するプラットフォームとして、GASは優秀だと思いました。
サスケWorks関連記事はこちら
本ブログでは他にもサスケWorks関連の記事をアップしています。
ぜひ、別記事の方もご覧ください。