Написание скрипта
Редактор скриптов — это рабочее место, где вы пишете код, тестируете его на живых данных и настраиваете расписание. Экран разделён на три части: слева — AI-ассистент, в центре — редактор кода и консоль, справа — панель настроек (метаданные, расписание, состояние, история запусков).

Как создать скрипт
- Откройте раздел Скрипты и нажмите + Создать скрипт. Откроется редактор с шаблоном кода.

- В правой панели, в разделе Метаданные, заполните Название и Описание скрипта.
- В центральном редакторе напишите тело функции
main()— то, что именно должен делать скрипт (см. раздел SDK QubixApp ниже). - В разделе Расписание задайте, как часто скрипт будет запускаться автоматически (см. Расписание). Можно оставить пустым, если будете запускать только вручную.
- Нажмите кнопку Запустить под редактором, чтобы протестировать скрипт на живых данных — результат появится в консоли (см. Тестирование скрипта).
- Включите переключатель Активен в правом верхнем углу и нажмите Сохранить.
Сохранить можно сочетанием клавиш Ctrl + S (на macOS — Cmd + S) прямо из редактора, не перемещая курсор к кнопке.
AI-ассистент
Левая колонка — чат с AI-ассистентом. Опишите задачу простыми словами («останавливай объявления с ROAS ниже 0.5 и расходом выше $20»), и ассистент сгенерирует готовый код под SDK Qubix. Кнопка Вставить в Code под ответом помещает этот код прямо в редактор.
Под полем ввода есть готовые примеры промптов — нажмите любой, чтобы быстро начать.
Ассистент также может придумать Название и Описание скрипта по его коду — нажмите иконку AI рядом с этими полями в разделе Метаданные.
🎬 GIF: запрос к AI-ассистенту и вставка кода в редактор
SDK QubixApp
Скрипт — это функция main(), внутри которой вы работаете с данными объявлений через набор команд QubixApp. Доступны три уровня:
QubixApp.ads()— объявления,QubixApp.adsets()— адсеты,QubixApp.campaigns()— кампании.
Каждый из них возвращает выборку, которую можно фильтровать и перебирать. У выборки есть методы:
.withCondition('...')— выбрать по условию на метрики (например,'spend_24h > 10 AND roas_24h < 0.5');.orderBy('field', 'desc')— сортировать;.withLimit(n)— ограничить количество;.get()— получить массив элементов;.first()— получить первый элемент.
У каждого объявления, адсета или кампании есть действия:
.pause({ duration: '24h', reason: '...' })— поставить на паузу на указанный период;.activate({ reason: '...' })— включить обратно;.getStatsFor('24h')— получить метрики за период.
Базовый пример: поставить на паузу объявления с расходом выше $10 и ROAS ниже 0.5 за прошедшие сутки.
function main() {
const ads = QubixApp.ads()
.withCondition('spend_24h > 10 AND roas_24h < 0.5')
.get()
for (const ad of ads) {
console.log('pausing', ad.name, 'roas24h=', ad.roas_24h)
ad.pause({ duration: '24h', reason: 'low roas' })
}
}
Больше готовых сниппетов — в разделе Примеры скриптов.
В редакторе работает автодополнение: начните вводить ad. или QubixApp. — Qubix подскажет доступные поля и методы с описаниями. Так не придётся держать список метрик в голове.
Запросы к базе данных
Кроме текущих объявлений, доступных через QubixApp, скрипт может читать данные прямо из базы Qubix командой sql. Это read-only запрос, написанный тегированным шаблоном:
const rows = sql`
SELECT country, sum(spend) AS spend
FROM hourly_insights
WHERE date >= ${'2026-06-01'}
GROUP BY country`
for (const row of rows) console.log(row.country, row.spend)
Запрос возвращает массив строк; каждая строка — объект, ключи которого — имена колонок. Значения, которые вы передаёте через ${…}, отправляются как безопасные параметры — вы ничего не экранируете руками, и SQL-инъекция невозможна. Запросы read-only: скрипт может читать данные, но ничего изменить не может. То, до чего может дотянуться запрос, ограничено данными, которые разрешено видеть вашей роли.
Состояние между запусками
Скрипт может запоминать значения между запусками через ctx.state — это его личная память:
ctx.state.set('key', value)— сохранить;ctx.state.get('key')— прочитать;ctx.state.delete('key')— удалить.
Например, это позволяет запомнить, какие объявления уже обработаны, и не трогать их снова. Текущее содержимое памяти видно в правой панели в разделе Состояние — оттуда же отдельную запись можно удалить вручную.
Запросы к внешним сервисам
Команда ctx.fetch(url, opts) делает HTTP-запрос наружу — например, чтобы отправить уведомление в мессенджер или вызвать чужой API.
Исходящие запросы разрешены только к адресам из allowlist. Администратор настраивает его в Система → вкладка JavaScript. Если список пуст, исходящие запросы отключены. При попытке обратиться к адресу, которого нет в списке, скрипт покажет понятную подсказку в консоли.
Расписание
В правой панели раздел Расписание задаёт, когда скрипт запускается автоматически. Расписаний может быть несколько — например, раз в час и дополнительно в конкретное время.
- Введите расписание в формате cron (например,
*/5 * * * *— каждые 5 минут) и нажмите +. - Под строкой Qubix сразу показывает объяснение простыми словами — проверьте, что вы поняли друг друга правильно.
- Чтобы не вспоминать синтаксис cron, нажмите иконку AI в строке и опишите расписание словами («каждый день в 9 утра») — Qubix подставит готовое выражение.
Если расписание не задано, скрипт не будет запускаться сам — только по кнопке Запустить. Чтобы работал автозапуск, переключатель Активен должен быть включён.
Тестирование скрипта кнопкой «Запустить»
Под редактором кода есть консоль и кнопка ▶ Запустить. Она выполняет тот код, что сейчас в редакторе, на живых данных — это безопасный способ проверить логику, не дожидаясь расписания. Всё, что скрипт выводит через console.log, появляется в консоли вместе со временем запуска, статусом и длительностью.

Кнопка Запустить выполняет реальные действия. Если в коде есть pause() или activate(), объявления действительно будут поставлены на паузу или включены. Чтобы протестировать логику без последствий, сначала закомментируйте строки с действиями и оставьте только console.log.
Кнопка Запустить становится доступна после первого сохранения скрипта.
История запусков
Раздел Запуски в правой панели хранит историю всех выполнений: время, статус (успех, ошибка, таймаут), длительность и число выполненных действий. Клик по строке разворачивает полный вывод консоли того запуска — удобно, чтобы понять, почему скрипт повёл себя неожиданно.