Shopify Flow의 변수
변수는 워크플로가 실행될 때 값으로 대체되는 플레이스 홀더입니다. 이러한 변수는 워크플로와 관련된 고객, 주문 및 제품의 속성을 설명합니다. 예를 들어 주문 번호, 주문 가격, 고객 이름 등에 대한 변수가 있습니다.
Flow는 Shopify 테마와는 다른 Liquid 버전을 사용하며 GraphQL 관리자 API를 통해 사용 가능한 모든 변수에 액세스할 수 있습니다.
변수의 이름은 대부분 자체적으로 설명이 됩니다. 예를 들어, 제품 이름을 표시하는 변수는 {{ product.title }}
입니다. 메시지를 보내면 이 변수는 주문한 제품의 이름(Large Coffee Mug
)으로 바뀝니다.
작업에 변수 추가
변수 추가 링크가 포함된 텍스트 필드에 변수를 추가할 수 있습니다. 관련 필드 아래에 있는 변수 추가 링크를 클릭한 다음 목록에서 변수를 선택합니다.
변수 추가 목록의 변수는 필터링되어 선택한 트리거에 적용되는 변수만 볼 수 있습니다. 목록에서 변수를 선택하면 형식이 올바르게 지정되고 텍스트 상자에 추가됩니다.
Flow는 거의 모든 GraphQL 관리자 API 필드를 지원합니다.
Liquid 변수
Liquid 코드 작성 경험이 있는 개발자는 Liquid를 사용하여 변수를 작성하거나 변수 추가 링크를 사용하여 삽입하는 변수를 편집할 수 있습니다. 자세한 내용은 GraphQL 관리자 API 참조를 참조하세요.
조건부 및 반복 태그
워크플로 메시지에 Liquid 변수 태그를 수동으로 추가할 수 있습니다. 이러한 태그를 사용하여 메시지에 더 많은 내용을 포함할 수 있습니다.
예를 들어, for loop
객체를 사용하여 주문의 품목 품목과 같은 객체 목록을 반복할 수 있습니다. 이러한 태그를 사용하면 주문의 각 품목에 대한 제품명, SKU, 가격, 수량 등의 세부 정보를 포함하는 메시지를 생성할 수 있고, 받는 사람이 Shopify 관리자에서 해당 정보를 찾을 필요가 없도록 저장할 수 있습니다.
Flow는 다음 Liquid 조건부(또는 제어 흐름) 태그를 지원합니다.
- 경우
- 하지 않으면
- Elsif/else
- 케이스/시기
- and/or(여러 조건)
Flow는 또한 다음 Liquid 반복 태그를 지원합니다.
필터
Flow에서는 다음과 같은 Liquid 필터를 지원합니다.
필터 이름 | 필터 유형 |
---|---|
abs | 수학 |
추가 | 문자열 |
at_least | 수학 |
at_most | 수학 |
대문자 | 문자열 |
Ceil | 수학 |
Concat | 배열 |
날짜 | 추가 |
default | 추가 |
divided_by | 수학 |
다운 케이스 | 문자열 |
탈출 | 문자열 |
first | 배열 |
바닥 | 수학 |
가입 | 배열 |
마지막 | 배열 |
lstrip | 문자열 |
지도 | 배열 |
마이너스 | 수학 |
모듈로 | 수학 |
newline_to_br | 문자열 |
플러스 | 수학 |
앞 | 문자열 |
제거 | 문자열 |
remove_first | 문자열 |
교체 | 문자열 |
replace_first | 문자열 | 역방향 | 배열 |
라운드 | 수학 |
rstrip | 문자열 |
크기 | 배열 |
조각 | 문자열 |
정렬 | 배열 |
분할 | 문자열 |
스트립 | 문자열 |
strip_html | 문자열 |
strip_newlines | 문자열 |
시간 | 수학 |
자르다 | 문자열 |
tratematwords | 문자열 |
uniq | 배열 |
upcase | 문자열 |
url_encode | 문자열 |
위치 | 배열 |
변수 예제
예를 들어, 고객이 한 주문에 $500 이상 지출할 때 직원에게 이메일을 전송하도록 워크플로를 생성한다고 가정해 보겠습니다. 그러면 주문 생성됨 트리거를 사용해 워크플로를 생성하고, 총 주문 금액이 $500 이상이면 참이 되고 내부 이메일 보내기 작업을 사용하도록 조건을 설정합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
입력 | 출력 |
---|---|
$ {{ order.totalPriceSet.shopMoney.amount }} 주문에 대한 감사 인사를 직접 {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }})에게 보내주십시오. | $763.42 주문에 대한 감사 인사를 직접 Jeanne Dupont(jeanne@example.com)에게 보내주십시오. |
제품 재고가 줄어들어 재고를 보충하기 위해 주문해야 하는 경우 직원에게 알리기로 결정했습니다. 그러면 재고 수량 변경 완료 트리거로 시작하는 워크플로를 생성하고 이전 재고 수량이 10 이하가 되면 참이 되도록 조건을 설정합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
입력 | 출력 |
---|---|
{{ product.title }} 제품을 재주문하십시오. owner@store.com으로 이메일을 보내 구매 주문을 받았는지 확인해야 합니다. | 하이웨이스트 레깅스(검은색) 제품을 재주문하십시오. owner@example.com으로 이메일을 보내 구매 주문을 받았는지 확인해야 합니다. |
위험 수준이 높은 주문을 취소하려고 하지만 직원이 주문을 수동으로 취소하는 것을 선호합니다. 그러면 주문 생성됨 트리거로 시작하는 워크플로를 생성하고 주문의 위험 수준이 높음인 경우 조건을 참으로 설정합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
입력 | 출력 |
---|---|
Shopify 스토어에서 사기 위험이 높은 주문을 받았습니다. 주문 생성으로 보내기 전에 이 주문을 바로 취소하고 싶습니다. {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} 새 주문 상태를 확인하십시오. 감사합니다! |
Shopify 스토어에서 사기 위험이 높은 주문을 받았습니다. 주문 생성으로 보내기 전에 이 주문을 바로 취소하고 싶습니다. #1001 Dupont, Jeanne jeanne@example.com 새 주문 상태를 확인하십시오. 감사합니다! |
for 루프 예제
주문을 받은 후 주문된 제품이 포함된 메시지를 보내는 것이 유용할 수 있습니다. 코드 블록을 반복적으로 실행하는 for loop
를 사용하여 이를 수행할 수 있습니다. 변수를 지원하는 텍스트 필드는 for 루프 및 forloop 객체도 지원합니다.
예를 들어, 주문의 모든 SKU(재고 관리 코드) 및 수량 목록을 반환하는 워크플로를 생성하려고 합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
입력 | 출력 |
---|---|
주문 요약: {% for a in order.lineItems %} SKU(재고 관리 코드): {{a.sku}}({{a.quantity}}), {% endfor %} |
주문 요약: 8987097979(50) 8877778887(3) 888998898B(1) |
제품 이름, SKU(재고 관리 코드), 품목당 가격 및 고객의 배송 정보를 포함하여 이메일에 더 많은 정보를 추가하기로 결정했습니다 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
입력 | 출력 |
---|---|
주문 요약: {% for a in order.lineItems %} 제품: {{a.title}} SKU(재고 관리 코드): {{a.sku}} 가격(단위당): ${{a.originalUnitPriceSet.shopMoney.amount}} 수량: {{a.quantity}} {% endfor %} |
주문 요약: 제품: 하이웨이스트 레깅스(검은색) SKU(재고 관리 코드): 8987097979 가격(단위당): $8.49 수량: 5 제품: 운동용 양말(파란색) SKU(재고 관리 코드): 888998898B 가격(단위당): $5.61 수량: 2 |
특정 공급업체에서 제공한 품목의 판매를 추적해야 합니다. 내부 이메일 보내기 작업의 메시지 섹션에서 다음과 같은 변수를 사용하고 for loop
에 if
문을 포함합니다.
입력 | 출력 |
---|---|
판매된 Acme 제품: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} 제품 이름: {{x.title}} SKU(재고 관리 코드): {{x.sku}} {% endif %} {% endfor %} |
판매된 Acme 제품: 제품 이름: 하이웨이스트 레깅스(검은색) SKU(재고 관리 코드): 8987097979 |
Shopify Flow의 복잡한 데이터 개체
Shopify Flow는 다음과 같은 이유로 배열 및 개체 출력을 지원하지 않습니다.
- GraphQL API에 필수가 아닌 데이터 출력이 사용 중지되었으며, 워크플로 실패의 원인이 되는 용량이 큰 쿼리를 생성할 수 있습니다.
- 새 기능이 도입되면 API 필드가 새로 추가되어 워크플로가 중단될 수 있습니다.
너무 많은 데이터가 자동으로 전송되면 워크플로가 실패합니다. 따라서 배열 및 개체를 직접 호출하는 대신 배열을 반복하고 필요한 필드만 포함하도록 합니다.
예를 들어, {{ order.lineItems }}
를 직접 호출하는 대신 다음 형식을 사용하여 특정 필드를 호출하십시오. 이 예제에는 배열 또는 개체를 직접 호출하면 포함되는 모든 필드가 포함됩니다. 필요에 따라 필드를 복사하여 붙여넣으면 됩니다.
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}
{% for ca in li.customAttributes %}
{{ ca.key }}
{{ ca.value }}
{% endfor %}
{% for da in li.discountAllocations %}
{{ da.allocatedAmountSet.presentmentMoney.amount }}
{{ da.allocatedAmountSet.presentmentMoney.currencyCode }}
{{ da.allocatedAmountSet.shopMoney.amount }}
{{ da.allocatedAmountSet.shopMoney.currencyCode }}
{% endfor %}
{{ li.discountedTotalSet.presentmentMoney.amount }}
{{ li.discountedTotalSet.presentmentMoney.currencyCode }}
{{ li.discountedTotalSet.shopMoney.amount }}
{{ li.discountedTotalSet.shopMoney.currencyCode }}
{{ li.discountedUnitPriceSet.presentmentMoney.amount }}
{{ li.discountedUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.discountedUnitPriceSet.shopMoney.amount }}
{{ li.discountedUnitPriceSet.shopMoney.currencyCode }}
{% comment %}li.duties - omitted {% endcomment %}
{{ li.fulfillableQuantity }}
{{ li.fulfillmentService.callbackUrl }}
{{ li.fulfillmentService.fulfillmentOrdersOptIn }}
{{ li.fulfillmentService.handle }}
{{ li.fulfillmentService.id }}
{{ li.fulfillmentService.inventoryManagement }}
{% comment %}rest of location omitted{% endcomment %}
{{ li.fulfillmentService.location.name }}
{{ li.fulfillmentService.productBased }}
{{ li.fulfillmentService.serviceName }}
{% for sm in li.fulfillmentService.shippingMethods %}
{{ sm.code }}
{{ sm.label }}
{% endfor %}
{{ li.fulfillmentService.type }}
{{ li.fulfillmentStatus }}
{{ li.id }}
{{ li.image.altText }}
{{ li.image.height }}
{{ li.image.id }}
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
{{ li.image.width }}
{{ li.merchantEditable }}
{{ li.name }}
{{ li.nonFulfillableQuantity }}
{{ li.originalTotalSet.presentmentMoney.amount }}
{{ li.originalTotalSet.presentmentMoney.currencyCode }}
{{ li.originalTotalSet.shopMoney.amount }}
{{ li.originalTotalSet.shopMoney.currencyCode }}
{{ li.originalUnitPriceSet.presentmentMoney.amount }}
{{ li.originalUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.originalUnitPriceSet.shopMoney.amount }}
{{ li.originalUnitPriceSet.shopMoney.currencyCode }}
{% comment %}rest of product omitted{% endcomment %}
{{ li.product.title }}
{{ li.quantity }}
{{ li.refundableQuantity }}
{{ li.requiresShipping }}
{{ li.restockable }}
{{ li.sellingPlan.name }}
{{ li.sku }}
{% for tl in li.taxLines %}
{{ tl.priceSet.presentmentMoney.amount | json }}
{{ tl.priceSet.presentmentMoney.currencyCode | json }}
{{ tl.priceSet.shopMoney.amount | json }}
{{ tl.priceSet.shopMoney.currencyCode | json }}
{{ tl.rate | json }}
{{ tl.ratePercentage | json }}
{{ tl.title | json }}
{% endfor %}
{{ li.taxable }}
{{ li.title }}
{{ li.totalDiscountSet.presentmentMoney.amount }}
{{ li.totalDiscountSet.presentmentMoney.currencyCode }}
{{ li.totalDiscountSet.shopMoney.amount }}
{{ li.totalDiscountSet.shopMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledQuantity }}
{% comment %}rest of variant omitted{% endcomment %}
{{ li.variant.title }}
{{ li.variantTitle }}
{{ li.vendor }}
{% endfor %}
{
"lineItems": [
{% for li in order.lineItems %}
{% if forloop.first != true %},{% endif %}
{
"contract": {
{% comment %}rest of contract omitted{% endcomment %}
"id": {{ li.contract.id | json }}
},
"customAttributes": [
{% for ca in li.customAttributes %}
{% if forloop.first != true %},{% endif %}
{
"key":{{ ca.key | json }},
"value":{{ ca.value | json }}
}
{% endfor %}
],
"discountAllocations": [
{% for da in li.discountAllocations %}
{% if forloop.first != true %},{% endif %}
"allocatedAmountSet": {
"presentmentMoney" : {
"amount": {{ da.allocatedAmountSet.presentmentMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ da.allocatedAmountSet.shopMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.shopMoney.currencyCode | json }}
}
}
{% endfor %}
],
"discountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.discountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.shopMoney.currencyCode | json }}
}
},
"discountedUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.discountedUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"duties": [
{% for duty li.duties %}
{% if forloop.first != true %},{% endif %}
{
{% comment %}rest of duties omitted{% endcomment %}
"id": {{ duty.id | json }}
}
{% endfor %}
],
"fulfillableQuantity": {{ li.fulfillableQuantity | json }},
"fulfillmentService": {
"callbackUrl":{{ li.fulfillmentService.callbackUrl | json }},
"fulfillmentOrdersOptIn": {{ li.fulfillmentService.fulfillmentOrdersOptIn | json }},
"handle": {{ li.fulfillmentService.handle | json }},
"id": {{ li.fulfillmentService.id | json }},
"inventoryManagement": {{ li.fulfillmentService.inventoryManagement | json }},
{% comment %}fulfillmentService.inventoryManagement - omitted {% endcomment %}
"productBased": {{ li.fulfillmentService.productBased | json }},
"serviceName": {{ li.fulfillmentService.serviceName | json }},
"shippingMethods": [
{% for sm in li.fulfillmentService.shippingMethods %}
{% if forloop.first != true %},{% endif %}
{
"code": {{ sm.code | json }},
"label": {{ sm.label | json }}
}
{% endfor %}
],
"type": {{ li.fulfillmentService.type | json }}
},
"fulfillmentStatus": {{ li.fulfillmentStatus | json }},
"id": {{ li.id | json }},
"image": {
"altText": {{ li.image.altText | json }},
"height": {{ li.image.height | json }},
"id": {{ li.image.id | json }},
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
"width":{{ li.image.width | json }}
},
"merchantEditable": {{ li.merchantEditable | json }},
"name": {{ li.name | json }},
"nonFulfillableQuantity": {{ li.nonFulfillableQuantity | json }},
"originalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.originalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.shopMoney.currencyCode | json }}
}
},
"originalUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.originalUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"product": {
{% comment %}rest of Product omitted{% endcomment %}
"title": {{ li.product.title | json }}
},
"quantity": {{ li.quantity | json }},
"refundableQuantity": {{ li.refundableQuantity | json }},
"requiresShipping": {{ li.requiresShipping | json }},
"restockable": {{ li.restockable | json }},
"sellingPlan": {
"name": {{ li.sellingPlan.name | json }}
},
"sku": {{ li.sku | json }},
"taxLines": [
{% for tl in li.taxLines %}
{% if forloop.first != true %},{% endif %}
{
"priceSet": {
"presentmentMoney" : {
"amount": {{ tl.priceSet.presentmentMoney.amount | json }},
"currencyCode": {{ tl.priceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ tl.priceSet.shopMoney.amount | json }},
"currencyCode": {{ tl.priceSet.shopMoney.currencyCode | json }}
}
},
"rate": {{ tl.rate | json }},
"ratePercentage": {{ tl.ratePercentage | json }},
"title": {{ tl.title | json }}
}
{% endfor %}
],
"taxable":{{ li.taxable | json }},
"title":{{ li.title | json }},
"totalDiscountSet": {
"presentmentMoney" : {
"amount": {{ li.totalDiscountSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.totalDiscountSet.shopMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledDiscountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledDiscountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledOriginalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledOriginalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledQuantity": {{ li.unfulfilledQuantity | json }},
"variant": {
{% comment %}rest of variant omitted {% endcomment %}
"title": {{ li.variant.title | json }}
},
"variantTitle": {{ li.variantTitle | json }},
"vendor": {{ li.vendor | json }}
}
{% endfor %}
]
}