ЯoomeR

プログラミング~実装とエラー解決と、時々、AI~

ShopifyのWebhookを使って、購入時にSlack通知されるようにしよう[Rails]

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設定画面に「テスト送信」のボタンがあるので、こちらを押下すればテストデータが送信される。

短時間で何度も実行すると、一時的に使用できなくなるようである。

その場合はテスト購入を行おう。