ChatWork APIを使って定期投稿を自動化する
はじめに
弊社では主なコミュニケーションツールとしてChatWorkを利用しています。業務連絡ももちろん、部活動(弊社にはフットサル部やランニング部、雪山部、自転車部などがあります!)や、待ち合わせ連絡、タスク管理など、様々な用途で使っています。
その中には、必ず定期的に投稿する内容があります。例えば以下のようなものです。
- 毎週末のオフィスクリーンの開始時刻
- 週次定例会の開始時刻
- 毎週水曜日のランニング部の部活動開始予告
- 月末の経費精算手続きの進捗確認
こんな内容をわざわざ手動で投稿するのはアホらしいので、チャットワークAPIを使って自動化することにしました。
注意
チャットワークAPIドキュメントサイトにも書いてある通り、現時点ではプレビュー公開となっていますので、利用する際には申請が必要です。
やってみる
APIトークンの取得
APIトークンの取得はChatWorkの動作設定から行います。「API発行」タブで、アカウントのパスワードを入力して[表示]ボタンをクリックします。
するとAPIトークンが表示されますので、この文字列をメモしておきます。
チャットワークAPIを使うポイント2つ
チャットワークAPIを使うポイントは以下の2つです。
- エンドポイントへの接続はHTTPSで行うこと。
- APIトークンはX-ChatWorkTokenというHTTPリクエストヘッダにセットすること。
あとは普通のHTTP通信と変わり有りません。
ルームIDを確認する
チャットワークAPIを使って特定のルームに投稿するためには、ルームIDが必要になります。まずはルームIDの一覧を取得してみます。
require 'rss' require 'net/https' require 'json' CW_API_TOKEN = "edit_your_api_token_strings" def get_room uri = URI('https://api.chatwork.com/v1/rooms') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE header = { "X-ChatWorkToken" => CW_API_TOKEN } body = nil res = http.get(uri, header) puts JSON.parse(res.body) end get_room
実施結果は以下のようになります。
{"room_id"=>1234567, "name"=>"AWSコンサルティング部", "type"=>"group", "role"=>"admin", "sticky"=>true, "unread_num"=>0, "mention_num"=>0, "mytask_num"=>0, "message_num"=>1234, "file_num"=>1, "task_num"=>2, "icon_path"=>"", "last_update_time"=>1409895998} {"room_id"=>12345678, "name"=>"アプリケーションサービス部", "type"=>"group", "role"=>"admin", "sticky"=>true, "unread_num"=>0, "mention_num"=>0, "mytask_num"=>0, "message_num"=>1234, "file_num"=>0, "task_num"=>6, "icon_path"=>"", "last_update_time"=>1409895524} {"room_id"=>123456789, "name"=>"管理部", "type"=>"group", "role"=>"admin", "sticky"=>false, "unread_num"=>1, "mention_num"=>0, "mytask_num"=>0, "message_num"=>1234, "file_num"=>0, "task_num"=>3, "icon_path"=>"", "last_update_time"=>1409896246}
これでルームIDが確認出来ました。
ルームにメッセージを投稿する
次に、ルームIDを指定して特定のルームにメッセージを投稿してみます。
require 'rss' require 'net/https' require 'json' CW_API_TOKEN = "edit_your_api_token_strings" ROOM_ID = "1234567" def post_cw(data) uri = URI('https://api.chatwork.com/v1/rooms/' + ROOM_ID + '/messages') http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE header = { "X-ChatWorkToken" => CW_API_TOKEN } body = "body=" + URI.encode(data) res = http.post(uri, body, header) puts JSON.parse(res.body) end post_cw(ARGV[0])
で、引数で投稿したい内容を付与して実行します。戻り値はこんな感じで、メッセージIDが返ってきます。
$ ruby ./cw.rb テスト {"message_id"=>0987654321}
そしてルームを確認すると、ちゃんと投稿されています!
あとはcronで回すだけです!
まとめ
これでみんなちゃんと遅れずに経費精算出来ますね!