web-dev-qa-db-ja.com

Rails)でWebhookを使用する

私はWebhookに慣れていませんが、Webhookは私のアプリにとって正しいものだと感じています。

FluidSurveys webhook に関する次のドキュメントがあります

POSTリクエストを介してAPIにWebhookを作成する方法は理解していますが、Webhookが実際に応答を送信する場所を確認する方法がわかりません。必要なサブスクリプションURLを渡すことはできますか?例えばhttps://www.myapp.com/testそしてwebhookがデータを送信する場所はどこですか?また、webhookが作成された後、Railsアプリが開始された応答を受信することを確認する方法がわかりません。URLに対応するコントローラーメソッドを想定していますWebhookに提供します。

Webhookを処理するコントローラーが正しければ、どのようになりますか?

任意のガイダンスをいただければ幸いです。

13
Luigi

WebhookshookコールバックURLあなたが提供します。これは、[〜#〜] post [〜#〜]要求に応答し、Webhook要求を処理するコントローラーの1つでのアクションです。リモートサービスに何かが変更されるたびに、リモートサービスは指定されたコールバックURLにリクエストを送信するため、actionコードがトリガーされます。

survey createdイベントで例を示します。まず、このイベントのcallbackアクションを定義します。ここで、Webhookからのリクエストを処理します。述べたように ここ ウェブフックは次の本文で応答します:

survey_creator_name=&survey_name=MADE+A+NEW+SURVEY&[email protected]&survey_url=http%3A%2F%2Fexample.com%2Fsurveys%2Fbob%2Fmade-a-new-survey%2F``

ヘッダーはそのままにしておきましょう。重要な情報は含まれていません。利用可能なボディパラメータ(survey_creator_namesurvey_nameなど)は、リモートサービスで利用可能な新しい調査に関するすべての詳細を反映します。それでは、このリクエストを処理するコールバックアクションを書いてみましょう:

class HooksController

  def survey_created_callback
    # If the body contains the survey_name parameter...
    if params[:survery_name].present?
      # Create a new Survey object based on the received parameters...
      survey = Survey.new(:name => params[:survey_name]
      survey.url = params[:survey_url]
      survey.creator_email = params[:survey_creator_email]
      survey.save!
    end

    # The webhook doesn't require a response but let's make sure
    # we don't send anything
    render :nothing => true
  end

end

このためのルートを追加しましょう(config/routes.rb内):

scope '/hooks', :controller => :hooks do
  post :survey_created_callback
end

これにより、POST /hooks/survey_created_callbackルートが有効になります。

次に、このコールバックURLをWebhooksAPIにサブスクライブする必要があります。まず、知りたいと思うでしょう どのフック が利用可能です。これを行うには、/api/v2/webhooks/にGETリクエストを送信します。応答には、イベント名調査、およびコレクターがあります。パラメーター。

最後に、次の内容でPOST /api/v2/webhooks/subscribe/ URLにリクエストを送信することにより、前述のフックの1つに subscribe します。

{
  "subscription_url": "http://your-absolute-url.com/hooks/survey_created_callback",
  "event": "[EVENT NAME FROM THE HOOKS LIST]",
  "survey": "[SURVEY FROM THE HOOKS LIST]",
  "collector": "[COLLECTOR FROM THE HOOKS LIST]"
}

これに対する応答は、フックが正常に作成された場合はコード201になり、同じコールバックURLのWebhookがすでに存在する場合はコード409になります。または何か他のもの、これがうまくいかなかった場合:)

これで、リモートサービスで調査を作成し、それがRailsアプリで複製されるのを確認することで、フックをテストできます。

お役に立てれば...

62
lipanski