Запуск кода
Действие «Запуск кода» выполняет код JavaScript. Вы можете передавать данные из предыдущих шагов рабочего процесса в качестве входных данных для действия «Запуск кода» и возвращать значения для использования на последующих шагах.
На этой странице
Поля
Действие «Запуск кода» содержит следующие поля.
| Поле | Описание |
|---|---|
| Входные данные | Обязательное поле. Запрос GraphQL для использования данных из предыдущих шагов в качестве входных данных для действия «Запуск кода». |
| Выходные данные | Обязательное поле. Представление данных, возвращаемых действием, определенное на языке определения схемы GraphQL (SDL). |
| Код | Обязательное поле. Код JavaScript, который будет выполнен действием «Запуск кода». |
Входные данные
Входные данные можно передавать из шагов, которые выполняются перед действием «Запуск кода». Чтобы включить эти данные, вы можете написать запрос GraphQL в поле «Входные данные». Данные, возвращенные запросом, будут доступны в качестве аргумента input для функции, помеченной как export default и условно называемой main.
Входной запрос — это запрос к данным среды Flow, а не к Shopify Admin API. Поэтому вы не можете вставлять запрос Shopify во входные данные. Кроме того, Flow обрабатывает edges и nodes в запросе, поэтому вам не нужно добавлять их или другой синтаксис постраничной навигации в свой запрос.
Пример входных данных для получения примечания к заказу и названия позиции заказа:
{
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
}
}
}Выходные данные
Действие «Запуск кода» может возвращать пользовательские данные. Чтобы определить тип данных, которые будет возвращать код, используйте поле «Выходные данные» и язык определения схемы (SDL) GraphQL. Поддерживаемые типы выходных данных: 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. Чтобы вывести эти данные в коде JavaScript, верните объект, соответствующий типу:
export default function main(input) {
// your code
return {
giftMessage: 'Hello',
totalGifts: 1,
};
}Вы также можете определить пользовательский тип для возврата более сложных данных. Например, чтобы вернуть тип Gift, который содержит строку message и число amount:
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!
}Чтобы получить доступ к этим данным на последующих шагах, используйте переменную «Запуск кода». Её тип будет определён в соответствии со схемой Выходные данные, которую вы зададите в конфигурации действия «Запуск кода». Эту переменную можно использовать как в условиях, так и в действиях.
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.
Ограничения
Действие «Запуск кода» имеет следующие ограничения:
- Действие «Запуск кода» поддерживает JavaScript стандарта ECMA2020. Оно не поддерживает API NodeJS или CommonJS, а также импорт модулей.
- Код не может выполнять HTTP-вызовы (
fetch). - Нельзя использовать функции, основанные на случайных числах и времени. Данные о дате, например
scheduledAtилиcreatedAt, можно передать в качестве входных данных. - Console.log не записывает данные в консоль браузера.
- Для уменьшения размера полезной нагрузки в выходных данных возвращаются только те переменные, которые используются на последующих шагах.
- Нельзя добавить псевдоним метаполя непосредственно в действии «Запуск кода». Для этого ознакомьтесь с разделом «Метаполя» на этой странице.
Кроме того, действуют следующие ограничения:
- Запрос входных данных ограничен 5000 символов.
- Схема выходных данных ограничена 5000 символов.
- Суммарный объём полезной нагрузки выходных данных и вывода Console.log ограничен 50 КБ.
- Длина кода не может превышать 50 000 символов.
- Общая продолжительность выполнения ограничена 5 секундами.
- Использование памяти ограничено 10 МБ.
Шаблоны
Добавление бесплатного товара (со 100% скидкой) в новые заказы
Этот шаблон добавляет бесплатный товар со скидкой в новые заказы, если товар есть в наличии. Он проверяет товарные запасы, применяет 100% скидку и обновляет заказ без уведомления клиента. Этот рабочий процесс может помочь в автоматизации следующих сценариев:
- Повышение удовлетворённости клиентов путём добавления в их заказ бесплатного товара-сюрприза.
- Продвижение новых или малоизвестных товаров путём их добавления в заказы в качестве бесплатных образцов.
- Оптимизация рекламных акций за счёт автоматизации добавления бесплатных товаров и применения скидок.
Отмена неактивных возвратов
Автоматическая отмена возврата, если по нему не был произведён возврат средств или товар не был возвращён на склад в течение определённого периода времени. Посмотреть шаблон
Преобразование тегов с префиксом в метаполе товара с помощью действия «Запуск кода»
Этот рабочий процесс берёт теги с определённым префиксом (например, 'color:') и добавляет их в список метаполей товара. Он использует действие «Запуск кода» для разбора тегов и существующих элементов в списке метаполей. Рабочий процесс запускается при создании товара, но его также можно запустить вручную для уже существующих товаров. Посмотреть шаблон
Отправка уведомления, когда клиент заказывает несколько вариантов одного товара
Получение уведомления по электронной почте, когда клиент заказывает несколько вариантов одного и того же товара. Посмотреть шаблон
Отправка уведомления, когда заказ содержит комплект
Этот рабочий процесс запускается при создании заказа и проверяет, были ли какие-либо товары в нём приобретены в составе комплекта. При обнаружении такого товара отправляется внутреннее электронное письмо с информацией о комплекте. Кроме того, вы можете использовать этот рабочий процесс как основу для любого сценария, где необходимо определить наличие комплекта в заказе. Посмотреть шаблон
Добавление в заказы тегов связанной UTM-кампании
Добавляет в заказы теги с названиями всех связанных UTM-кампаний. Посмотреть шаблон