Агенты в 1С-Битрикс: что это такое и зачем нужны

Использование агентов в «1С-Битрикс» (далее – Битрикс) позволяет автоматизировать повторяющиеся процессы и выполнять определённые задачи по расписанию, без постоянного вмешательства разработчика или администратора. В данной статье мы разберём, что такое агенты, как они работают, какие могут решать задачи и почему их применение столь важно для оптимизации работы сайта на Битрикс.

Агенты в 1С-Битрикс

Что такое агенты в Битрикс

Агенты – это специальные функции (PHP-функции или методы классов), которые регулярно или однократно запускаются системой в определённый момент времени. Часто агенты называют «системными задачами» или «автоматическими заданиями» – вся суть в том, что при помощи них можно запрограммировать выполнение различных действий «по расписанию» или по определённым условиям.

Зачем нужны агенты?

  • Автоматизация рутинных операций. Вместо того чтобы вручную запускать нужный скрипт или задавать действия cron-заданий на сервере, можно настроить выполнение всего этого через систему агентов.
  • Планирование задач. Если требуется что-то делать раз в час, раз в день, раз в неделю или в любой другой период, удобнее всего использовать агенты.
  • Обработка данных. Некоторые операции, например, выгрузка данных в сторонние сервисы или сбор статистики, лучше запускать в фоновом режиме – агенты для этого идеально подходят.
  • Своевременное оповещение. С помощью агентов можно отправлять уведомления администраторам или пользователям (например, о необработанных заказах или завершении срока действия подписки).

Как работают агенты

В Битрикс за «слежение» за агентами отвечает модуль ядра (main). При каждом хите (обращении к сайту) система проверяет, не наступило ли время запуска какого-либо агента. Если «час пробил», агент запускается автоматически и выполняет прописанную в нём логику.

  1. Событие посетителя (хит). Пользователь переходит на страницу сайта, что инициирует работу системы.
  2. Проверка расписания агента. Битрикс смотрит в свою таблицу агентов (обычно это таблица b_agent) и сравнивает текущее время с запланированным временем запуска.
  3. Выполнение кода. Если наступил момент запуска, вызывается соответствующая функция. После выполнения задачи система обновляет время следующего срабатывания агента (если оно нужно) или удаляет запись (если запуск однократный).

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


Как добавить и настроить агента

1. Программно, через админку

В административной части Битрикс есть специальный раздел для управления агентами. Путь может незначительно отличаться в разных версиях, но обычно это:

Настройки (Settings) → Инструменты (Tools) → Список агентов (Agents)

Или через один из модулей:

Настройки → Настройки продукта → Агенты

В этом разделе можно:

  • Просмотреть существующие агенты;
  • Добавить новый агент;
  • Изменять расписание и другие параметры агента.

При добавлении нового агента нужно указать:

  • Имя функции – это название PHP-функции или метода класса, которую нужно вызвать.
  • Интервал запуска – как часто должен вызываться агент (в секундах). Например, 3600 секунд = 1 час.
  • Дата и время первого запуска – время, в которое агент сработает в первый раз.
  • Сайт (опционально) – если нужно, чтобы код выполнялся только для определённого сайта.
  • Активность – чтобы агент запускался, он должен быть активным.

Пример добавления агента

Допустим, нам нужно каждый час проверять, нет ли в базе новых заказов, которые требуют уведомления менеджера. Можно сделать так:

  1. Создать функцию (например, в init.php или в одном из подключаемых файлов):
function CheckNewOrdersAgent()
{
    // Логика проверки новых заказов
    // Например, отправка уведомления менеджеру, если есть необработанные заказы
    // ...
    
    // Возвращаем имя функции, чтобы агент продолжал регулярно работать
    return "CheckNewOrdersAgent();";
}
  1. В разделе «Агенты» указать CheckNewOrdersAgent(); в качестве имени функции.
  2. В интервале указать 3600 (с).
  3. Задать время первого запуска (например, через 10 минут от текущего момента).
  4. Сохранить.

Теперь, раз в час, система будет вызывать CheckNewOrdersAgent();.

2. Программно, через код

Если по каким-то причинам удобнее создавать агентов без использования админки (например, во время установки модуля или при деплое проекта), можно воспользоваться методом:

CAgent::AddAgent(
    "CheckNewOrdersAgent();", // Имя функции
    "main",                   // Идентификатор модуля
    "N",                      // Агент не критичен (т.е. не зависит от длительности выполнения предыдущего)
    3600,                     // Интервал запуска (в секундах)
    "",                       // Дата первой установки в формате YYYY-MM-DD HH:MI:SS
    "Y",                      // Активен ли агент
    "",                       // Дата первого запуска
    30
);

В данном коде:

  • CheckNewOrdersAgent(); — имя функции;
  • "main" — модуль, в рамках которого создаётся агент (можно подставить нужный модуль, если речь идёт о кастомном решении);
  • 3600 — интервал в секундах (1 час);
  • Параметры с датой можно уточнять или оставлять пустыми, чтобы задать их позже.

Примеры использования агентов

1. Очистка кеша по расписанию

Если на сайте используется сложный механизм кеширования, который нужно регулярно обновлять, можно настроить агента:

function ClearCustomCacheAgent() {
    BXClearCache(true, "/custom_cache/"); 
    return "ClearCustomCacheAgent();";
}

Этот агент раз в сутки будет очищать указанный каталог кеша.

2. Регулярная выгрузка данных

Чтобы выгружать каталог товаров в CSV-файл для партнёров каждую ночь, делается скрипт:

function ExportCatalogAgent() {
    // 1. Собираем данные о товарах
    // 2. Формируем CSV
    // 3. Сохраняем файл на сервере или отправляем по FTP
    
    return "ExportCatalogAgent();";
}

В разделе «Агенты» устанавливаем время запуска, например, раз в сутки – 86400 секунд.

3. Интеграция с CRM-системой

При интеграции Битрикс с внешними CRM или ERP-системами бывает нужно регулярно отсылать обновления о заказах, клиентах, товарах и т.д. Вместо того чтобы запускать скрипты вручную, можно создавать агентов, которые будут «общаться» с CRM по расписанию. Например:

function SendOrdersToCRM() {
    // Логика получения заказов и передачи их в CRM
    // ...
    
    return "SendOrdersToCRM();";
}

Интервал запуска выбирается исходя из требований: от каждых 5 минут до нескольких часов.


Отличия агентов от cron-заданий

  • Простота настройки: агенты работают из коробки, без дополнительной ручной настройки сервера (cron).
  • Зависимость от посещаемости: если посетителей мало, агенты могут запускаться с задержкой, потому что срабатывают при хите. Cron-задание выполнится точно в назначенное время, независимо от активности сайта.
  • Гибкость планирования: в админке Битрикс можно быстро скорректировать расписание агента, тогда как для cron нужно менять конфигурацию сервера.
  • Нагрузка на хиты: слишком тяжёлые агенты или большое их количество могут замедлять ответ сервера для реальных пользователей, потому что код запускается в момент обращения к странице. Cron-задания работают «в фоне».

Для высоконагруженных проектов часто выбирают связку: агенты + cron. Суть в том, что через cron каждые несколько минут вызывается специальный PHP-скрипт bitrix/modules/main/tools/cron_events.php, который обеспечивает «фоновое» срабатывание агентов без привязки к хитам. Это решает проблему, связанную с низкой посещаемостью.


Лучшие практики при работе с агентами

  • Минимизировать длительность работы. Если код агента выполняется слишком долго, это может повлиять на скорость загрузки страниц. Оптимизируйте алгоритм или перенесите часть процессов в очередь.
  • Логировать ошибки. Внутри агента используйте механизмы логирования или уведомления, чтобы при сбое было понятно, на каком этапе произошла ошибка.
  • Использовать return. Если необходимо, чтобы агент вызывался регулярно, не забудьте вернуть строку с именем функции. Без этого агент выполнится только один раз.
  • Контролировать количество агентов. Чем больше агентов, тем сложнее следить за их выполнением и тем выше нагрузка. Старайтесь объединять схожие задачи в один агент, если это возможно.
  • Переходить на cron при больших нагрузках. Если ваш сайт развивается и посещаемость растёт, переходите на вызов агентов через cron – это более надёжный и производительный способ.

Заключение

Агенты в «1С-Битрикс» – мощный инструмент для автоматизации процессов: от регулярной выгрузки данных до интеграций с внешними системами и очистки кеша. Грамотная настройка агентов повышает эффективность работы сайта, снижает нагрузку на администраторов и позволяет экономить время на рутинных задачах. При этом важно следить за их работой и периодически проверять логи, чтобы гарантировать бесперебойное выполнение, особенно если сайт высоконагруженный.

Если вы хотите глубже разобраться в теме или столкнулись со сложными сценариями (например, нужно выполнять ресурсозатратные задачи очень часто), стоит рассмотреть использование cron-сценариев или связки «агенты + cron», чтобы разгрузить сайт и обеспечить точное выполнение задач по расписанию.

Надеемся, что эта статья помогла вам понять, как именно работают агенты, как их правильно создавать и в каких случаях стоит их применять. Используйте этот встроенный механизм, и ваш проект на Битрикс станет более надёжным и удобным в сопровождении.

Теги:  справочник

Интернет-магазин от 120 000 руб., срок от 4 недель

Платформа для продажи товаров или услуг. Включает интерактивные формы обратной связи в каждой карточке товара, а также множество статичных и динамичных разделов.

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.