LoginSignup
27
34

More than 3 years have passed since last update.

【魅惑ライブラリ試用②】わずかなステップでSlack BOTが作成・操作が可能なNode.jsライブラリ「Slackbots.js」を試用。

Posted at
  • 日常に溶け込み、多大なる恩恵を頂いているライブラリやパッケージを心おきなく試用する記事第二弾。
  • 「ふと思いつきで」という言葉を信条にしてきた私の活動遍歴の変遷が、だんだん速度を増して進行中。
  • 今回は、SlackBOT作成の際に便利なライブラリの「Slackbots.js」を試用することにしよう。

ライブラリ概要

  • Slack BOTをAPIを利用して、簡単に作成・操作が可能なNode.jsライブラリ。
  • メッセージ投稿やユーザーリストの取得等の、Slackの基本操作の処理が豊富に用意されている。
  • 公式Github

作成BOT概要

  • 下記の機能を持つ、最低限のSlack BOT。
    • 指定した地域の天気情報を取得・投稿
    • helpコマンドで、利用方法等を投稿
  • ※今回はチュートリアル作成のため、より高機能なBOT作成は行わない。

結果

  • 下記のように、BOTに対して指定のメッセージを投稿すると、基づいた情報を返してくれる。

image.png

  • また、操作不明・コマンド忘れの際に、「help」投稿でBOT詳細情報も返してくれる。

image.png

作成環境

  • Mac OS X 10.13.4
  • NodeJs v11.10.0
  • yarn 1.13.0
    • ※npmを利用する場合、下記の手順以降で「yarn」との読み替えを行う。

手順

  • ※Node.jsを利用するため、インストールが未完了の場合、こちらを参考にインストールする。

必要フォルダ・ファイルの作成

  • 下記のコマンドをうち、作業に必要なフォルダとファイルを作成する。
# 作業フォルダ作成
$ mkdir ~/slack_bot
# 作業フォルダ移動
$ cd ~/slack_bot
# jsファイル作成
$ touch index.js
# 環境変数利用ファイル作成
$ touch .env

必要ライブラリのインストール

  • 今回BOT作成の際に、利用するライブラリはSlackbots.jsを含めて下記。

    • 「Slackbots.js」
      • BOT作成フレームワークとして利用
    • 「axios」
      • PromiseベースのHTTPクライアント。json変換やapi通信等のHTTP通信処理が容易に可能。
    • 「dotenv」
      • 環境変数参照ライブラリ。Slackのトークンを参照する際に利用。
  • 下記のコマンドをうち、Node.jsパッケージ管理のyarnを利用して、パッケージ管理ファイル(package.json)を作成する。

# パッケージ管理初期化
# コマンド実行後に、問われる質問は基本全てEnterで良い。
$ yarn init
  • 実行後、作成されたpackage.jsonの中身を下記のように修正して、必要ライブラリ等を明記する。
{
  "name": "slack_bot",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "devDependencies": {
    "dotenv": "^8.0.0"
  },
  "dependencies": {
    "axios": "^0.19.0",
    "slackbots": "^1.2.0"
  },
  "license": "MIT"
}
  • 修正後、下記のコマンドをうち、package.jsonに記載されたライブラリをインストールする。
# 必要ライブラリのインストール
$ yarn install
  • 必要ファイル作成・ライブラリインストールまで完了後、最終的なファイル構造が下記になっていることを確認する。
├─ slack_bot
    ├── .env
    ├── index.js
    ├── node_modules
    ├── package.json
    └── yarn.lock

Slack BOTの作成・設定

ボットアプリの作成

  • Slackへボット用のアプリを追加するため、こちらのサイトにアクセス。
  • アクセス後、ページ内の「Create New App」をクリックして、下記の情報を入力。
  • ※「Create New App」をクリックしなくても、入力画面が表示される場合がある。
    • 「App Name」: アプリの名前(作成内容がわかりやすい名前)
    • 「Development Slack Workspace」: アプリを追加するチャンネル
  • 入力後、「Create App」をクリックして、作成。
  • 作成後に下記のページが表示されるため、ページ内の「Bots」をクリック。

tyty.png

  • クリック後、下記のページが表示されるため、「Add a Bot User」をクリックして、その後に表示される入力画面に以下の情報を入力して、「Add Bot User」をクリックして、追加する。
    • 「Display name」: 表示するアプリの名前
    • 「Default username」: ユーザー名

image.png

sdfhjsdh.png

  • 追加後、左サイドメニューの「Install App」をクリックして、下記の画面が表示されたら、「Install App to Workspace」をクリック。その後に表示される画面で「許可する」をクリックすれば、指定したSlackのワークスペースにボットアプリが追加される。

image.png

image.png

SlackBOTトークンの取得

  • 作成したSlack BOTのトークンを取得するため、左サイドメニューの「OAuth & Permissions 」をクリックして、下記の「OAuth Tokens & Redirect URLs」ページの、「Bot User OAuth Access Token」欄のトークンをメモしておく。

token.png

必要ファイルの記述

jsファイルの記述

  • Slack上でのボットアプリ作成・設定等が完了したら、上記で作成した必要ファイルを編集していく。
  • まず作成したindex.jsの中身を下記のように編集する。
    • ※Slackbots.jsでより高機能に利用するためのメソッド等は、こちらを確認。
    • ※ファイル内で利用している天気APIはライブドアAPIを利用。「city=ID」で地域指定。地域一覧はこちらを参考。
// 必要ライブラリの読み込み
const SlackBot = require('slackbots');
const axios = require('axios');
const dotenv = require('dotenv');
dotenv.config();

// URL(天気)・Slackチャンネル情報の定義
// SLACK_CHANELは、Slack上に存在するチャンネル(例: general)を指定
const APP_NAME = 't_o_d_bot';
const WEATHER_URL = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=471010';
const SLACK_CHANEL = 'test-app';
const PARAMS = {icon_emoji: ':robot_face:'}

// botインスタンスの作成
const bot = new SlackBot({
    token: `${process.env.TOKEN}`,  // .envファイルのトークンを参照
    name: APP_NAME
});

// Slackでのメッセージ投稿の際の処理
bot.on('message', (data) => {
    if(data.type !== 'message') {
        return;
    }
    sendMessage(data.text);
})

// エラー時の処理
bot.on('error', (err) => {
    console.log('エラー : ' + err);
})

// メッセージごとの投稿処理
function sendMessage(message) {
    if(message.includes(' weather')) {
        getWeather()
    } else if(message.includes(' help')) {
        getHelp()
    }
}
// 天気取得処理
function getWeather() {
    axios.get(WEATHER_URL)
      .then(res => {
        const title = res.data.title;
        const telop = res.data.forecasts[0].telop;
        const summary = res.data.description.text;

        bot.postMessageToChannel(
            SLACK_CHANEL,
            `${title}\n天候 : ${telop}\n内容 : ${summary}`,
            PARAMS
        );
      })
}
// help情報投稿処理
function getHelp() {
    bot.postMessageToChannel(
        SLACK_CHANEL,
        `【コマンド一覧】\nweather : 天気情報を取得\nhelp : ヘルプ情報を取得`,
        PARAMS
    );
}

環境変数ファイルの作成

  • jsファイルで利用するSlackのアクセストークンを定義するため、作成した.envファイルに、先ほどメモしたトークンを記述して、下記のように編集する。
    • ※アクセストークン記述の際は、シングルクォーテーション等で囲む必要はない。
TOKEN=アクセストークン

起動・実行

  • 必要な「jsファイル・環境変数ファイル」の記述が完了したら、BOTを起動していく。
  • 下記のコマンドをうち、jsファイルを実行して、BOTを起動する。
# 実行
$ yarn start
  • 起動後、Slack上でBOTアプリが下記のように起動していることを確認。

image.png

  • slack上で、下記のように、「@t_o_d_bot weather」や「@t_o_d_bot help」等でメッセージを投稿して、結果が返されることが確認できれば完了。

image.png

  • yarnで起動するだけではなく、BOTとして長時間起動しておきたい場合、別途サーバー等を準備する必要がある。

まとめ

  • 今回は、BOT作成ということで、久々の対話マシーン構築作業に、名作ドラマの再会シーンが脳内の9割を占めながら、記事を書く。
  • 「BOTは、略語で深い意味が込められているはず」と思い込んでいた私の、「ただの短縮形」と知った時の表情。
  • その表情をしたまま、更なる高機能BOTへの改善作業・賢人ライブラリ調査をすることにしよう。

参考

27
34
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
27
34