はじめに

ついに私もChatWorkのAPIアカウントを取得することができました。
これを使用して、何か有用なボットを作成したいと思っておりますが、手始めに簡単なボットをRubyで作成してみました。

ChatWork APIのドキュメントはこちら

作成したソースコード

require 'net/https'
require 'json'

class ChatworkApi
    CHATWORK_API_URL = 'https://api.chatwork.com'

    # @param string api_token
    def initialize(api_token)
        @api_token = api_token

        uri = URI.parse(CHATWORK_API_URL)
        @client = Net::HTTP.new(uri.host, 443)
        @client.use_ssl = true
    end

    # チャットグループの一覧を取得します
    def search_rooms
        res = @client.get('/v2/rooms', { 'X-ChatWorkToken' => @api_token })
        puts JSON.parse(res.body)
    end

    # 対象のチャットグループにチャットを投げます
    # @param integer room_id
    # @param string  message
    def chat(room_id, message)
        res = @client.post("/v2/rooms/#{room_id}/messages",
                           "body=#{message}",
                           { 'X-ChatWorkToken' => @api_token })
        puts JSON.parse(res.body)
  end
end

各メソッドについて

初期化

    # @param string api_token
    def initialize(api_token)
        @api_token = api_token

        uri = URI.parse(CHATWORK_API_URL)
        @client = Net::HTTP.new(uri.host, 443)
        @client.use_ssl = true
    end

初期化の際にAPIトークンを引数で受け取り、インスタンス変数にセットしておきます。
(APIトークンは、定数ファイルを用意して別ファイル管理するなどの方法もありますが。。。)

次にAPIを叩く準備をします。

1.URIモジュールを使用して、ChatWorkAPIのURLをパースします。
2.HTTP通信をしてくれるRubyの組み込みライブラリであるNet::HTTPのインスタンスを生成します。
3.ChatWorkのAPIはSSL通信が必要なので、use_sslをtrueにしておきます。

チャットグループの一覧を取得

自分のチャット一覧の取得

    # チャットグループの一覧を取得します
    def search_rooms
        res = @client.get('/v2/rooms', { 'X-ChatWorkToken' => @api_token })
        puts JSON.parse(res.body)
    end

インスタンス変数@clientには、Net::HTTPのインスタンスがセットされているので、メソッドを使用することができます。
GETで対象のAPIを叩きにいきます。

結果はJSON形式で出力したかったので、JSONモジュールを使用しています。

対象のチャットグループにチャットを投げる

チャットに新しいメッセージを追加

    # 対象のチャットグループにチャットを投げます
    # @param integer room_id
    # @param string  message
    def chat(room_id, message)
        res = @client.post("/v2/rooms/#{room_id}/messages",
                           "body=#{message}",
                           { 'X-ChatWorkToken' => @api_token })
        puts JSON.parse(res.body)
  end

一覧で取得したチャットルームの中から、対象のチャットルームに対してメッセージを送ります。
引数として、room_idと送りたいmessageを受け取ります。
今度はPOSTなので、postメソッドを使用して叩きます。

ChatWorkのメッセージ記法は下記にドキュメントがありました。
メッセージ記法

実際に使用してみる

使用に際して、Rubyの irbを使用します。

$ irb
>> require '/Path/to/chatwork_api'
=> true
>> chatwork_api = ChatworkApi.new('hogehoge')
=> #<ChatworkApi:xxxxxxxxxxxxxx @client=#<Net::HTTP api.chatwork.com:443 open=false>, @api_token="hogehoge">
>> chatwork_api.search_rooms
# ここでチャット一覧が出力されます。今回はマイチャットにチャットを投げてみます。
>> chatwork_api.chat(xxxxxxxx, 'こんにちは')
{"message_id"=>"xxxxxxxxxxxxxxxx"}
=> nil

マイチャットに「こんにちは」というメッセージが投下されます。

さいごに

かなり簡単なプログラムですが、ChatWorkAPIを使用して業務改善に役立つプログラムを作成されている方々もいらっしゃいます。
弊社でもそのような取り組みをし、記事にてご報告できればいいな、と思っております。

Shere
  • はてなブログ
  • Twitter
  • Facebook
ChatWorkのAPIを使って簡単なボットを作ってみた

Writer

  • Name

    Naoki

  • Position

    RubyやPHPが書きたい雑用

  • Profile

    最近、(自称)PHPerから(自称)Rubyistに移行しようと考えている雑用です。Rubyのオブジェクト 指向はすごい分かりやすいので好きになりました。また、メソッド名に?が使えるのも良いですよね!