目次
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/create と orders/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 件入れてみてください。確認メールより先に届きます。