Typetalkの投稿を監視して漏れなくお知らせするツール「tegofy」のご紹介

※ このブログはヌーラバー 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. コマンドラインオプション
  2. 環境変数
  3. 設定ファイル

使用例

いくつかの使用例を紹介します。

キーワードを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」を開発するにあたって、サポートしていただきありがとうございます!

より良いチームワークを生み出す

チームの創造力を高めるコラボレーションツール

製品をみる