- Step1.コントローラーを作成しよう
- Step2.ルーティングを設定しよう
- Step3.ShopifyサイドでWebhookを設定しよう
- Step4.RailsでSlackを扱えるようにする
- Step5.テスト送信を行い挙動確認する
Step1.コントローラーを作成しよう
class NotifyController < ApplicationController def index render json: { message: "available" } end def notify_order head :ok p "動作確認OK" client = Slack::Web::Client.new @costomer = client.chat_postMessage( channel: '#チャンネル名', text: "Slackに通知が送られています!" ) end end
今回は上記のように作成した。
チャンネル名は送信したいSlackのチャンネル名に、textは送りたい内容に編集すること。
head :ok について
Shopifyの仕様により、「200番台以外のレスポンスが行われた場合、48時間で19回のリトライを行い、失敗する場合はWebhookを削除する」ことになっている。(らしい)
他サイトなどでは「no_content」を記述し204レスポンスを返す記述になっていることもある。
が、恐らく現環境では「200番台」ではなく「200」でないと再送信されるようである。
筆者環境では数分ごとにSlackが送られてきて困った。
Step2.ルーティングを設定しよう
post 'notify_order' => 'notify#notify_order'
今回は上記のように設定している。
Step3.ShopifyサイドでWebhookを設定しよう
設定>通知>Webhookの作成 の順に選択する。
今回の場合、イベントは「注文作成」にする。
URLは「ngrokなどのURL + エンドポイント」を記述する。
この記事と同様の設定をしている場合は「ngrokなどのURL」部だけを書き換えれば良い。
ここまででWebhookの設定自体は完了である。
Step4.RailsでSlackを扱えるようにする
@murakami-mm(株式会社日本ピュアシステム)氏のこちらの記事を参考にすると良い。
これでWebhook、Slack両方の設定が完了した。
Step5.テスト送信を行い挙動確認する
挙動確認する方法は以下の通り。
実際にテスト購入する
ストアからテスト購入を行い、Slackに送信されるか確認する
テスト送信機能を使用する
ShopifyのWebhook設定画面に「テスト送信」のボタンがあるので、こちらを押下すればテストデータが送信される。
短時間で何度も実行すると、一時的に使用できなくなるようである。
その場合はテスト購入を行おう。