初回注文の「注文日→配送希望日」の間隔を、 定期購買の次回以降の注文に引き継ぐ方法

初回注文の配送リードタイムを基に、定期購買の次回お届け予定日・時間帯を自動調整できます。

定期購買アプリでは、初回注文時にお客様へ配送日時を指定させる機能がないため、配送日時指定アプリを併用して初回のみ配送希望日・時間帯を取得するケースがあります。

しかし、配送日時指定アプリで取得した配送希望日は、定期購買アプリの契約情報(次回お届け予定日)へ自動では連携されません

そのため、

  • 初回に「注文日から◯日後に届く」感覚を、次回以降も維持したい

  • お客様が指定した配送希望日を基準に、次回以降も同じリードタイムで届けたい

といったニーズが発生します。

本ノウハウでは、初回注文の「注文日→配送希望日」の間隔(リードタイム)」を算出し、それを次回お届け予定日に引き継ぐ方法を紹介します。

  • 「お届け日に合わせて注文日も変更する」を有効にしていないストアであること

    • 本ノウハウは「初回のリードタイムを引き継ぐ」設計です

      「お届け日に合わせて注文日も変更する」を有効にしている場合、「注文されてから届くまでの最短日数」として登録した日数がリードタイムとして計算されます

  • 配送日時指定アプリが、注文に以下のカスタム属性を付与していること

    • 配送希望日(日付として解釈可能な形式)

    • 配送時間帯

  • Shopify のプランがGrowプラン以上であること

    • ※ShopifyFlowでHTTPリクエストアクションを利用する必要があるため

  • 定期購買アプリのプランがENTERPRISEプランであること

    • ※アプリの公開APIを利用するため

  • 配送日時指定アプリと、定期購買一般設定の「お届け時間設定」に登録されている時間帯設定が一致していること

  1. 初回注文で、配送日時指定アプリ経由で配送希望日・時間帯が注文情報に保存される

  2. Shopify Flow が定期購買の初回注文をトリガーに起動

  3. 初回注文の「注文日→配送希望日」の差分(リードタイム)を算出

  4. 次回の基準日を元にリードタイムを加算し、次回お届け予定日を算出

  5. 定期購買アプリの 公開 API を利用して、契約の次回お届け予定日・時間帯を更新

  1. 以下を参考にShopifyFlowを作成

Bodyに入力するLiquidとクエリの例

Plaintext
{%- assign new_date = "" -%}
{%- assign delivery_time_value = "" -%}

{%- for customAttributes_item in order.customAttributes -%}
  {%- if customAttributes_item.key == '配送希望日' -%}
    {%- assign order_date = order.createdAt | date: "%Y-%m-%d" | date: "%s" -%}
    {%- assign delivery_date = customAttributes_item.value | date: "%s" -%}
    {%- assign date_parts = nextBillingDate
      | replace: "年", "-"
      | replace: "月", "-"
      | replace: "日", ""
      | replace: ":00頃", ""
      | replace: " ", " 00:00:"
    -%}
    {%- assign base_date = date_parts | date: "%Y-%m-%d" | date: "%s" -%}
    {%- assign diff_seconds = delivery_date | minus: order_date -%}
    {%- assign new_timestamp = base_date | plus: diff_seconds -%}
    {%- assign new_date = new_timestamp | date: "%Y-%m-%d" -%}
  {%- endif -%}

  {%- if customAttributes_item.key == '配送時間帯' -%}
    {%- assign delivery_time_value = customAttributes_item.value -%}
  {%- endif -%}
{%- endfor -%}

{
  "query": "mutation UpdateDelivery($id:String!, $date:Date!, $time:String!) { subscriptionContractUpdateDeliveryDate(subscriptionContractId: $id, nextDeliveryDate: $date, nextDeliveryTime: $time) { subscriptionContractId } }",
  "variables": {
    "id": {{ subscriptionContractId | json }},
    "date": {{ new_date | json }},
    "time": {{ delivery_time_value | json }}
  }
}