対象のフルフィルメントオーダーに対して、アプリから Shopify Shipping のラベルを購入できる新ミューテーション。購入は非同期で走り、結果をポーリングしてステータスを追跡する。
shippingLabelPurchase ミューテーションが追加された。ラベルの購入は基本的に Shopify 管理画面の操作が中心。アプリ側から API で「ラベルを買う」一連の処理は組み込みにくかった。
shippingLabelPurchase で、フルフィルメントオーダー・出荷日時・荷姿・重量・通知設定などを渡してラベルを購入。アプリのフローに組み込める。
ShippingLabelPurchaseResult を返し、アプリ側はその status を見て購入が完了したか追跡する設計。どの注文の出荷に対してラベルを買うか。購入対象(eligible)であることが前提。
いつ発送するか(shipping date and time)。
パッケージの詳細。箱種別・寸法など出荷物の情報。
出荷物の total weight。レート算定に効く。
顧客に出荷通知を送るかどうかの設定(customer notification preference)。
優先したいキャリアやサービスを指定可能。未指定なら Shopify が最安レートを選ぶ。
ラベル購入は非同期で実行され、ShippingLabelPurchaseResult の status を poll して進行を追う。
購入がまだ処理中の状態。完了するまでポーリングを続ける。
ラベルの購入に成功。購入済みラベルは shippingLabels から取得できる。
購入に失敗。詳細は errors から確認できる。
write_orders アクセススコープが必要。
操作するユーザーが buy_shipping_labels 権限を持っている必要がある。
API でラベルを購入する前に、ストアが Shopify Shipping の利用規約(terms of service)に同意している必要がある。
フルフィルメントオーダー・出荷日時・荷姿・重量・通知設定(必要なら希望レート)を渡す。
ShippingLabelPurchaseResult の status が PENDING_PURCHASE の間はポーリングを継続。
PURCHASED なら shippingLabels からラベル取得、PURCHASE_FAILED なら errors を見てリトライ/通知。
ミューテーションはラベルを直接返さず ShippingLabelPurchaseResult を返す。完了監視は status を poll する前提で実装する。同期完了を期待しないこと。
希望キャリア/サービスを渡さなければ Shopify が利用可能な最安レートを自動選択。コスト最適化なら省略、特定キャリア要件があるなら明示指定、と設計を分ける。
アプリの write_orders スコープだけでなく、実行ユーザーに buy_shipping_labels 権限が要る。権限不足のユーザーでは購入できない点を UI/エラー設計に織り込む。
errors で握るPURCHASE_FAILED 時は errors に詳細が入る。重複購入や課金事故を避けるため、失敗ハンドリングと冪等性(同一オーダーへの再実行)を必ず設計する。
ストアが Shopify Shipping の利用規約に同意していないと API 経由の購入はできない。導入時のオンボーディングで規約同意状態を確認し、未同意ストア向けの導線(管理画面で同意してもらう案内)を用意しておくと運用で詰まらない。
shippingLabelPurchase をバッチ実行。希望レート未指定で最安を採用し、結果を poll してまとめてラベル化。PENDING→PURCHASED/FAILED をステータス管理。失敗分だけ再投入する冪等設計にする。shippingLabelPurchase を実行。荷姿・重量・出荷日時を OMS のデータから渡し、購入済みラベルを shippingLabels から取り込む。buy_shipping_labels 権限、アプリに write_orders スコープが必要。導入前に対象ストアの規約同意状態をチェックする。shippingLabelPurchase で、配送ラベルの購入をアプリから自動化できる。write_orders+buy_shipping_labels+規約同意が条件。