技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Kintoneのwebhookを利用してRailsアプリと連携させる方法

Kintoneのwebhook利用方法

サイボウズ株式会社が提供しているKintoneのWebhookを利用してRailsアプリと連携する実装をしました。

簡易的ですが、実装方法を記載します。

Webhookとは

WebhookとはWebサービスであるイベントが実行された時に外部サービスにPOSTリクエストを実行する仕組みの事です。

簡易Webhook手順

  1. WebアプリケーションAでイベント発生(データの追加など)
  2. Postリクエストを送りたいエンドポイントへ送信※1
  3. 送り先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したいイベントをチェックします。

スクリーンショット 2019-10-22 19.19.28.png

2. Postリクエストを送りたいエンドポイント(WebhookURL)を指定する。

次に送りたいエンドポイント(WebhookURL)を指定します。

ちなみに通信はhttps限定になりますので注意を。

ここでは仮にhttps://kintone/webhookというエンドポイントを指定しました。 イベントが発生した時にこのエンドポイントにデータが飛んでいきます。

飛んでいくデータの内容はこちらに記載されています。 https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html

スクリーンショット 2019-10-22 19.36.52.png

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