コードを実行
「コードを実行」アクションは、JavaScript を実行します。ワークフローの前のステップから「コードを実行」アクションへの入力としてデータを渡し、後続のステップで使用される値を返すことができます。
フィールド
「コードを実行」アクションには、以下のフィールドが含まれています。
| フィールド | 説明 |
|---|---|
| 入力 | 必須です。前のステップのデータを「コードを実行」アクションへの入力として使用するための GraphQL クエリです。 |
| 出力 | 必須です。アクションによって返されるデータの表現で、GraphQL のスキーマ定義言語 (SDL) で定義されます。 |
| コード | 必須です。「コードを実行」アクションが実行する JavaScript です。 |
入力データ
入力データは、「コードを実行」アクションの前に行われるステップから渡すことができます。このデータを含めるには、「入力」フィールドに GraphQL クエリを記述します。クエリから返されたデータは、慣例的に main と呼ばれる、export default でマークされた関数への input 引数として利用できます。
入力クエリは、Flow 環境データに対するクエリであり、Shopify Admin API へのクエリではありません。そのため、入力データに Shopify クエリを挿入することはできません。さらに、クエリ内の edges と nodes は Flow によって処理されるため、これらや他のページング構文をクエリに追加する必要はありません。
注文メモと項目名を取得する入力の例:
{
order {
note
lineItems {
title
}
}
}このデータは、コード内で使用できる input 変数に変換されます。
export default function main(input) {
// input.order.note
// input.order.lineItems[0].title
}入力は、関数シグネチャで分割代入することもできます。
export default function main({order}) {
// order.note
// order.lineItems[0].title
}メタフィールド
「コードを実行」で単一のメタフィールド値にアクセスするには、まずメタフィールドを Flow の環境データに追加する必要があります。これは、「コードを実行」以外のアクションまたは条件で実行できます。たとえば、「出力のログ記録」アクションを追加してから、指示に従ってメタフィールドを追加することができます。
メタフィールドがワークフロー環境に追加された後、「コードを実行」でアクセスできます。たとえば、giftMessage というエイリアス名の注文メタフィールドを追加したとします。その場合、入力クエリで次のようにアクセスできます。
{
order {
giftMessage {
value
}
}
}出力データ
「コードを実行」アクションは、カスタムデータを返すことができます。コードが返すデータのタイプを定義するには、「出力」フィールドと GraphQL の スキーマ定義言語 (SDL) を使用します。サポートされている出力タイプは String、Int、Float、Boolean、ID で、必須フィールド、リスト、カスタムデータの指定方法は SDL の仕様に従います。
たとえば、giftMessage という名前の文字列と totalGifts という名前の数値を返すには、次のようにします。
type Output {
"The message to include in the gift"
giftMessage: String!
"The total number of gifts"
totalGifts: Int!
}コメントは任意ですが、Flow UI でデータを説明するために使用されます。このデータを JavaScript コードで出力するには、タイプに一致するオブジェクトを次のように返します。
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}より複雑なデータを返すために、カスタムタイプを定義することもできます。たとえば、message という名前の文字列と amount という名前の数値を含む Gift という名前のタイプを返すには、次のようにします。
type Output {
"The gift to send"
gifts: [Gift!]!
}
type Gift {
"The message to include in the gift"
message: String!
"The total number of gifts"
amount: Int!
}このアクションに続くステップでこのデータにアクセスするには、「コードを実行」アクションの設定で定義した Output スキーマに従って型付けされる、「コードを実行」という名前の変数を使用します。この変数は、条件とアクションの両方で使用できます。
Console.log
トラブルシューティングの目的で、console.log を使用して Flow のワークフロー実行ログにデータを出力できます。出力は、ワークフローの実行ログに表示されます。たとえば、以下は有効です。
export default function main(input) {
console.log('Hello, world!');
//Hello, world!
console.log(input);
// { order: { note: 'Hello', lineItems: [ { title: 'World' } ] } }
console.log(input.order, 'is the order');
// { note: 'Hello', lineItems: [ { title: 'World' } ] }
// is the order
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}「コードを実行」アクションでは、console.info、console.error、またはその他の関数を使用することはできません。
例
コードアクションの例は、Flow の例のリポジトリで確認できます。
制限事項
「コードを実行」アクションには、以下の制限事項があります。
- 「コードを実行」アクションは ECMA2020 JavaScript をサポートしています。NodeJS や CommonJS API、モジュールのインポートはサポートしていません。
- コードで HTTP コール (
fetch) を行うことはできません。 - ランダム関数やクロックベースの関数は使用できません。
scheduledAtやcreatedAtなどの日付データは、入力として渡すことができます。 - Console.log は、ブラウザのコンソールにログを記録しません。
- ペイロードサイズを節約するため、出力データペイロードは後続のステップで使用される変数のみを返します。
- 「コードを実行」アクションに メタフィールドエイリアス を直接追加することはできません。これを実現するには、このページのメタフィールドセクションを確認してください。
さらに、以下の制限が適用されます。
- 入力データクエリは 5000 文字に制限されています。
- 出力データスキーマは 5000 文字に制限されています。
- 出力データペイロードと Console.log の出力は、合計で 50KB に制限されています。
- コードの長さが 50000 文字を超えることはできません。
- 合計実行時間は 5 秒に制限されています。
- メモリ使用量は 10MB に制限されています。
テンプレート
新規注文に無料 (100% ディスカウント) のアイテムを追加する
このテンプレートは、アイテムの在庫がある場合に、ディスカウントされた無料アイテムを新規注文に追加します。在庫を確認して 100% のディスカウントを適用し、お客様に通知せずに注文を更新します。このワークフローは、以下のシナリオでオートメーションを追加するのに役立ちます。
- 注文にサプライズの無料アイテムを含めることで、お客様の満足度を高めます。
- 新商品やあまり知られていない商品を無料サンプルとして注文に追加することで、宣伝します。
- 無料アイテムの追加とディスカウントを自動化することで、プロモーションを効率化します。
非アクティブな返品をキャンセルする
一定期間内に返金または在庫補充されていない返品を自動的にキャンセルします。テンプレートを表示
「コードを実行」アクションを使用して、プレフィックス付きのタグを商品のメタフィールドに変換する
このワークフローは、「color:」などのプレフィックスで始まるタグを、商品のメタフィールドリストに追加します。タグとメタフィールドリスト内の既存のアイテムを解析するために、「コードを実行」アクションを使用します。ワークフローは商品が作成されたときに実行されますが、既存の商品に対して手動で実行することもできます。テンプレートを表示
お客様がある商品の複数のバリエーションを注文したときに通知を送信する
お客様が同じ商品の複数のバリエーションを注文したときに、メール通知を受け取ります。テンプレートを表示
注文にバンドルが含まれる場合に通知を送信する
このワークフローは注文が作成されると開始され、注文内のいずれかの商品がバンドルの一部として購入されたかどうかを確認します。見つかった場合は、バンドルの詳細を含む内部メールが送信されます。さらに、このワークフローは、注文内にバンドルが含まれているかどうかを検出する必要があるあらゆるユースケースの出発点として使用できます。テンプレートを表示
関連付けられた UTM キャンペーンを注文にタグ付けする
注文に、関連する UTM キャンペーンの名前のタグを追加します。テンプレートを表示