チャットワークに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なども合わせて使用する必要がある。