Надстройка «Скрипты» — это свой код на Python для всего, что не покрывают готовые инструменты: забрать данные из внешней системы, отправить их куда нужно, посчитать, разложить по местам, разово прибраться в старых записях. Скрипт живёт файлом прямо в проекте, рядом с остальными настройками, и версионируется вместе с ними. Каждый запуск виден в «Консоли скриптов»: вкладки «Определения» и «Настройки» показывают список скриптов и состояние среды, а журнал запусков отвечает, чем закончился каждый прогон.

Зачем это нужно
Готовая интеграция есть не для всякой системы. Чаще нужен небольшой мостик: раз в час забрать из внешней программы список заказов, отправить партнёру выгрузку, сверить два справочника и разложить расхождения по ответственным. Под каждую такую мелочь пересобирать продукт — долго и неразумно, а держать мостик в чьём-то личном скрипте на рабочем компьютере — ненадёжно: он работает, пока о нём помнят.
«Скрипты» дают таким задачам постоянное место. Ваш инженер или агент пишет код один раз, а дальше он запускается по расписанию, по шагу правила или по обращению внешней системы — и каждый запуск остаётся в журнале. Правки вступают в силу без перезапуска продукта, а весь код лежит там же, где остальные настройки, и хранится вместе с ними: ничего не потеряется в личной папке.
Что умеет
- Скрипт — файл проекта. Код можно держать прямо в описании скрипта или отдельным файлом
.pyрядом. Источник кода всегда один: если задать и то и другое, продукт откажет. Правки вступают в силу без перезапуска, а сами файлы версионируются вместе с проектом. - Четыре способа запустить. По расписанию, вручную из консоли, по обращению внешней системы на публичный адрес с ключом и шагом в правиле «Автоматизации». Один и тот же скрипт можно повесить сразу на несколько поводов.
- Расписание. Задаётся простым интервалом — «каждые пятнадцать минут», «раз в сутки». Продукт сам считает, пора ли запускать: если скрипт не запускался дольше своего интервала, он сработает при ближайшем обходе. Одновременно идёт один запуск, наложений не бывает; неудачный запуск не отменяет расписание.
- Публичный адрес для внешних систем. Внешняя программа обращается по адресу скрипта со своим ключом и присылает данные; тело и заголовки запроса доходят до кода. Неверный ключ — ничего не запускается, слишком большой запрос — отказ, слишком частые обращения — тоже отказ.
- Что видит скрипт. Повод запуска, параметры и пришедшие данные, объявленные переменные окружения и постоянный рабочий каталог для своих заметок и состояния — им удобно хранить, до какого места дочитали в прошлый раз. Ключа управления продуктом среди этого нет: скрипт не может распоряжаться продуктом от его имени.
- Секреты остаются секретами. Пароли и ключи для внешних систем задаются в описании скрипта и хранятся только на запись: в ответе консоли вместо значения видно
***. Прочитать их обратно нельзя, и в журналах запусков они не появляются. - Библиотеки — один общий набор. Список нужных библиотек задаётся один раз на все скрипты и устанавливается автоматически. Отдельных наборов на каждый скрипт не бывает — зато и следить не за чем.
- Журнал запусков. На каждый запуск — строка: чем запущен, когда, сколько шёл, чем кончился и с какой ошибкой. Ошибка сохраняется вместе с хвостом сообщения от Python, поэтому разбираться можно по факту, а не по догадке. Консоль обновляется в живом режиме: результат виден, как только запуск завершился.
- Проверка перед вводом в строй. Пробный запуск с образцом данных отвечает прямо в консоли: видно результат и ошибку, если что-то не так, и при этом ничего лишнего не происходит.
- Состояние среды. Над списком скриптов видно главное: включены ли скрипты вообще, готов ли Python, установлены ли библиотеки, сколько запусков и падений за сутки и сколько дней хранится журнал. Если чего-то не хватает, продукт говорит об этом прямо, а не молчит зелёным огоньком.
- Пределы — видимые числа. Есть общий выключатель, которым скрипты останавливаются разом. На запуск отводится минута по умолчанию и десять минут в пределе; при превышении процесс снимается целиком, вместе с порождёнными им. Одновременно выполняется не больше двух скриптов, размер передаваемых данных ограничен, журнал хранится тридцать дней по умолчанию.
- Неверная правка не ломает работу. Если в описании скрипта ошибка, продукт продолжает использовать последний рабочий вариант, а ошибки показывает в консоли. Одна опечатка не остановит работу, которая уже налажена.
- Скрипт под защитой. Скрипт, на который ссылается правило автоматизации, не удалится: отказ назовёт правила, которые на него опираются. Сначала снимается зависимость — потом удаляется файл.
Как это связано с другими надстройками
«Скрипты» — самостоятельная надстройка: она ни от чего не зависит и работает на одном ядре, а её запуск по расписанию и публичный адрес никого больше не требуют. Главный её потребитель — «Автоматизация»: там запуск скрипта становится обычным действием правила, наравне с письмом или задачей. При сохранении правила продукт проверяет, что такой скрипт существует, и не даст сохранить ссылку в пустоту; если надстройку скриптов выключили, шаг честно назовёт причину отказа, а остальные шаги правила выполнятся.
Отсюда и типичная связка: правило следит за событиями в продукте, а скрипт — за всем, что происходит вне него. Внутри продукта вы работаете правилами и отчётами, а скрипты выносят наружу только то, что действительно требует кода.
Честные границы
- Песочницы нет. Скрипт работает с правами сервера и имеет доступ к его файлам и сети. Это код доверенного администратора, и проверять его нужно так же, как остальные настройки проекта.
- Поддерживается только Python. Другие языки не запускаются, и добавлять их нельзя.
- Набор библиотек — один на все скрипты. Разные версии одной библиотеки под разные задачи не поддерживаются.
- Скрипт ничего не утверждает сам: он выполняет работу и возвращает результат. Согласования, отправка писем клиентам и другие решения остаются за продуктом и за человеком.
- Ключ управления продуктом скрипту не выдаётся: распоряжаться продуктом от его имени скрипт не может, даже если очень нужно.
- Публичный адрес ограничен по частоте обращений, но повторные события не склеивает: если внешняя система пришлёт одно и то же дважды, скрипт выполнится дважды. Защита от повторов остаётся на стороне того, кто присылает.
- Журнал не вечен: по умолчанию он хранится тридцать дней, и старые строки удаляются. Нужна долгая история — её выгружают отдельно.
- Консоль только показывает. Меняются скрипты через управляющий доступ — агентом, а не кликами в браузере: это осознанное правило, а не недоделка.
Все надстройки → Каталог надстроек
Подробнее в документации: Свои скрипты на Python