背景
ShopifyとNextEngineの標準連携では、NextEngineで出荷処理を行うと、自動的にShopifyへ出荷情報が登録され、お客様に発送通知メールが届きます。
しかし、Shopifyに複数のロケーション(倉庫)を設定すると、この標準連携も動作しなくなります。
本記事では、マルチロケーション環境でも発送通知を維持するために構築した仕組みを解説します。
通知が止まると顧客体験に直結するので、ここは優先度が高いですよね。
なぜ独自実装が必要なのか
標準連携が使えない状態では、NextEngineで出荷処理をしてもShopifyには反映されません。つまり:
- お客様に発送通知メールが届かない
- Shopify管理画面で出荷状況が更新されない
- 追跡番号がお客様に伝わらない
これらを解決するため、NextEngineの出荷データを取得してShopifyへ登録する仕組みを独自に構築しました。
出荷確定
マルチロケーションで動作しなくなる
通知
出荷確定
マルチロケーションでも動作
通知
出荷情報同期の仕組み
定期的なデータ取得
本システムでは、定期的にNextEngineから出荷確定データを取得し、Shopifyへ出荷情報を登録します。
標準連携のようにリアルタイムではありませんが、30分程度の間隔で同期されます。
運営者はNextEngineで通常どおり出荷処理を行うだけで、お客様への通知は自動で行われます。
運用フローを大きく変えずに済むのが大きな利点です。
配送会社と追跡番号の自動紐付け
Shopifyに出荷情報を登録する際、配送会社と追跡番号を正しく設定する必要があります。NextEngineに入力された配送会社名から自動的に判別し、追跡URLも生成します。
営業時間内のみの自動実行
深夜や早朝にシステムを動かしても意味がないため、営業時間に合わせて動作時間を設定できるようにしました。
データフローの全体像
平日 8:00-21:00 のみ実行
同時実行防止、25分TTL
前回同期時刻以降のデータを取得
複数店舗対応
追跡番号確認・重複チェック・配送会社判定
出荷情報を登録 → 顧客に自動通知
統計を記録
配送会社の自動判定
システムは配送会社名のキーワードから自動的に判定し、追跡URLを生成します。
国内配送会社
国際配送会社
処理結果のステータス
各注文の処理結果は以下のいずれかに分類されます:
ウォーターマーク方式による効率化
毎回すべての出荷データを取得するのではなく、「前回取得した最新の出荷日時」を記録しておき、それ以降のデータのみを取得します。
全データ取得
ウォーターマークとして保存
前回記録した日時以降のデータのみ取得
API呼び出し回数を最小化・処理時間を短縮
営業時間の判定ロジック
営業時間外にシステムを動かしても意味がありません。以下のロジックで実行を制御しています:
タイムゾーン変換
実行可否を判定
この設定は店舗ごとにカスタマイズ可能です。土日も営業する店舗では、週末も実行するように設定できます。
重複処理の防止
同じ出荷に対して通知が2回送られてしまうのを防ぐため、処理済みの出荷を記録しています。
判定に使用するのは以下の3つの情報を組み合わせたハッシュ値です:
- 注文ID
- 出荷日時
- 追跡番号
この組み合わせが一致する処理は、すでに完了しているとみなしてスキップします。記録は90日間保持され、それ以降は自動的に削除されます。
標準連携との違い
注意点
追跡番号が未入力の場合
NextEngineで追跡番号を入力せずに出荷確定した場合、その注文は「PENDING」状態となります。追跡番号が入力されると、次回の同期で自動的に処理されます。
配送会社が判定できない場合
登録されていない配送会社名の場合、追跡URLなしで通知が送られます。新しい配送会社を追加する場合は、キーワードとURLのマッピングを設定に追加します。
同期タイミングについて
標準連携と異なり、リアルタイムではなく定期的な同期となります。出荷処理からお客様への通知までに最大30分程度のタイムラグが発生しますが、運用上は問題ないレベルです。
まとめ
マルチロケーション環境では標準の発送通知機能が使えなくなりますが、NextEngine API と Shopify API を組み合わせることで、同等の自動通知を実現できます。
独自実装により、配送会社の追加やログの確認など、標準連携では難しかった柔軟な運用が可能になりました。