atskimura-memo

あまり仕事とは関係なく適当に書きます。開発ネタが多いかもしれません。

ChatWork→Slack連携: ChatWorkの新着通知をSlackに投稿する

とあるプロジェクトでChatWorkを使うことになったのですが、ChatWorkは普段使っておらず、通知に気づけません。
それだと困るので、ZapierでSlackに流すように設定しました。
標準のZAPでは連携できなかったので、設定方法をメモしておきます。

Zapierとは

zapier.com

IFTTTのビジネス版みたいのです。
クラウドサービスをつなぐものです。

こんなことができます。

  • Salesforceで新規リードがあったらSlackに通知したり
  • Google Driveの更新をSlackに通知したり
  • Wufooの問い合わせフォームに入力されたらMailChimpでメール送ったり
  • Facebookに投稿したら同内容をChatterに投稿したり

ChatWork -> Slack連携ZAPの作成

では、作っていきましょう。

Triggerの作成

[Make a ZAP]から[Code by Zapier]を選択し、どちらでもいいのですが、今回は[Run javascript]を選択します。

f:id:a_kimura:20160705133539p:plain

[Edit Options]で以下のコードを入力します。
roomIdやChatWorkTokenは適切なものに変更してください。

var roomId = '9999';
var headers = {'X-ChatWorkToken':'99999999999999XXXXXXXXXXXXXXX'};
fetch('https://api.chatwork.com/v1/rooms/' + roomId + '/messages', { headers: headers })
    .then(function(res) {
        if (res.status == 204) {
            return [];
        }
        return res.json();
    }).then(function(json) {
        console.log(json);
        callback(null, json);
    }).catch(function(error) {
        console.log(error);
        callback(error);
    });

指示通りに先に進むと、ちゃんと結果が取得できていることが確認できます。

f:id:a_kimura:20160705135151p:plain

なお、ChatWorkの/<room_id>/messages APIは前回取得分からの差分を取得するので、何度も試していると取得できなくなります。データが取得できないとActionのメッセージテンプレートが作成できないので、ChatWorkに新規投稿をするか、force=1というパラメータを一時的につけて試すとよいです。

Actionの作成

Actionは[Slack]を選び、今回は私はプライベートちゃんねるに投稿したいので[Send Private Channel Message]を選択します。

[Edit Template]で以下のように編集します。
[Message Text]は下図を参考に、それ以外は適切に設定してください。
https://www.chatwork.com/#!rid9999-9999はChatWorkのルームIDです。

  • Channel: 投稿先のチャンネル名
  • Message Text: 下図参照
  • Bot Name: ChatWork (なんでもいいです)
  • Bot Icon Emoji: :fire: (お好きなのを)

f:id:a_kimura:20160705135904p:plain

次の手順でテストをすると以下のようにSlackに投稿されます。

f:id:a_kimura:20160705140602p:plain

有効化

ZAPを[ON]にします。

ONにすると以下の画面になります。

f:id:a_kimura:20160705141159p:plain

案内の通り15分毎にChatWorkにAPI投げて新着をチェックして、Slackに通知してくれるようになります。

f:id:a_kimura:20160705144035p:plain

参考リンク

Slack入門 [ChatOpsによるチーム開発の効率化]

Slack入門 [ChatOpsによるチーム開発の効率化]