本ページでは、eギフトの受取り期限が切れてキャンセルされた子注文を検知し、対応する親注文がキャンセルされていない場合に「未キャンセル」タグを自動付与する方法をご案内します。
通常、eギフトの有効期限が切れた際は、アプリの仕様により親注文・子注文ともに自動でキャンセル処理が行われます。
しかし、何らかの原因によって「返金はされているが、親注文のみがキャンセルされずに残ってしまう」ケースがまれに発生することがあります。
本ページでご案内するワークフローを設定しておくことで、そのようなキャンセル漏れの親注文に自動でタグが付与され、店舗様の注文一覧画面から該当の注文を素早く発見・確認できるようになります。
本ワークフローは、以下の条件をすべて満たしている注文を対象に実行されます。
対象項目 | 満たすべき条件 |
子注文のステータス | 注文ステータスが「キャンセル済み」になっていること |
子注文のタグ | 「受取り期限切れ」タグが付与されていること |
親子注文の紐付けタグ | 子注文に「#親注文番号:子注文名」の形式のタグ(例:#1388:子注文)が付与されていること |
親注文の運用状態 | 親注文はキャンセルされていない状態であること |
本ワークフローは、以下のステップに沿って自動で処理を実行します。
ステップ | 処理区分 | 処理内容 |
1 | トリガー | 1時間ごとにワークフローが自動で定期実行されます。 |
2 | 子注文の検索 | 「受取り期限切れ」タグが付与されたキャンセル済みの子注文を自動で検索・抽出します。(※最大100件) |
3 | 親注文の特定 | 抽出した子注文のタグ情報から親注文番号を検出し、該当する親注文データを検索します。 |
4 | 条件判定とタグ付与 | 親注文がキャンセルされておらず、かつ「未キャンセル」タグが未付与の場合のみ、該当注文に「未キャンセル」タグを付与します。 |
Shopify管理画面 > アプリ > Shopify Flow を開く
「ワークフローを作成」をクリックする
「トリガーを追加」をクリックし、定期実行のスケジュールを設定
項目 | 設定値 |
トリガー | Scheduled time |
繰り返し | 1時間ごと(※店舗さまの運用に合わせて変更してください。) |
タイムゾーン | (GMT+09:00) Osaka / Asia/Tokyo |
「アクションを追加」をクリックし、期限切れでキャンセル済みの子注文を取得するための検索条件を設定
項目 | 設定値 |
アクション | Get order data |
Sort data by | Created at / 降順 |
Maximum number of orders | 100 |
データを絞り込むクエリを選択する | 高度 |
クエリを編集:
tag:'受取り期限切れ' AND status:cancelled取得件数の上限
注文は「作成日が新しい順(降順)」で取得されます。
1時間以内に受取期限切れでキャンセルされた子注文が100件以下の場合は問題ありません。
101件以上発生した場合は、一部の注文が取得対象外となる可能性があります。
「アクションを追加」し、「コードを実行 (Run code)」を設定します。子注文のタグから親注文名を抽出し、検索クエリを生成します。
前のステップからの入力を選択 (GRAPHQL)
GraphQL
query {
getOrderData {
tags
}
}
出力を定義 (SDL)
GraphQL
"The output of Run Code"
type Output {
"The query string for parent orders"
query: String!
}
コードを記述 (JAVASCRIPT)
JavaScript
export default function main(input) {
const parentNames = input.getOrderData.map(order => {
const parentTag = order.tags.find(t => t.match(/^#\d+:/));
return parentTag ? `name:${parentTag.split(':')[0]}` : null;
}).filter(Boolean);
const query = parentNames.length > 0
? parentNames.join(" OR ")
: "name:none";
return { query };
}
※タグ形式「#注文番号:子注文」の先頭「#数字:」にマッチさせて親注文名を抽出しています。includesでは正しくマッチしないため、上記の正規表現を使用してください。
Step 3で生成したクエリを使用して親注文を取得します。「アクションを追加」し、2つ目の「Get order data」を設定
項目 | 設定値 |
アクション | Get order data |
Sort data by | Created at / 降順 |
Maximum number of orders | 100 |
データを絞り込むクエリを選択する | 高度 |
クエリを編集:
{{ runCode.query }}取得した親注文リストを1件ずつ処理します。「For each」アクションを追加
項目 | 設定値 |
アイテム | getOrderData1 |
For eachの内部に「Condition(条件)」を追加し、以下の両方を満たす場合のみ後続の処理に進むよう設定
条件式(直接入力する場合)
高度な条件入力欄(またはコードビュー)を開き、以下の数式をそのまま貼り付けてください。
(getOrderData1Foreachitem.cancelledAt nil?) AND (getOrderData1Foreachitem.tags none? |tags_item| (tags_item == '未キャンセル'))画面のUIから選択して設定する場合
条件1:
getOrderData1Foreachitem.cancelledAtを選択し、「存在しない」を指定「AND」で条件を追加
条件2:「次のいずれでもない」を選択し、
getOrderData1Foreachitem.tagsを指定。展開されたタグリストの項目に対して「次の値と等しい」を選択し、「未キャンセル」と入力。※タグ名は店舗さまの運用に合わせて変更してください。
条件分岐の「True(はい)」の先にアクションを追加し、条件を満たした親注文に管理用のタグを付与する
項目 | 設定値 |
アクション | Add order tags |
Order | getOrderData1Foreachitem.id |
Tags | 未キャンセル |
設定が完了したら、画面右上の「ワークフローをオンにする」をクリックして稼働を開始する
想定通りの挙動にならない場合、以下をご確認ください。
挙動 | 原因 | 対処 |
子注文がStep 2でヒットしない | 「受取り期限切れ」タグが付いていない、または注文がキャンセルされていない | 子注文のタグとステータスを確認する |
親注文にタグが付かない | 親注文がすでにキャンセル済み、またはすでに「未キャンセル」タグが付与済み | 条件分岐の判定結果(キャンセル日時や既存タグ)を確認する |