Chatwork用のRuboty Adapterを作った

書くことがなかったわけじゃなかったけど、すごく放置してしまった。ネタができたので書きます。

やったこと

RubotyでChatworkを使うためのアダプタを作りました。

honeniq/ruboty-chatwork_webhook

実はmhag/ruboty-chatworkというアダプタが既にあるのですが、こちらはREST APIを使ってチャットルームを監視するので、リクエスト回数制限が常につきまといます。

回避方法を色々考えていたときにWebフックが使えることに気づき、自分でアダプタを作ることにしました。

中身の解説

Rubotyアダプタとしての入力はWebフック、出力はREST APIと繋がるイメージです。Webフックを待ち受けるためにWEBrickを使いました。

ChatworkのWebフック

ChatworkのWebフックは、特定のイベントが発生したときに指定したURLに通知することができる機能です。対象にできるイベントは以下2種類で、Chatworkの設定画面で指定します。

Webフック(POSTリクエスト)のリクエストボディには、こんな感じのJSONが入っています。

{
    "webhook_setting_id": "12345",
    "webhook_event_type": "mention_to_me",
    "webhook_event_time": 1498028130,
    "webhook_event":{
        "from_account_id": 123456,
        "to_account_id": 1484814,
        "room_id": 567890123,
        "message_id": "789012345",
        "body": "[To:1484814]おかずはなんですか?",
        "send_time": 1498028125,
        "update_time": 0
    }
}

webhook_event -> body の中に発言の本文が入っているので、これをRubotyに引き渡せば入力のお仕事は完了です。

To記法

あ、引き渡す前にちょっとだけ加工しています。

Chatworkでのメンションは、よくある「@honeniq」パターンではなく、独自の記法を使います。そのままだとRubotyで扱えないので、To記法を含む1行目全体を除去しています。

アダプタからの出力は普通にChatworkのREST APIを叩いているだけなので、割愛。

使い方

他のRubotyプラグインと同様、Ruboty本体のGemfileに”ruboty-chatwork_webhook”を追加します。

環境変数は2つ。

インターネットへの公開

上記で設定したポートに、ChatworkサーバーからHTTPSで接続できるようにしないといけません。ChatworkのWebフック機能はSSL必須です。

とりあえず試しに使ってみるときはngrok等で一時的に公開してあげると良いと思います。

Chatworkの設定画面で、公開先のURLをWebフックの送信先に指定すれば、準備完了です。

ToDo