SSTPを使ったChatworkのタスク確認

Pocket

こんにちは。インフラエンジニアの井上です。

普段はWindows上でChatworkの新着メッセージをタイムラグなく確認するためにChromeの機能を使っています。ただ、オペレーション端末としてLinuxのXを使うことがあるため、この手段が必ずしも有効ではないかもしれないと思いから、Chatwork APIとSSTPの組み合わせでなんとかしてみようと考えたわけです。

今となっては知らない方も多いかもしれないが、10年以上前からデスクトップマスコットである「伺か」(「何か」と呼ぶケースもある)というものが存在します。当初のアプリはすでに開発がとまっていますが、実は今もオープンソースで、開発が続いています。最近まではPythonで開発されていましたが、Rubyへの移植も始まっており利用者が戻ってくるといいなと思います。興味がない人にとっては関わりがなさそうなアプリですが、Linuxなどを使われるユーザの環境には、この残滓が残っています。おもむろにコンソールにて

grep sstp /etc/service

と打ってみてください。すると結果が返ってくると思うのですが、まさしくこれが、「伺か」のためのプロトコル用ポート定義です。この番号の予約はきちんとIANAにもあり、社会認知されていると私は信じています。では、本題に。

まず、「伺か」を利用するためにninix-ayaを入れます。そして、インターフェースとなるゴーストとバルーンをプラグイン的にインストールすれば起動が可能となります。起動させてぼーっと眺めていてもいいのですが、今回の目的は「Chatworkのメッセージ更新を知りたい」ということですので、インターフェースへメッセージを送る手立てを用意します。定型メッセージを送るプログラムは割と簡単で、サンプルを見ながらだとすぐ書けます。Rubyだと下のような感じになります(やっていることは9801番ポートに"SEND SSTP/1.1"(固定),"Sender","Charset","Script"(箱と内容)を送るってことです)。

「ruby スクリプト名 SSTPテスト」とテストで実行するとこんな感じの結果が得られます。

sstp_msg_recieved

SSTPでメッセージを受け取っている

 

ここまでで、表示環境は整いました。あとは、Chatworkからメッセージをとってくるだけです。
実は、「伺か」を使ってChatworkのメッセージを表示というのは、Chatwork公式ブログでも扱われています。わりと難しいことをして実現されています(SSTP/Fluentd + fluent-plugin-sstp/Chatwork API)。
もちろん、使えるものは使おうと思い、私も試し基本動作まで確認しましたが、導入が大変で、マシンパワーもわりと必要だったため、もっと簡単な機能へのアプローチをすることにしました。それが「スクリプト(+jqコマンド)+ Chatwork API + SSTP + cron」による簡単タスク確認です。ChatworkのAPIの使い方は更新サイトのドキュメントにまかせて、実際のスクリプトを公開してみたいと思います。先ほど公開したrubyスクリプト(st.rb)をそのまま流用することこで、定期的にその時の最新タスク1件を確認することにしました(curlで呼んでいるURL中のコメントは読み替えてください)。

そして、これを実行してみた結果は以下の通りです。これをcronに上手に登録すれば、最新タスクの確認は可能になりました。

CWのタスクを表示

チャットワーク上の最新タスクが表示できている

今回は簡単な方法のみの実現でしたが、発展があれば、また紹介したいと思います。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です