Kintoneのwebhookを利用してRailsアプリと連携させる方法
Kintoneのwebhook利用方法
サイボウズ株式会社が提供しているKintoneのWebhookを利用してRailsアプリと連携する実装をしました。
簡易的ですが、実装方法を記載します。
Webhookとは
WebhookとはWebサービスであるイベントが実行された時に外部サービスにPOSTリクエストを実行する仕組みの事です。
簡易Webhook手順
- WebアプリケーションAでイベント発生(データの追加など)
- Postリクエストを送りたいエンドポイントへ送信※1
- 送り先WebアプリケーションBにデータ到着
※1 送り先URLはWebhookURLと呼ぶことが多い。
今回の場合であればWebアプリケーションA -> Kintone、送り先WebアプリケーションB -> あなたのRailsアプリケーションになります。
KintoneでのWebhook利用方法
では本題のKintoneでのWebhook利用方法を解説します。
上記で簡易3ステップでのWebhook手順を説明したので、その手順でKintoneも設定していきます。
1. KintoneでWebhookを発生させるイベントを設定する。
Kintoneアプリの設定画面からwebhookをクリックします。(設定画面の中にあるwebhookをクリック)
設定画面の表示方法はこちらを参照
Kintoneの場合のイベントは「レコードの追加」、「レコードの編集」、「レコードの削除」、「コメントの書き込み」、「ステータス更新」に当たります。
この中からWebhookしたいイベントをチェックします。
2. Postリクエストを送りたいエンドポイント(WebhookURL)を指定する。
次に送りたいエンドポイント(WebhookURL)を指定します。
ちなみに通信はhttps限定になりますので注意を。
ここでは仮にhttps://kintone/webhook
というエンドポイントを指定しました。
イベントが発生した時にこのエンドポイントにデータが飛んでいきます。
飛んでいくデータの内容はこちらに記載されています。 https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html
3.送り先RailsWebアプリケーションBにデータ到着
上記1,2の設定が上手くいけば、イベント発生時にあなたの開発しているRailsアプリケーションにデータが送信されています。
Railsとの連携方法
Webhookの設定が終わったので、次はRailsアプリケーション側の設定をします。
1. RailsRoutesの設定
Kintonで設定したWebhookURLをroutes.rbに記載します。
Rails.application.routes.draw do namespace :kintone do post "/webhook", to: "webhook#good" end end
2. controller
Webhookで受信したデータはKintone::WebhookControllerで実装します。 hogeメソッド内で実装したいコードを記載する。
class Kintone::WebhookController < ApplicationController protect_from_forgery except: [:hoge] ※1 def hoge 実装したい仕様をここに記載する。 end end
※1 Railsアプリケーションに対して、外からPOST送信しようとすると、422エラー・Can't verify CSRF token authenticityエラーになるので、外部からリクエストを許可する為にprotect_from_forgeryを設定。
3. Webhook実装できているか確認
本当にデータが受信できているか確認のためにbinding.pryで止めてサーバーログを確認してみます。
class Kintone::WebhookController < ApplicationController protect_from_forgery except: [:hoge] ※1 def hoge binding.pry <----- end end
Cannot render console from 103.79.14.16! Allowed networks: 127.0.0.0/127.255.255.255, ::1 Processing by Kintone::WebhookController#good as HTML Parameters: {.......} From: /....: 4: def good 5: binding.pry 6: end
こんな感じでbinding.pryでとまれば、データ受信できています。
参考
https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html https://qiita.com/KumatoraTiger/items/cc6a1107374cce500e6d