人気商品の在庫が尽きたことに、受注の担当者が管理画面を開くまで気づけないことがあります。この記事では、Shopify のバリアント(色やサイズごとの商品)が在庫切れになったときと、在庫が戻ったときに Slack へ通知する手順を説明します。
結論
- Samurai App の「サービス連携」で
SHOPIFY_PRODUCT_VARIANT_OUT_OF_STOCKとSHOPIFY_PRODUCT_VARIANT_BACK_IN_STOCKを受け、「通知先へ送る」で Slack へ送ります。 - Shopify は「標準連携アプリがありません」と表示されるコネクタで、Shopify 側にアプリを作って自社の OAuth クライアントとして接続する準備が必要です。
- 届く内容にはバリアント名はありますが、商品名がありません。
- 注文の通知はこの記事では扱いません。サービス連携の出来事の一覧に、注文の出来事がないためです。
できること・できないこと
できること:
- バリアントの在庫が切れたときと、戻ったときの通知
- バリアント名、SKU、販売価格、商品 ID を本文に差し込むこと
Shopify の仕様から来る制約:
- 在庫切れの通知は、全ロケーションの合計が 0 になったときだけ届きます。 1 つの倉庫だけが空になっても、他のロケーションに在庫が残っていれば届きません。在庫復活も、合計が 0 を超えたときだけです。販売や補充のたびには届きません。
- 在庫が少なくなった時点では知らせません。 しきい値を決めて「残り 5 個」で通知する形は、この 2 つの出来事ではできません。
SHOPIFY_INVENTORY_LEVEL_UPDATEDはロケーションごとの数量の変化で届きますが、変化のたびに受信の費用がかかります。 - オンラインチャネルでは、オンライン在庫が切れたときだけ届きます。 Shopify の Webhook の説明に、チャネルによる条件が書かれています。
- 順序と配信は保証されません。 Shopify は Webhook の配信が常に保証されるわけではなく、順序も保証しないと案内し、定期的な照合を勧めています。この通知は気づくためのもので、在庫の正確な記録は Shopify の管理画面で見てください。
- バリアントごとに届きます。 4 色の商品がすべて切れると、4 件の通知になります。
用意するもの
- Shopify のストアと、アプリを作成してインストールできる権限
- 投稿先の Slack チャンネルと Incoming Webhook の URL
- Samurai App の管理者かマネージャーの権限(コネクタの追加とサービス連携のトリガーに必要です)
手順
完成すると、次のようなワークフローになります。

1. Samurai App でリダイレクト URI を控える
「コネクタ」画面の「コネクタ」タブで Shopify を検索します。「Shopify には標準連携アプリがありません」と表示され、「追加」のメニューは「自社の OAuth クライアントで追加」だけです。これを押すと、フォームに「Shopify 側に登録するリダイレクト URI」が出るので控えます。
2. Shopify 側でアプリを作る
Shopify の Dev Dashboard で「Apps」→「Create app」→「Start from Dev Dashboard」と進み、アプリに名前を付けます。「Versions」でバージョンを作り、スコープに read_products を入れて「Release」を押します。手順 1 のリダイレクト URI もアプリに登録します。
「App settings」の「Credentials」に Client ID と Client secret があるので控えます。「Install app」からストアにインストールします。
3. Samurai App で接続する
手順 1 のフォームに Client ID と Client secret を入れて保存します。「Scopes」欄を空にすると既定のスコープが使われ、入力すると既定を置き換えます。足すときは「例を使う」で既定を入れてから書き足します。接続後、自分のアカウントを「連携」します。
4. 通知先を登録する

Slack の Incoming Webhook の URL を、「設定」→「通知」の「通知先」に登録し、「テスト送信」で確認します。
5. ワークフローを作る
「ワークフロー」で新しく作り、「ワークフローの入力」に event(種類は「項目の組」)を足します。「ステップを追加」で「通知先へ送る」を足し、本文を書きます。
在庫切れ: {{input.event.title}}
バリアント ID: {{input.event.id}}
商品 ID: {{input.event.product_id}}
title はバリアント名で、Small / Blue のような値です。バリアントが 1 つだけの商品では Default Title になります。
届く内容のうち必ずあると明記されているのは id だけです。sku や barcode を差し込むなら、次の手順の最初の 1 件で項目があることを確認してから足してください。届いた内容にその項目がないと、空で送られるのではなくステップが失敗します。
6. 公開してトリガーを付ける
「バージョン」タブで「バージョン N を公開」を押し、「トリガー」タブの「サービス連携を追加」で Shopify と SHOPIFY_PRODUCT_VARIANT_OUT_OF_STOCK を選びます。在庫復活の通知は、文面を変えた別のワークフローを作って SHOPIFY_PRODUCT_VARIANT_BACK_IN_STOCK を付けます。
接続先の説明では、通知は在庫の変更から数秒後に届きます。テスト用の商品で在庫数を 0 にして、「実行」タブの「最近の実行」で届いた内容を確認します。
商品名を本文に入れたいとき
届く内容に商品名はありません。商品名を入れるには、通知の前に Shopify の操作 SHOPIFY_GET_PRODUCT のステップを足し、{{input.event.product_id}} を渡します。後のステップから、その結果の商品名を「変数」で選べます。
この操作は読み取りで、無人の実行でも動きます。管理者がこの操作を「毎回確認」にしている場合は、承認する人がいないので断られます。実行には既定で起動した人のアカウントが使われるので、担当者が変わる場合は「実行に使う認証情報」の「このワークフローに貸す」を確認してください。
動かないとき
- 在庫を 0 にしたのに届かない。 他のロケーションに在庫が残っていないか確認してください。全ロケーションの合計が 0 にならないと発火しません。
- ステップが失敗する。 差し込んだ項目が届いていない可能性があります。「実行」タブの入力で項目名を確認し、無いものを本文から外します。
- 接続がエラーになる。 Shopify 側に登録したリダイレクト URI と Samurai App の画面の値が一致しているか、アプリがストアにインストールされているかを見直します。
- 未公開で止まっている。 トリガーからの起動は公開版だけです。
よくある質問
特定の商品だけ通知できますか
まず、ステップの「条件分岐」で {{input.event.product_id}} を比べる方法があります。ただ、条件に合わず何も送らない出来事も受信として数えられ、1 件ごとに約 0.5 円かかります。
注文が入ったときの通知はできますか
サービス連携の出来事の一覧に注文の出来事がないので、この道では作れません。
必要なスコープは何ですか
バリアントの在庫の出来事が求めるのは read_products です。SHOPIFY_INVENTORY_LEVEL_UPDATED を使うなら read_inventory も必要です。