インベントリー(販売数量を参照)

商品カタログのinventoryフィールドは、FacebookショップやInstagramショッピングのアカウントで販売できる各商品の在庫レベルを表します。この値は商品詳細ページ(PDP)に反映され、購入者が購入できる数量を知るのに役立ちます。これを常に正確かつ最新の情報に保つことは、エクスペリエンス上重要です。在庫切れになった時にそれを知ることができます。不正確であると、過剰販売になる可能性があります。

注:inventoryフィールドは廃止され、新しいquantity_to_sell_on_facebookフィールドに置き換わります。しばらくはこの古いフィールド名も使えますが、新しい名前を使うことをおすすめします。このアップデートについて詳しくは、商品でサポートされているフィールド - Advantage+ カタログ広告とコマースをご覧ください。

: インベントリー設定されていない商品は、タグ付けできず、購入もできません。しかし、チェックアウトなしでAdvantage+ カタログ広告に使うことは可能です。

インベントリーの変動

inventoryフィールドは動的なものです。その値は、FacebookショップやInstagramショッピングのアカウントから利用者が商品を購入すると変動していきます。利用者が注文するたびに、該当商品のインベントリーレベルが減っていきます。

利用者側がキャンセル処理を開始すると、この値はコマースプラットフォームにより自動的に増えていきます。つまり、再び在庫に入れられます。販売者側からのキャンセルの場合は、キャンセルAPIエンドポイントrestock_itemsフィールドを設定することで、キャンセル時に商品を在庫に戻し、対応するインベントリーレベルを増やすことができます。

商品カタログのアップロードや他の手法を使って(インベントリー更新戦略を参照)指定した値は、現状を示す情報源と見なされ、当社のバックエンドでキャッシュに入れられている値はそれにより必ず上書きされます。

当社側で維持しているインベントリーカウントのタイプには、次のものがあります。

  • 指定インベントリー: 商品カタログのアップロードや他の手法(インベントリー更新戦略を参照)を使って指定した値です。
  • 購入可能インベントリー: カスタマーが購入できる値であり、未処理の注文も考慮に入れられます。

これらのインベントリータイプについて詳しくは、商品ライフサイクルをご覧ください。

在庫切れ商品

FacebookショップやInstagramショッピングのアカウントで利用者が商品を購入するにつれて、inventoryの値が減っていきます。この値が0に達すると、商品に「在庫切れ」のマークが付けられ、それ以上の購入はできなくなります。定期的に商品の在庫を補充するために最大限手を尽くしてください。「在庫切れ」商品はユーザーエクスペリエンスやブランドの評判を損ないます。

購入者が在庫切れ商品を見つけた場合、当社では、商品カタログ内のその商品のバリエーションのinventory値に基づいて、可能な限り、在庫のあるバリエーションの商品詳細ページに切り替えるようにしています。

取り扱い終了商品

商品の取り扱いが終了している場合、単にそれを商品カタログから削除すればよいと思うかもしれません。それはおすすめしません。

商品をカタログから削除すると、商品のタグや画像が表示されなくなるなど、思いがけない結果になる可能性があります。かなりの時間(数か月)が経過した後に初めて商品を削除するように強くおすすめします。

商品を削除する代わりに、取り扱い終了商品のvisibilityフィールドをstagingに設定してください。それによりコマースプラットフォームは、該当商品を既知のエンティティにリンクすることができ、さまざまな状況を穏便に処理できるようになります。

商品ライフサイクル

インベントリーが更新されるたびに、当社は指定インベントリーを更新します。その数値は、カスタマーが購入できる品目数と一致しません。当社は各ステータスの受注をトラッキングしており、未認知の注文を減算して、最終的に購入可能インベントリーを計算しています。この数値は、当社のプラットフォームの外部には公開されません。

購入可能インベントリー = 指定インベントリー - 未認知注文数

注文が認知されてから、それら認知された注文が当社のカウントから減算されるまで、30分のバッファーが取られています。その間に、注文を処理し、(カタログを使って)インベントリーの数値を更新することができます。

過剰販売

コマースプラットフォームで何千という業者に対応するため、同期インベントリー管理は意図的にサポートされていません。そのため、基本購入取引と、倉庫の在庫レベルが減ることは連動しないようになっています。インベントリーが複数のチャネルで共有されている場合、FacebookやInstagram上で予期せず過剰販売になってしまうかもしれません。これは、短期間限定数量販売の商品で発生することがあります。

過剰販売のために注文を実行できなくなった場合は、キャンセル処理を開始し、reason_codeOUT_OF_STOCKに設定してください。

過剰販売が頻繁に発生する場合は、注文処理の頻度を上げて、それに応じて商品のインベントリーレベルを調整することができます。

インベントリーの統合戦略

インベントリーは、統合のタイプに応じて、次の異なる方法で更新できます。

  • コマースマネージャUIを使う(小規模な商品セット、テストなどで)
  • スケジュールされたアップロードや手動アップロードによるフィード
  • フィードAPIを使用する
  • バッチAPIを使用する

インベントリー更新戦略

分散システムはその性質からして非同期であるので、インベントリーレベルをどんなにすばやく更新しても、商品カタログのinventory値との同期が取れないことがあります。競合状態を最小限にするために検討できる手法をいくつか下記に示します。

インベントリーの事前割振り

過剰販売を回避するのに最も有効な方法は、FacebookショップやInstagramショッピングのチャネルにインベントリーを事前に割り振ることです。販売チャネルごとに専用インベントリーを用意することにより、いずれかのチャネルで発生する販売が相互に影響することがなくなります。この戦略は、商品カタログの一部または全体に適用することができます。

長期販売商品

販売ペースが普通である商品や長く在庫している商品の場合、過剰販売のリスクは比較的低くなります。このような状況では、商品カタログの更新戦略を、次のようにシンプルにすることができます。

  • 毎日または毎時で更新するようスケジュールされたフィードを設定します。このフィードには、最新のinventory値を含め、すべてのフィールドが含まれていなければなりません。

短期販売商品

品薄または極度に動的なインベントリーの短期販売商品の場合、inventoryなどの揮発性の高いフィールドを、より適切なタイミングで更新すると良いでしょう。そのために、リアルタイムバッチAPIを使うことができます。一般的な戦略は次のとおりです。

  • 毎日または毎時で更新するようスケジュールされたフィードを設定します。このフィードには、商品カタログの必須フィールドをすべて含め、inventoryなどの揮発性フィールドは省いてください。このフィードの目的は、性質上より静的なフィールドを更新し、揮発性の高いフィールドの更新はリアルタイムAPIに任せることです。
  • inventoryなどの揮発性の高いフィールドの更新は、その値がバックエンドで変更になった時、あるいは一定の頻度で、リアルタイムバッチAPIを使って行います。一貫性を保つため、この手法で更新されるフィールドをフィードに含めないようにすることは重要です。

リアルタイムバッチAPIを使って更新する例を以下に示します。

curl \
  -d @body.json \
  -H "Content-Type: application/json"
  {
    "access_token": "<ACCESS_TOKEN>",
    "item_type": "PRODUCT_ITEM",
    "requests": [      
      {
        "method": "UPDATE",
        "retailer_id": "SKU1234567",
        "data": {
          "inventory": "1337",
        }
      }
    ]
  } https://graph.facebook.com/<CATALOG_ID/batch

バッチAPIリクエストは非同期です。リクエストステータスとその結果をチェックし、すべての更新が成功したことを確認してください。詳しくは、バッチAPIに関するドキュメントをご覧ください。

管理している商品の数が少ない場合、リアルタイムバッチAPIではなく、直接グラフAPIを使って商品ごとに個別に更新することもできます。グラフAPIのレート制限とスロットリングのため、このアプローチを適用できるのは、商品の数が少ない場合だけです。このアプローチを使って更新できる正確な商品数は、該当Facebookアプリに適用されるクオータに応じて異なります。経験則として、一度に1ダースを超える数を更新する場合にはリアルタイムバッチAPIを使うほうが良いでしょう。

ある商品内の特定のフィールドを更新するには、次のAPI呼び出しを実行します。

curl -d "inventory=1337" -X POST 
https://graph.facebook.com/<FACEBOOK_PRODUCT_ID>
access_token: PAGE_ACCESS_TOKEN

グラフAPIを使う場合は、Facebook商品IDを使います。バッチAPIを使う場合は、独自のID (retailer_id)を使います。

インベントリーのしきい値

過剰販売を回避するためによく使われる別の手法は、インベントリーを注意深く割り振るというものです。例えば、倉庫の状況からすると特定の商品が在庫切れになりそうな場合、商品カタログのインベントリーレベルをゼロに設定することができます。これは実質的に過小販売のための最適化になりますが、過剰販売に対処する上では助けになります。

各商品がどの程度の頻度で販売されているかを把握しているなら、商品を複数のバケットに分配し、各バケットの販売プロファイルに応じて適用するしきい値をそれぞれ変えることができます。多くの場合、短期販売商品ではしきい値を高くする必要があります。一方、長期販売商品では在庫切れマークを付けるためのしきい値を低く設定することができます。