※ このブログはヌーラバー Advent Calendar 2020 3日目の記事です。明日は@yuichi03011さんの記事です。
ヌーラボのビジネスチャットツール「Typetalk」の気になる投稿を監視して漏れなくお知らせするコマンドラインツール「tegofy」(テゴフィー)を開発したのでご紹介します。(Typetalkの公式ツールではありません)
https://github.com/typetalk-gadget/tegofy
目次
TL;DR
- Typetalkの各トピックへの投稿を全て監視して、指定した文言と部分一致する投稿であれば通知するコマンドラインツールです。
- 通知方法は、デスクトップ通知とTypetalkのトピックへの投稿による通知の2つを選択できます。
- 例えば、最近気になるワードの「foo」を含むメッセージがどこかのトピックへ投稿されたら知りたいといった、所謂エゴサーチのようなことを実現できます。
デスクトップ通知の例
開発の動機
ヌーラボでは普段のコミュニケーションツールとしてTypetalkをドッグフーディングも兼ねて使用しています。
その用途はメンバ同士の会話だけではありません。ヌーラボが提供するサービス(Backlog、Cacoo、Typetalk)を運用するにあたって、負荷の高いサーバのアラートの通知先としても使用しています。
私自身日々の業務でそれらのサーバのアラートを受取り対応する中、アラートトピックに投稿されるメッセージの文言でアラートの種別を指定して、すぐに気づけるデスクトップ通知が欲しいと思うことがありました。
もちろん、Typetalk自体に特定のトピックへの投稿を通知する機能はあります。しかし、特定のトピックの特定のメッセージに絞って通知して欲しかったので、この機能だと私の要望は満たせませんでした。
また、ヌーラボではアラート通知に Pager Duty も利用しており、その設定をより細分化することでもやりたい事は実現できます。しかし、一定数のチームで使っている共有のツールに個人的な設定を量産してノイズにしたくありませんでした。私の要望は、今気になっている特定のアラートを気軽に設定変更しながら通知を受取りたいといったくらいの温度感でした。
そこで、目をつけたのが Typetalk Stream API です。この API で自分が参加しているトピックの全投稿を Web Socket で受け取ることができます。これで、自分のマシンからTypetalk Stream API に直接接続し、自分の都合に合わせててフィルタリングすれば実現できることが見えてきたので、早速作ってみました。
インストール方法
tegofy コマンドをインストールする方法を解説します。
Homebrew
MacOSで使用可能なパッケージマネージャであるHomebrewでインストールできます。
brew tap typetalk-gadget/tegofy brew install tegofy
Go
Go(go1.14+)をインストールしていれば、go get でもインストールできます。
go get github.com/typetalk-gadget/tegofy
GoBinaries
Go をインストールしていなくても、gobinaries.com に curl でリクエストすることで簡単にインストールできます。
curl -sf https://gobinaries.com/typetalk-gadget/tegofy | sh
GitHub Release Page
ビルド済のバイナリはGitHubのリリースページからOS毎にダウンロードできます。ダウンロード後、パスが通ったディレクトリに配置してください。
基本的な使い方
基本的に実行方法とオプションを解説します。
実行方法
tegofy [options]
オプション
オプション |
環境変数 |
設定ファイル |
説明 |
型 |
-c, –config |
TEGOFY_CONFIG |
なし |
設定ファイルのパス |
string |
–client_id |
TEGOFY_CLIENT_ID |
client_id |
CredentialのクライアントID |
string |
–client_secret |
TEGOFY_CLIENT_SECRET |
client_secret |
CredentialのシークレットID |
string |
–notify_desktop |
TEGOFY_NOTIFY_DESKTOP |
notify_desktop |
デスクトップ通知の有効にする |
bool |
–notify_typetalk |
TEGOFY_NOTIFY_TYPETALK |
notify_typetalk |
指定したTypetalkのトピックへ通知を投稿する |
int |
–with_mention |
TEGOFY_WITH_MENTION |
with_mention |
トピックへの通知の投稿に自分宛のメンションを含める |
bool |
–space_keys |
TEGOFY_SPACE_KEYS |
space_keys |
対象組織のスペースキー |
strings |
–keywords |
TEGOFY_KEYWORDS |
keywords |
対象のキーワード |
strings |
なし |
なし |
keyword |
対象のキーワード |
string |
なし |
なし |
topic_id |
対象のトピック |
int |
–ignore_bot |
TEGOFY_IGNORE_BOT |
ignore_bot |
ボットからの投稿を除外する |
bool |
–ignore_users |
TEGOFY_IGNORE_USERS |
ignore_users |
指定したユーザの投稿を除外する |
strings |
–debug |
なし |
debug |
デバッグログを出力する |
bool |
-h, –help |
なし |
help |
ヘルプを表示する |
bool |
設定ファイルの例
# ~/.tegofy/config.yml debug: true client_id: "deadbeef" client_secret: "deadcode" notify_desktop: true notify_typetalk: 9999999999999999 with_mention: true space_keys: - "your_space_key" keywords: - keyword: "Hello" topic_id: 11111111 - keyword: "bye" topic_id: 22222222 ignore_bot: false ignore_users: []
Typetalk Client Credential
tegofy は内部で Typetalk API を使用しているので、Typetalk の Client Credential は必須です。コマンドラインオプション、環境変数、設定ファイルで指定できます。読み取る優先度は以下のとおりです。
- コマンドラインオプション
- 環境変数
- 設定ファイル
使用例
いくつかの使用例を紹介します。
キーワードを1つ指定してデスクトップ通知する
キーワードを1つ指定してデスクトップ通知する例です。以下のように、コマンドラインオプションのみでも使用できます。
tegofy \ --client_id XXXXXXXXXX --client_secret XXXXXXXXXX --space_keys foo --keywords bar --notify_desktop
以下のように、環境変数でクレデンシャルを渡すことも可能です。
env TEGOFY_CLIENT_ID=XXXXXXXXXX TEGOFY_CLIENT_SECRET=XXXXXXXXXX \ tegofy \ --space_keys foo --keywords bar --notify-desktop
キーワードを複数指定してTypetalkのトピックへ通知する
キーワードを複数指定してTypetalkのトピックへ通知する例です。–keywords を複数並べて指定できます。–notify_typetalk には投稿用のトピックのIDを指定します。
tegofy \ --client_id XXXXXXXXXX \ --client_secret XXXXXXXXXX \ --space_keys foo \ --keywords bar1 \ --keywords bar2 \ --notify_typetalk 9999999999999999
トピック毎にキーワードを限定して通知する
トピック毎にキーワードを限定して設定できます。以下のように、keywordとtopic_idをペアにしたconfig.ymlを定義して、tegofy -c ./config.yml を実行します。”Hello”というキーワ―ドはIDが1111111のトピックのみフィルタリングされます。”Bye”というキーワ―ドはIDが2222222のトピックのみフィルタリングされます。
# ~/.tegofy/config.yml client_id: "XXXXXXXXXX" client_secret: "XXXXXXXXXX" notify_desktop: true space_keys: - "your_space_key" keywords: - keyword: "Hello" topic_id: 11111111 - keyword: "Bye" topic_id: 22222222
まとめ
「tegofy」が解決すること、使い方についてざっくりと解説しました。「tegofy」を使用することで、Typetalk をご利用中の皆様の情報収集を少しでも手助けできれば幸いです。
謝辞
「tegofy」は、ヌーラボの @futahashi さんが社内公開していた「typetalk-ws-ego-search」というのNode.js製のツールを継承しています。「tegofy」を開発するにあたって、サポートしていただきありがとうございます!