Shopify の注文通知を数秒でスマートフォンに届ける

Shopify の Webhook をそのままスマートフォンへ。通常の注文は静かなプッシュ、高額な注文は少し強め、返金やキャンセルは対応が必要なときに。

更新日

目次

Shopify の注文メールは、メールアプリが同期したいと思ったタイミングで届き、自分でフィルタをかけたフォルダに落ち、12 ユーロの注文でも 1,200 ユーロの注文でも見た目は同じです。店を自分で回しているなら、それは信号の形として間違っています。

Webhook がこれを直します。Shopify はすべての注文を、あなたが指定した URL に POST します。Echobell はその POST を、鳴る大きさをあなたが決められる通知に変えます。

自分を中断してよい topic を選ぶ

Shopify は Webhook のイベント種別を topic と呼びます。ひとりで回している店なら、次の 4 つでほぼ足ります。

Topic意味緊急度
orders/create注文が入った。通常
orders/paid決済が完了した。実際に入ってきたお金だけを見たいならこちら。通常
orders/cancelled顧客がキャンセルした。梱包する前に知りたい。時間指定
refunds/create返金が実行された。時間指定

orders/createorders/paidどちらか一方にしてください。1 件の売上につき本当に 2 通ほしい場合を除きます。多くの店にとって誠実なのは orders/paid のほうです。

ステップ 1 —— チャンネルを作る

Echobell で「Shopify 注文」のような名前のチャンネルを作り、webhook URL をコピーして、POST のみ を有効にします。Shopify は必ず POST で送信します。

キャンセルと返金用にもっと強い別チャンネルがほしければ、今のうちに作って時間指定通知に設定しておきましょう。

ステップ 2 —— Shopify に Webhook を追加する

Shopify 管理画面で 設定 → 通知 → Webhook → Webhook を作成 を開きます。topic を選び、形式を JSON にして、チャンネル URL を貼り付けます。

保存時に Shopify がテスト payload を送ります。スマートフォンが震えれば経路は通っています。

ステップ 3 —— 実際に読むフィールドだけをテンプレートにする

Shopify の注文 payload は長く、1 件あたり 100 以上のフィールドがあります。必要なのはごく一部です。

タイトル

新規注文 #{{order_number}} · {{total_price}} {{currency}}

本文

{{customer.first_name}} {{customer.last_name}}
{{line_items[0].title}}

line_items は配列なので、line_items[0] が最初の商品です。Echobell のテンプレートは添字アクセスに対応していますが、ループはありません。3 点の注文でも最初の 1 点しか表示されません。それが問題なら、点数を横に添えましょう。

{{line_items[0].title}} · 合計 {{line_items.length}} 点

Stripe と違い、Shopify の total_price は小数の文字列(4900 ではなく "49.00")で届くので、計算なしでそのまま正しく読めます。

ステップ 4 —— 条件を使って topic ごとに振り分ける

複数の topic を 1 つのチャンネルに向けた場合、Shopify はヘッダーでどれなのかを教えてくれます。

header["x-shopify-topic"] == "orders/paid"

管理画面でチャンネルごとに Webhook を作らずに挙動を分ける、いちばんきれいな方法です。

大口の注文だけ起こしてほしい

多くの店主が本当に望むのはこの形です。すべての注文は静かなチャンネルへ、しきい値を超えたものだけが鳴るチャンネルへ。

2 つ目のチャンネルを作り、時間指定通知に設定し、そこにもう一つ orders/paid の Webhook を向けて、条件を与えます。

total_price > 500

これで普通の日は背景のざわめきになり、900 ユーロの注文は体で感じられるものになります。

この構成でできないこと

HMAC の検証はしません。 Shopify はすべての Webhook を X-Shopify-Hmac-Sha256 ヘッダーで署名します。Echobell はそれを検証しないので、見知らぬ相手を締め出しているのはチャンネル URL だけです。秘密として扱い、POST のみ を有効なままにしてください。偽の注文通知が実害につながるなら、前段に自前のエンドポイントを置いて HMAC を検証し、そこから Echobell を呼びましょう。

Shopify は同じ Webhook を 2 回送ることがあります。 失敗時に再送しますが、再送は重複排除されません。通知は「その注文を見に行く合図」として扱い、注文件数として扱わないでください。真実は Shopify 管理画面にあります。

在庫系の topic はすぐうるさくなります。 inventory_levels/update は自分の手動編集も含め、あらゆる在庫の増減で発火します。在庫僅少の通知がほしいなら条件で厳しく絞らないと、昼までに後悔します。

よくある質問

これに Shopify アプリは必要ですか?

不要です。設定 → 通知 の Webhook は管理画面に組み込まれており、アプリもパートナーアカウントもコードも要りません。

倉庫の担当者に、管理画面を見せずに注文だけ見せられますか?

できます。チャンネルを共有してください。彼らが受け取るのは通知だけで、それ以外はありません。管理画面へのアクセスもなく、テンプレートに含めた以上の顧客情報も渡りません。

通知に顧客名を入れるべきですか?

これはあなたの判断ですが、意識して決める価値があります。テンプレートに入れたものはロック画面に表示されます。動くかどうかを決めるには、注文番号と合計金額で足りることが多いはずです。

チャージバックで電話を受け取れますか?

Shopify Payments を使っている店舗では、異議申し立ては disputes/create topic で届きます。これを着信チャンネルに向けてください。注文系イベントの中で唯一、期限が付いているものです。

まとめ

Webhook 1 つ、テンプレート 1 つ、大きく鳴らしたければ条件を 1 つ。5 分ほどで済み、注文ページを更新し続ける習慣がなくなります。

iPhone 版 Echobell をダウンロード、または Google Play で入手して、テスト注文を 1 件入れてみてください。確認メールより先に届きます。


関連記事