LoginSignup
0
0

[GASでカンタン自動化] 個人にお知らせくん

Last updated at Posted at 2023-12-25

はじめに

メリ〜クリスマス🎄
クリスマス当日にかけこみでアドベントカレンダーの記事を書いております(^^;)

さっそく今回作った兄弟をご紹介!

今回作ったもの

個人にお知らせくん

個人個人にSlackのDMで同じお知らせをするのは手間がかかるのでめんどくさいですよね。もっと楽にできたらいいのにな〜と思っていたので今回はDMの一斉送信機能をGASで実装していきます。

アプリ概要

スプレッドシートにメンバーリストを用意しました。メッセージを送信する必要がある人にチェックを入れて関数を実行すると用意したメッセージが一斉に送信されるという仕組みです。

スプレッドシートの準備

メンバーリストをlistという名前のシートに、DM内容をmessageという名前のシートに用意しました。

スクリーンショット 2023-12-25 20.13.24.png

スクリーンショット 2023-12-25 20.03.54.png

DMを送るためには個人のメンバーIDというものが必要になるので、Slackを開いて以下の部分からIDを取得してください。有料アカウントだと一覧表示ができるらしいですが無料プランではそんな事できないので団体メンバーの30人分くらいは力技で回収しました。もっと人数が増えるとめんどくさいですがここは頑張りましょう。

Qiita1.png

Slackbotの準備

こちらのページにアクセスして、Create New Appを選択します。続いてFrom scratchを選んで新しいAppを作成しましょう。

Group 1.png

名前をつけて、botを追加するSlackのワークスペースを選択します。

Group 2.png

次に権限の設定をします。OAuth & Permissionsを選択し下の方までスクロールするとスコープの設定があります。chat:writeim:writeの二種類を追加してください。

Group 6.png

Group 3.png

表示名などを設定していきます。App HomeからEditを選択し、以下のようにします。Display Nameは日本語でも良いですが、Default usernameは小文字のアルファベットのみ利用できます。

Group 5.png

Group 4.png

最後に、個人にお知らせくんをワークスペースにインストールします。
Install AppからInstall App to Workspaceを選択してください。許可するとトークンが表示されるのでメモしておきましょう。

これでSlackbotの準備は完了!さっそくプログラムを書いていきます。

一斉送信機能

用意したスプレッドシートから、拡張機能 Apps Scriptを選択してGASを開きます。

スクリーンショット 2023-12-25 21.30.04.png

以下のようにプログラムを書きました。

// 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の関数を実行すると、、

スクリーンショット 2023-12-25 21.16.12.png

できました!無事個人にお知らせくんからメッセージが届きました〜!

スプシだけで完結させる

スプレッドシートからGASの関数を実行できるようにします。
スプレッドシートの拡張機能からマクロをインポートします。

スクリーンショット 2023-12-25 21.33.06.png

checkという関数を追加しました。

スクリーンショット 2023-12-25 21.33.30.png

拡張機能マクロcheckが追加されています。ここをクリックすることで一斉送信ができるようになりました!

スクリーンショット 2023-12-25 21.36.08.png

おわりに

これで個人にお知らせくん完成です!
最後まで読んでいただきありがとうございました。
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>
引用
>あいうえお

スクリーンショット 2023-12-25 21.49.05.png

0
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
0
0