チャットツールで生産性アップ??
ChatworkやSlackなど、生産性の向上に取り入れたり検討している会社も多いでしょう。
あくまでもツールなので、使い方によりけりで、必ずしも生産性があがるとは思いません。
何でもかんでも共有すればいい(すぐ会議ルーム作成)と思いこんでいる人や、チャットツールにかける時間が長い人(これ自体が仕事?)も見うけられます。
会社でChatworkを導入しており、多人数で物事を共有するコミュニケーションツール・コラボレーションツールとしてはアリかなとは思いますが、優先順位をつけて通知設定ができない(ミュートはできますが)ので、思考を中断する悪さをするツールです=>これも使い方ですね
Chatwork API に webhook が使えるようになった
ChatworkにはAPIがあり、v1の時からウオッチしてきましたが、v2になって(?)webhookが使えるようになっていました。
webhookとは、サービス側からトリガーで設定したURLを呼び出してくれる機能です。
例えば、チャットルームに書き込みがあった場合に、WEBサーバーのURLを呼び出してデータをPOSTしてくれます。
webhook があれば Chatwork で botができる
webhookが使えるようになったことにより、メッセージの書き込みに対して、自動的にメッセージを返す bot(チャットボット)ができるはずです。
LINEでbotをいくつか作りましたが、書き込みをトリガーにすれば色々なサービスが作れそうです。
例えば、タイムカード(在籍状況)チャットルームでは以下のようなbotを作ってやりとりができそうです。
[ユーザー1] おはよう
[bot] ユーザー1さんおはようございます。タイムカードを打刻しました。
[ユーザー2] 今日出勤してない人は
[bot] CさんとFさんが現在出勤していません
[そうむゆーざー] 全員の出勤簿を送って
[bot] 出勤簿を送ります。念のため設定されたパスワードを返信して下さい
[ユーザー1] 退勤します
[bot] ユーザー1さんおつかれさまでした。今日の勤務時間は8時間32分でした。
おおー、スケジューラーと連動させたりと 妄想 可能性は広がりますね。
bot開発すればグループウェア代わりにもなりそう。
webhook を使う事前設定
Chatworkでwebhookを含むAPIを使うには、フリープラン・パーソナルプランはメニューのAPI設定から、その他の組織プランは管理者にAPI使用の承認リクエストをしてもらわなくてはなりません。
APIを使える状態であれば、右上の「API設定」メニューから「API Token」を選び、APIキーを生成します。
厳密にはwebhookを使う(受ける)だけならAPIキーは不要です。
APIキーを表示して、コピペして保存しておきます。ただしいつでも表示できるので何もしなくても大丈夫です。
次に webhook 設定です。
あらかじめ メッセージが投稿された際にトリガーとなるルームIDを控えておきます。
ルームIDとは、Chatworkをブラウザで使用する際にURLとして表示されています。
例えば、チャットの画面を開いて
とブラウザのアドレスが表示されていれば、1234567がルームIDになります。
ダイレクトチャットもチャットルーム扱いで、ルームIDが割り振られます。
webhook でアクセスされるサーバーのURL(webhook URL) も必要です。
今回はPHPで作成し、「chatwork.php」というプログラムとします。
注意点は https でなければならないことです。
暗号化されないと覗き見される可能性があるので当然ですね。
PHP で webhook で送信されたデータを確認するプログラム
chatwork.php というプログラムをChatworkから呼び出すよう前項で設定しました。
今回はどのようなデータが送信されるのかを確認するように、ログファイルに出力してみます。
<?php
$raw = file_get_contents('php://input');
$receive = json_decode($raw, true);
error_log(print_r($receive,true),"3","/var/log/php.log");
webhookのアクセスを受け取り、JSON形式をデコードして /var/log/php.log に出力します。
WEBサーバーの書き込みアクセス権のあるファイルを touch コマンドで作って下さい。
チャットルームで発言して webhook アクセスがあるか確認
Chatworkで指定したチャットルームで発言してみます。
送信ボタンを押して「おはよう!」と発言します。
もちろん何も返答はありませんしエラー等も起こりません。
サーバー側のログファイルに出力されているか、シェルでログインして確認してみましょう。
#cat /var/log/php.log
Array
(
[webhook_setting_id] => 736
[webhook_event_type] => message_created
[webhook_event_time] => 1519019750
[webhook_event] => Array
(
[message_id] => 1017313389526647584
[room_id] => 1234567
[account_id] => 1234321
[body] => おはよう!
[send_time] => 1519019750
[update_time] => 0
)
)
#
おー、ちゃんと送られているのが確認できました。
もちろんAPIのドキュメントどおりなのですが。
[body]の項目が発言内容なのがわかると思います。
[room_id]と[account_id]は書き換えてますのでご了承下さい。
チャットルームで発言すると、webhook で送られることが確認しました。
bot にするには、これに返答しなくてはならないです。。。(2)につづく
Chatworkのシステム以外からも webhook のURLにはアクセスできるため、実際に運用する場合はトークンを使って署名検証をして、検証に通らないアクセスは排除する必要があります。
アクセス元をIPアドレスやドメインなどで制限できれば簡単でいいのですが、IPアドレス情報は提供されていません。