チャットワークに届くメッセージをSlackに転送する方法

チャットワークにOAuthとWebhooksが搭載された!!めでたい!!

OAuthとWebhookに対応し、オープンβ版として一般公開を開始!
http://blog-ja.chatwork.com/2017/11/api-openbeta.html

ならばやることは一つ。
チャットワークに届くメッセージをSlackに転送しよう!

SlackのIncoming WebHooksを設定

まずはSlackにてWebhookを受信する設定をする必要がある。
設定をするページはこちら。
https://my.slack.com/services/new/incoming-webhook/
複数のワークスペースに参加している場合は右上のアカウント切り替えで利用するワークスペースを選ぶ。

通知を投げるチャンネルを選択して”Add Incoming Webhooks Integration”を押せば新しいWebhook用のURLが発行される。

“Webhook URL”をコピーしておく。

AWS API Gatewayの設定

チャットワークのWebhookで投げるフォーマットをSlackのフォーマットに合わせるため、AWSのAPI GateweyでJSONを変換する。

API Gatewayで新しいAPIを作成する。
https://ap-northeast-1.console.aws.amazon.com/apigateway/home?region=ap-northeast-1#/apis

API名はわかりやすいように適当に”from-chatwork-to-slack”と設定する。

「アクション」から「メソッドの作成」を選択。

メソッドは「POST」を選択。

統合ポイントは以下のように設定する。

  • 統合タイプ
    • HTTP
  • HTTP プロキシ統合
    • なし
  • HTTP メソッド
    • POST
  • エンドポイントURL
    • SlackのIncoming Webhooksで取得したURL
  • コンテンツの処理
    • パススルー

統合ポイントの 設定が終われば、次に統合リクエストの設定を行う。

「本文マッピングテンプレート」を以下のように設定する。

  • リクエスト本文のパススルー
    • テンプレートが定義されていない場合 (推奨)
  • Content-Type
    • application/json

Content-Type の設定が完了すると、 application/json の部分がリンクになるので、それをクリック。
するとページ最下部にテンプレートを設定するテキストエリアが現れる。
そこに次のように設定する。

{
    "text": "$input.path('$.webhook_event.body')\nhttps://www.chatwork.com/#!rid$input.path('$.webhook_event.room_id')"
}

これで設定は完了し、次にデプロイを行う。
「アクション」から「APIのデプロイ」を選択する。

「デプロイされるステージ」を「新しいステージ」に設定。
「ステージ名」はわかりやすく適当に「V1」と設定。
他は空欄のままで良い。

これでAPIが外部から利用可能になる。
ステージエディターに「URLの呼び出し」があるので、そのURLをコピーしておく。

チャットワークのWebhooksの利用開始

まずは利用を申請する必要があるらしい。
と言っても、このページにアクセスすれば自動的に利用可能になる模様。
https://www.chatwork.com/service/packages/chatwork/subpackages/api/request.php

チャットワークのWebhooksの設定

無事に利用が開始できればWebhookの設定を行う。
https://www.chatwork.com/service/packages/chatwork/subpackages/webhook/list.php
「新規追加」を選択。

各項目を埋めていく。

「Webhook名」はお好きな呼び名をどうぞ。わかりやすく「Slack」としておくといい。
「Webhook URL」は先ほどAPI GatewayでコピーしたURLをセットする。
「イベント」は「アカウントイベント」と「ルームイベント」が選択できる。
今回は全てのチャンネルでの自分宛のメッセージを受け取るため「アカウントイベント」の「ご自身へのメンション」を選択した。
現在は「ご自身へのメンション」しか選択できないのを見るに、今後は新たなイベントが追加されるのであろう。

これで設定完了。

実際に受け取ると

このようにチャットワークで受け取ったメッセージがそのままSlackに転送されてくる。

なお、メッセージのテンプレートはAPI Gatewayのテンプレートで変更できるので、チャットワークのAPI仕様書Slackのメッセージテンプレートの仕様書を眺めながら自由に編集して欲しい。

…と言っても、チャットワークから送られてくるデータの中に「ルームの名前」や「送信者の名前」などが含まれていないので、それらも合わせて表示したいならばチャットワークAPIなども合わせて使用する必要がある。