Mattermost を RSS リーダーにしてみた
お疲れ様です!Windows Server にて Mattermost + Hubot RSS Reader で RSS リーダーにしてみました。BOT を使うと色々出来るようになっていいですね!
Mattermost のインストールは Mattermost を Windows でインストールしてみる を参照してください。
目次
準備
必要なものをダウンロードしてインストールします。
安定動作させるために一部最新ではなく前のバージョンにしています。
Hubot は Node.js で作られているので入れます。
Node.js 投稿時:8.11.3 LTS
RSS の情報を保存するのに使います。
MongoDB Download Center | MongoDB Community Server 投稿時:Current Stable Release (4.0.1)
必要なモジュールをビルドするのに使います。
Python Releases for Windows | Python.org 投稿時:2.7.15
必要なモジュールをビルドするのに使います。
以前の Visual Studio ソフトウェアのダウンロード | Visual Studio – Visual Studio Microsoft Build Tools 2015 Update 3
※ Visual C++ 2015 Build Tools のインストールとなります。既に 2015 が入っているときは 「プログラミング言語」-「Visual C++」-「Visual C ++ 2015 用の共通ツール」にチェックを入れてインストールします。
RSS リーダー BOT 作成
ここでは C:\Dev フォルダ配下で作成することにします。
Windows キーを押下して cmd と入力後 Ctrl + Shift + Enter を押下して「管理者:コマンドプロンプト」を起動します。
HUBOT のインストール
次の3つをインストールします。
- The web’s scaffolding tool for modern webapps | Yeoman
- HUBOT | Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency.
- generator-hubot
C:\WINDOWS\system32>npm install -g yo hubot generator-hubot
RSS リーダー BOT のひな形作成
Hubot ひな形作成の generator-hubot を使って今回作成する BOT のひな形を作成します。
C:\WINDOWS\system32>cd /d C:\Dev
C:\Dev>mkdir news
C:\Dev>cd news
C:\Dev\news>yo hubot
BOT 情報の入力を求められたらアダプター以外はデフォルトとして(Enterキー押下)進めます。
※必要に応じてちゃんとした内容にしましょう。
? Owner (User <user@example.com>)
? Bot name (news)
? Description (A simple helpful robot for your Company)
? Bot adapter (campfire) mattermost
ひな形の修正
使わないファイルを削除します。これがあると後でエラーが出るので。
C:\Dev\news>del hubot-scripts.json
external-scripts.json に今回使うモジュールだけ記述します。
[
"hubot-diagnostics",
"hubot-help",
"hubot-mongodb-brain",
"hubot-rss-reader"
]
必要なモジュールをインストールします。
※hubot-diagnostics と hubot-help はひな形を作成するときにインストールされています。
C:\Dev\hubot>npm install --save hubot-mongodb-brain
C:\Dev\hubot>npm install --save hubot-rss-reader
WARN が出ますが ERR がなければOKです。
ですが、coffee-script で
npm WARN [email protected] requires a peer of coffee-script@^1.12.6 but none is installed. You must install peer dependencies yourself.
のようなエラーがでるとずっと出るので新しいのを入れておきます。
C:\Dev\hubot>npm install --save coffee-script@">=1.12.6"
RSS の情報を MongoDB に保存するようにしますが、モジュールが新しすぎるとエラーになるので入れ替えます。
C:\Dev\hubot>npm install --save [email protected]
動作確認してみます。
デフォルトだとポートは 8080 になります。
既に使用しているときは bin\hubot.cmd を編集してポートを環境変数で指定します。
@echo off
call npm install
SETLOCAL
SET PATH=node_modules\.bin;node_modules\hubot\node_modules\.bin;%PATH%
rem 要求待ちポート
SET PORT=18080
node_modules\.bin\hubot.cmd --name "news" %*
作成した BOT を起動します。
BOT が応答するかの確認は BOT 名のあとに ping を付けて実行し PONG と帰ってくればOKです。
C:\Dev\news>bin\hubot
up to date in 2.451s
body-parser deprecated undefined extended: provide extended option node_modules\hubot\src\robot.js:445:21
news> [Fri Aug 10 2018 10:31:51 GMT+0900 (東京 (標準時))] INFO MongoDB connected
[Fri Aug 10 2018 10:31:51 GMT+0900 (東京 (標準時))] INFO hubot-rss-reader: checker start
[Fri Aug 10 2018 10:31:51 GMT+0900 (東京 (標準時))] INFO hubot-rss-reader: wait 3600 seconds
news> news ping
news> PONG
エラーが出ないことを確認し CTRL + D で終了します。
ちなみに ping に対しての反応は「hubot-diagnostics」モジュールがやってます。
help だと「hubot-help」モジュールが反応してくれます。
Mattermost の設定
Mattermost で RSS リーダー BOT とやり取りするための設定をします。
カスタム統合機能の設定
システムコンソールの「統合機能:カスタム統合機能」でウェブフックを有効にします。
bot のユーザー名とプロフィール画像を変更できるように上書きを有効にします。
内向きのウェブフックの追加
メインメニューの「統合機能」で「内向きのウェブフック」の設定をします。
入力はタイトルとチャンネルを選択するだけです。
更新すると URL が表示されるので控えておきます。
外向きのウェブフックの追加
メインメニューの「統合機能」で「外向きのウェブフック」の設定をします。
入力はタイトル、トリガーワード、コールバックURLだけでよいです。
注意点はトリガーワードを BOT 名(Hubot実行時の –name オプション)と同じにすることです。
コールバックURLはローカルホストの Hubot 要求待ちポートに ENDPOINT を付けたものになります。
ENDPOINT は BOT 名と incoming
にしておきます。
更新するとトークンが表示されるので控えておきます。
RSS リーダー BOT の実行
環境変数の設定
Mattermost アダプターの環境変数設定
変数 | 内容 |
---|---|
MATTERMOST_ENDPOINT | 外向きのウェブフックで指定した ENDPOINT を指定 |
MATTERMOST_TOKEN | 外向きのウェブフックで控えたトークンを指定 |
MATTERMOST_INCOME_URL | 内向きのウェブフックで控えた URL を指定 |
MATTERMOST_HUBOT_USERNAME | ユーザー名として表示される名前を指定 |
MATTERMOST_ICON_URL | ユーザーアイコンとして表示される画像の URL を指定 |
その他詳細はこちらを参照 renanvicente/hubot-mattermost: A hubot adapter for Mattermost # Environment variables
hubot-rss-reader の環境変数設定
変数 | 内容 |
---|---|
HUBOT_RSS_INTERVAL | RSS の更新チェック間隔(秒) |
HUBOT_RSS_USERAGENT | ユーザーエージェント |
HUBOT_RSS_LIMIT_ON_ADD | 追加できる RSS の制限 |
HUBOT_RSS_HEADER | 記事のタイトルヘッダーにつける文字 |
HUBOT_RSS_PRINTSUMMARY | 記事内容の表示有無 |
HUBOT_RSS_PRINTIMAGE | 記事内の画像表示有無 |
HUBOT_RSS_PRINTERROR | エラー字のメッセージ表示有無 |
HUBOT_RSS_IRCCOLORS | IRC カラーで表示するかどうか |
その他詳細はこちらを参照 shokai/hubot-rss-reader: RSS Reader on Hubot # Configure
bin\hubot.cmd の編集
bin\hubot.cmd を編集して各環境変数を指定します。
必要な部分だけ指定して残りはデフォルトを使用します。
@echo off
call npm install
SETLOCAL
SET PATH=node_modules\.bin;node_modules\hubot\node_modules\.bin;%PATH%
rem 要求待ちポート
SET PORT=18080
rem SET HUBOT_LOG_LEVEL="debug"
rem Mattermost adapter の設定 **********
SET MATTERMOST_ENDPOINT=/news/incoming
SET MATTERMOST_TOKEN=9gojizzip7gsu81fboibm1dk1r
SET MATTERMOST_INCOME_URL=http://localhost:8400/hooks/wcqysdxicibqijtjhorcxhskbc
SET MATTERMOST_HUBOT_USERNAME=News
SET MATTERMOST_ICON_URL=https://cdnjs.cloudflare.com/ajax/libs/webicons/2.0.0/webicons/webicon-rss.png
rem hubot-rss-reader の設定 **********
SET HUBOT_RSS_INTERVAL=3600
SET HUBOT_RSS_USERAGENT=Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
SET HUBOT_RSS_LIMIT_ON_ADD=10
SET HUBOT_RSS_HEADER=:dango:
rem SET HUBOT_RSS_PRINTSUMMARY=true
rem SET HUBOT_RSS_PRINTIMAGE=true
rem SET HUBOT_RSS_PRINTERROR=true
rem SET HUBOT_RSS_IRCCOLORS=false
node_modules\.bin\hubot.cmd --name "news" %*
BOT の実行
アダプターを指定して実行します。
C:\Dev\hubot>bin\hubot -a mattermost
address forbidden のエラーが発生するとき
Mattermost のバージョンによっては外向けのウェブフックセキュリティが厳しくなっています。
そのため、同じサーバー内で実行時は Hubot へ接続ができません。
Configuration Settings#Allow untrusted internal connections to — Mattermost 5.1 documentation
Outgoing Webhook – [EROR] Event POST failed, err=Post http:192.168.3.207: address forbidden · Issue #7529 · mattermost/mattermost-server · GitHub
Mattermost と Hubot を別々のサーバーで運用するか、mattermost\config\config.json
の AllowedUntrustedInternalConnections
に許可するネットワーク情報を指定します。
簡単にしてしまうならセキュリティ上よろしくないが 0.0.0.0/0
や localhost
または 127.0.0.1
とし、外向けウェブフックのコールバックURLをこれと合わせれば接続できます。
これで使えるようになりました。
好きなチャンネルで次の内容をとポストすると追加され、現状が読み込まれます。
news rss add https://note.miyabis.jp/feed
登録内容を見たければ news rss list
で確認できます。
削除したければ news rss delete https://note.miyabis.jp/feed
となります。