LoginSignup
3
4

More than 5 years have passed since last update.

node-slack-sdkでslackのグループ作成、招待を自動化する

Posted at

はじめに

インターンの運営とかで社員のユーザとインターン生のユーザごとにグループ作成して招待するっていうのをやろうとなった時に、GUIでポチポチするの面倒ですよね。
そこで、今回は、node-slack-sdkというNode.jsのパッケージを使用してSlackのグループ作成などを自動化してみました。

Slack API

SlackBotなどを作ったことがある人は馴染みあると思いますが、SlackにはRestAPIが用意されています。これらを使用すれば、Channel,Group(プライベートチャンネル)などの作成、取得、アーカイブなどの処理をやらせることができます。SlackAPIのURLは以下になります。

Slack API

node-slack-sdk

このSlackAPIをNodejsで使いやすくしたものがnode-slack-sdkになります。GitHubのリポジトリは以下になります。

node-slack-sdk

導入

  1. node-slack-sdkを使える状態にしていきます。まず何かしらのディレクトリを新規作成します。(例としてslack-utilsというディレクトリを作成しています)
  2. npm installでnode-slack-sdkを入れます。
  3. ソースファイルを作成(index.js)
$ mkdir slack-utils
$ cd slack-utils
$ npm install @slack/client --save
$ touch index.js

SlackのTokenの取得

node-slack-sdkを使用する上で、SlackにアクセスするためのTokenが必要になります。これはアカウントごとに異なるTokenが発行されます。発行の仕方は以下のページを参照してください。

Slack APIのTokenの取得・場所

取得したTokenは環境変数に設定しておきましょう。以下をbash_profileに記述。

export SLACK_TOKEN="取得したToken"

Groupの作成

では、早速Slackのグループを作成していきます。
node-slack-sdkはPromiseに対応しているので、Promiseの形式で書きました。

groupCreate.js
const WebClient = require('@slack/client').WebClient;
const token = process.env.SLACK_TOKEN;
const web = new WebClient(token);

const groupName = "hogeGroup";  //作成するグループ名

//グループの作成
web.groups.create(groupName)
  .then(val => {
      console.log(val);
  })
  .catch(err => {
    console.log(err);
  });

書いたら以下のコマンドでスクリプトを実行

$ node groupCreate.js

Groupの取得

グループを作成したら作成したグループを取得します。ここで面倒なのが、SlackAPIが用意している検索キーはグループのIDのみです。したがって、特定のグループを取得したい時は全グループの情報を取得してから該当するグループ名が含まれるかで判定する必要があります。
実際に使う際は、CSVかなんかで取得したい複数のグループ名を読み込む形になると思います。
slack-utilsディレクトリに新たにgroupGet.jsというファイルを作成しました。

groupGet.js
const WebClient = require('@slack/client').WebClient;
const token = process.env.SLACK_TOKEN;
const web = new WebClient(token);

let name = "group1";  //探したいグループ名
web.groups.list()
  .then(value => {
    for(let group of value.groups){
      if(name === group.name){
        //何らかの処理
      }
    }
  })
  .catch(err => {
    console.log(err);
  });

Groupに招待

Groupの情報が取得できたら、チームにいるユーザを招待してみましょう。今回は、チームにいるユーザ全員に作成したグループを送るという形で実装していきます。

groupInvite.js
const WebClient = require('@slack/client').WebClient;
const token = process.env.SLACK_TOKEN;
const web = new WebClient(token);

let groupName = "group1";   //招待したいグループ名
let userIds = [];
Promise.all([web.users.list(), web.groups.list()])
  .then(values => {
    let users = values[0].members;
    let groups = values[1].groups;
    let groupId;

    //groupのID取得
    for(let group of groups){
      if(group.name === groupName){
        groupId = group.id;
      }
    }

  //groupに招待
    for(let user of users){
      web.groups.invite(groupId, user.id)
        .then(res => {
          //console.log(res);
        })
        .catch(err => {
          //console.log(err);
        });
    }
  })
  .catch(err => {
    console.log(err);
  });

まとめ

node-slack-sdkを使うと退屈な事務的な作業も自動化できてしまいます。色々カスタマイズして使うこともできるので、各々の用途にあった使い方をしてみてください。

ps. jsまだまだ初心者ですので、お見苦しい点あったら恐縮です。

3
4
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
3
4