はじめに
メリ〜クリスマス🎄
クリスマス当日にかけこみでアドベントカレンダーの記事を書いております(^^;)
さっそく今回作った兄弟をご紹介!
今回作ったもの
個人にお知らせくん
個人個人にSlackのDMで同じお知らせをするのは手間がかかるのでめんどくさいですよね。もっと楽にできたらいいのにな〜と思っていたので今回はDMの一斉送信機能をGASで実装していきます。
アプリ概要
スプレッドシートにメンバーリストを用意しました。メッセージを送信する必要がある人にチェックを入れて関数を実行すると用意したメッセージが一斉に送信されるという仕組みです。
スプレッドシートの準備
メンバーリストをlist
という名前のシートに、DM内容をmessage
という名前のシートに用意しました。
DMを送るためには個人のメンバーID
というものが必要になるので、Slackを開いて以下の部分からIDを取得してください。有料アカウントだと一覧表示ができるらしいですが無料プランではそんな事できないので団体メンバーの30人分くらいは力技で回収しました。もっと人数が増えるとめんどくさいですがここは頑張りましょう。
Slackbotの準備
こちらのページにアクセスして、Create New App
を選択します。続いてFrom scratch
を選んで新しいAppを作成しましょう。
名前をつけて、botを追加するSlackのワークスペースを選択します。
次に権限の設定をします。OAuth & Permissions
を選択し下の方までスクロールするとスコープの設定があります。chat:write
とim:write
の二種類を追加してください。
表示名などを設定していきます。App Home
からEdit
を選択し、以下のようにします。Display Nameは日本語でも良いですが、Default usernameは小文字のアルファベットのみ利用できます。
最後に、個人にお知らせくんをワークスペースにインストールします。
Install App
からInstall App to Workspace
を選択してください。許可するとトークンが表示されるのでメモしておきましょう。
これでSlackbotの準備は完了!さっそくプログラムを書いていきます。
一斉送信機能
用意したスプレッドシートから、拡張機能
Apps Script
を選択してGASを開きます。
以下のようにプログラムを書きました。
// SlackAppのトークン
const SLACK_TOKEN = "コピーしたトークン";
// スプレッドシートIDとシート名
const SPREADASHEET_ID = "スプレッドシートID";
const SPREADASHEET_NAME_LIST = "list";
const SPREADASHEET_NAME_MESSAGE = "message";
const SPREADASHEET_LIST = SpreadsheetApp.openById(SPREADASHEET_ID).getSheetByName(SPREADASHEET_NAME_LIST);
const SPREADASHEET_MESSAGE = SpreadsheetApp.openById(SPREADASHEET_ID).getSheetByName(SPREADASHEET_NAME_MESSAGE);
// スプシから通知対象者にメッセージを送る
function check() {
var last_row = SPREADASHEET_LIST.getLastRow();
for (let i = 2; i <= last_row; i++) {
var flag = SPREADASHEET_LIST.getRange(i, 3).getValue();
if (flag == true) {
var userID = SPREADASHEET_LIST.getRange(i, 2).getValue();
postDM(userID);
}
}
}
// botからDMを送る
function postDM(member_id) {
var last_row = SPREADASHEET_MESSAGE.getLastRow();
const message = SPREADASHEET_MESSAGE.getRange(last_row, 1).getValue();
const channel_id = getChannelID(member_id);
// 指定の[チャンネルID]にDMを送信する
const message_options = {
"method" : "post",
"contentType": "application/x-www-form-urlencoded",
"payload" : {
"token": SLACK_TOKEN,
"channel": channel_id,
"text": message
}
};
const message_url = 'https://slack.com/api/chat.postMessage';
UrlFetchApp.fetch(message_url, message_options);
}
// DMを開いてチャンネルIDを取得する
function getChannelID(member_id) {
const options = {
"method" : "post",
"contentType": "application/x-www-form-urlencoded",
"payload" : {
"token": SLACK_TOKEN,
"users": member_id
}
}
const url = 'https://slack.com/api/conversations.open';
const response = UrlFetchApp.fetch(url, options);
const obj = JSON.parse(response);
console.log(obj);
return obj.channel.id;
}
スプレッドシートIDは用意したスプシのURLの以下の部分です。コピペしてください。
https://docs.google.com/spreadsheets/d/ここの文字列/edit#gid=0
checkの関数を実行すると、、
できました!無事個人にお知らせくんからメッセージが届きました〜!
スプシだけで完結させる
スプレッドシートからGASの関数を実行できるようにします。
スプレッドシートの拡張機能
からマクロをインポート
します。
checkという関数を追加しました。
拡張機能
のマクロ
にcheck
が追加されています。ここをクリックすることで一斉送信ができるようになりました!
おわりに
これで個人にお知らせくん完成です!
最後まで読んでいただきありがとうございました。
DMの一斉送信はお知らせくんにお任せください✨✨✨
ps.なぜ兄弟なのかずっと気になっている人へ
🌟タスクお知らせくんの記事はこちら🌟
https://qiita.com/fuki_01/items/a841166b547e323baeaa
🌟議事録お知らせくんの記事はこちら🌟
https://qiita.com/fuki_01/items/d0434ad9ce3357d54183
おまけ
メッセージテキストを装飾する方法
ボールド
*あいうえお*
メンション
<@ユーザーID>
リンク
<https://www.youtube.com/ >
リンク2
<https://www.youtube.com/ | YouTube>
引用
>あいうえお