Generic selectors

Exact matches only

Search in title

Search in content

Post Type Selectors

Инструмент «Запуск JavaScript кода»

С помощью инструмента «Запуск JavaScript кода» вы можете добавить произвольный JS-код в связку. Запускаться будет тот код, который вы самостоятельно напишите в настройках этого шага.

Принцип работы инструмента

Сначала настраиваются «входные данные». Вы создаёте переменные, называете их и указываете, какие значения нужно «положить» в эти переменные. После этого в коде можно работать с этими переменными, а также создавать новые.

Далее нужно настроить «выходные данные»: вручную прописывается имя переменной, которую необходимо получить на выходе, и задаётся тип этой переменной. Во всех следующих шагах связки вам будут доступны поля, которые вы настроите в «выходных данных».

Важно! Мы не несём ответственность за работоспособность вашего кода и не можем оказывать поддержку. Используйте данный шаг только если вы умеете работать с языком JavaScript. Если в коде используется команда fetch, она не сработает — эта команда отключена по соображениям безопасности.

Пример настройки и использования инструмента

Чтобы добавить «Запуск JavaScript кода» в связку, нажмите «Добавить действие» и выберите сервис «JavaScript».

Добавление JavaScript в связку Альбато

Затем во «входных данных» объявите переменные: дайте им имена и укажите, из каких предыдущих шагов подставлять значения.

Настройка входных данных

Чтобы добавить больше переменных, нажмите «Добавить поле». Лишние переменные можно удалить.

Добавление полей

После этого напишите любой код на JavaScript, используя объявленные переменные или создавая новые на их основе.

Написание JS-кода

Если вы хотите на выходе получить значение переменной outputData (результат работы скрипта), укажите её имя в разделе «выходные данные» и задайте тип переменной.

Настройка выходных данных

Как и во «входных данных», можно создавать несколько переменных. Описывать «выходные данные» нужно обязательно — даже если вы не создали в коде новых переменных. Этот раздел сообщает шагу, какие поля будут использоваться дальше и какие значения в них придут. Нажмите «Сохранить».

В последующих шагах вы увидите поля, которые настроили в «выходных данных», и сможете использовать их дальше в связке.

Использование выходных данных в следующих шагах

Если код не удалось выполнить по каким-либо причинам, шаг считается ошибочным. В журнале отобразится ошибка от JS-движка.

Примеры кода

Кейс 1. Вычислить разницу между датами в минутах

Вычесть из даты и времени начала дату и время окончания и вывести результат в минутах.

dateStart = new Date(dateStart);
dateEnd = new Date(dateEnd);
let difMinutes = (dateEnd — dateStart) / (1000 * 60);
Настройка кейса 1: разница между датами в минутах

Кейс 2. Разбивка даты и времени на два параметра с обрезкой секунд

Разбиваем параметр «Дата и время» (unix) на два параметра: отдельно дату и отдельно время. Секунды обрезаем, оставляем формат ЧЧ:ММ.

dateTime = new Date(+dateTime);function dateEdit(arr) {
return arr.map((el) => {
return el < 10 ? «0» + el : el; }); } let date = dateEdit([ dateTime.getDate(), dateTime.getMonth() + 1, dateTime.getFullYear(), ]).join(«.»); let time = dateEdit([dateTime.getHours(), dateTime.getMinutes()]).join(«:»);

Настройка кейса 2: разбивка даты и времени

Кейс 3. Разбивка одного параметра на два по разделителю

Разбивка по пробелу:

A = A.trim().split(/\s+/);
let name = A[0];
let surname = A?.[1];

Разбивка нескольких значений с разделителем «пробел»:

num4 = num4.trim().split(‘ ‘);
let name = num4[0];
let familyname = num4?.[1];
let surname = num4?.[2];

Разбивка с разделителем «запятая»:

A = A.trim().split(«,»);
let num1 = A[0];
let num2 = A?.[1];

Разбивка по символу «|»:

UF_CRM_1669820909984 = UF_CRM_1669820909984.trim().split(«\|»);
let name = UF_CRM_1669820909984[0];
let surname = UF_CRM_1669820909984?.[1];
Настройка кейса 3: разбивка параметра по разделителю

Кейс 4. Получение массива данных из URL

Парсинг параметров из строки запроса. Входное значение подставьте на место url в последней строке. На выход принимайте parsedGet с типом StringArray.

function parseQueryParams(url) {
const queryString = url.split(«?»)[1];
if (!queryString) {
return {};
}const queryParams = {};
const pairs = queryString.split(«&»);

for (let i = 0; i < pairs.length; i++) { const pair = pairs[i].split(«=»); const key = decodeURIComponent(pair[0]); const value = decodeURIComponent(pair[1] || «»); if (queryParams.hasOwnProperty(key)) { if (Array.isArray(queryParams[key])) { queryParams[key].push(value); } else { queryParams[key] = [queryParams[key], value]; } } else { queryParams[key] = value; } } return queryParams; } const parsedGet = parseQueryParams(url); // Дополнительно — получить отдельные параметры: let one = parsedGet[0]; let two = parsedGet[1];

Настройка кейса 4: получение массива данных из URL

Кейс 5. Очистка текста от HTML-тегов

Удаляет HTML-теги, лишние переносы строк и пробелы из текста письма.

let regexp = /<(\/[^>]+)>|(\n)|(\s{4,})/gm;
html = html.replace(regexp, »).trim();
Настройка кейса 5: очистка текста от HTML-тегов

Кейс 6. Перевод даты и времени в Unix-формат

let [date, time] = amo_datetime.split(» «);
let [year, month, day] = date.split(«-«).map(Number);
let [hours, minutes, seconds] = time.split(«:»).map(Number);
let ls_deadline_unix = new Date(year, month — 1, day, hours, minutes, seconds).getTime();
Настройка кейса 6: перевод даты в Unix-формат

Кейс 7. Работа с мультисписками: вывести значение вместо кода

Если поле хранит числовой код из мультисписка, а вам нужно текстовое значение — задайте соответствие в объекте и получите результат по ключу.

Пример структуры кода: создайте объект с парами «код: значение» и обратитесь к нему по входному параметру.

Кейс 8. Условная логика по дням недели

Связка отправляет разные сообщения в зависимости от дня недели.

const compare = {
0: ‘текст воскресенья’,
1: ‘текст понедельника’,
2: ‘текст вторника’,
3: ‘текст среды’,
4: ‘текст четверга’,
5: ‘текст пятницы’,
6: ‘текст субботы’,
};
const result = compare[new Date().getDay()];
Настройка кейса 8: условная логика по дням недели

Кейс 9. Форматирование ФИО: первые буквы заглавными

function toCapitalLetter(str) {
if (!str) {
return str;
}const formattedString = str.trim().toLowerCase();

return formattedString
.split(» «)
.map(elem => elem[0].toUpperCase() + elem.slice(1))
.join(» «);
}

const outString = toCapitalLetter(str);

Настройка кейса 9: форматирование ФИО

Кейс 10. Получить диапазон дат за предыдущую неделю

Связка запускается в понедельник и получает две даты для отчёта: семь дней назад и вчера.

function transformDate(inputDate) {
let date = new Date(inputDate);// Форматирование даты в «ДД-ММ-ГГГГ»
let formattedDate = `${String(date.getDate()).padStart(2, ‘0’)}-${String(date.getMonth() + 1).padStart(2, ‘0’)}-${date.getFullYear()}`;

// Дата начала (на 7 дней раньше)
let startDate = new Date(date);
startDate.setDate(date.getDate() — 7);
let formattedStartDate = `${String(startDate.getDate()).padStart(2, ‘0’)}-${String(startDate.getMonth() + 1).padStart(2, ‘0’)}-${startDate.getFullYear()}`;

// Дата окончания (на 1 день раньше)
let endDate = new Date(date);
endDate.setDate(date.getDate() — 1);
let formattedEndDate = `${String(endDate.getDate()).padStart(2, ‘0’)}-${String(endDate.getMonth() + 1).padStart(2, ‘0’)}-${endDate.getFullYear()}`;

return { formattedStartDate, formattedEndDate };
}

let dateStart = transformDate(date).formattedStartDate;
let dateEnd = transformDate(date).formattedEndDate;

Кейс 11. Получить начало и конец предыдущих суток

Код возвращает вчерашнюю дату в трёх форматах: простую строку ГГГГ-ММ-ДД, начало дня (00:00) и конец дня (23:59) в ISO-формате. Удобно для выгрузки данных за вчерашний день.

const today = new Date();
const yesterday = new Date();
yesterday.setDate(today.getDate() — 1);// Простая дата (YYYY-MM-DD)
const yyyy = yesterday.getFullYear();
const mm = String(yesterday.getMonth() + 1).padStart(2, ‘0’);
const dd = String(yesterday.getDate()).padStart(2, ‘0’);
const formattedDate = `${yyyy}-${mm}-${dd}`;

// Начало вчерашнего дня (ISO)
const start = new Date(yesterday);
start.setHours(0, 0, 0, 0);
const yesterdayStart = start.toISOString();

// Конец вчерашнего дня (ISO)
const end = new Date(yesterday);
end.setHours(23, 59, 59, 999);
const yesterdayEnd = end.toISOString();

// Возврат результата для следующих шагов Альбато
result = {
formattedDate,
yesterdayStart,
yesterdayEnd
};


Кейс 12. Разбор строки с именем и email

Задача: разбить строку вида Yana Kabritskaya <y.kabritskaya@albato.com> или y.kabritskaya@albato.com на два отдельных параметра — имя и email.

const str = input_string || »;// вытаскиваем email
const emailMatch = str.match(/<\s*([^>]+)\s*>/) || str.match(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i);
email = emailMatch ? emailMatch[1] || emailMatch[0] : »;

// убираем email из строки → остаётся имя
name = str
.replace(/<[^>]*>/g, »)
.replace(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/i, »)
.replace(/»/g, »)
.trim();

Код работает в обоих форматах: Yana Kabritskaya <y.kabritskaya@albato.com> и y.kabritskaya@albato.com. На выходе — два параметра: name и email.

Кейс 12. Извлечение нескольких метрик из одной строки

Если одно поле содержит сразу несколько показателей (например, строка вида 01.05.2024 шаги: 8000 ккал: 2200 белки: 150), этот код разбирает строку и раскладывает каждый показатель в отдельную переменную.

function parseMetrics(str) {
const result = {};
const dateMatch = str.match(/^\d{2}\/\d{2}\/\d{4}/);
if (dateMatch) {
result.date = dateMatch[0];
}
const rest = str.replace(result.date, »).trim();
const regex = /(\w+):\s([^:]+?)(?=\s\w+:|$)/g;
let match;
while ((match = regex.exec(rest)) !== null) {
const key = match[1];
const value = match[2].trim();
result[key] = value;
}
return result;
}const parsed = parseMetrics(input);
const date = parsed.date;
const pasos = parsed.pasos;
const kcal = parsed.kcal;
const prot = parsed.prot;

В «входных данных» укажите переменную input с исходной строкой. В «выходных данных» — каждую нужную переменную отдельно (date, pasos, kcal и т. д.) с типом String.


Если у вас возникнут вопросы по работе с инструментом, обратитесь в поддержку через чат на сайте.