Дата последнего изменения: 23.06.2025
Если необходимо динамически добавлять агентов, то используйте API агентов. Если вам просто нужно прикрутить один или два агента, то это проще сделать вручную.
Агента создаем на странице Настройки > Настройки продукта > Агенты по команде Добавить агента на контекстной панели:

О параметрах, значение которых может быть неясно из названия:
/bitrix/modules/ID модуля/include.php, в этом случае необходимо убедиться, что функция-агент будет доступна после подключения этого файла;Сама функция будет выглядеть так:
function testAgent()
{
mail('mail@gmail.com', 'Агент', 'Агент');
return "testAgent();";
}
Функцию добавить в файл /bitrix/php_interface/init.php.
Для активизации агента выполните в php-консоли админки следующий код:
CAgent::AddAgent("testAgent();");
Если письмо пришло, то агент работает и можно писать свой функционал.
<? // добавим агент модуля "Статистика" CAgent::AddAgent( "CStatistic::CleanUpStatistics_2();", // имя функции "statistic", // идентификатор модуля "N", // агент не критичен к кол-ву запусков 86400, // интервал запуска - 1 сутки "07.04.2005 20:03:26", // дата первой проверки на запуск "Y", // агент активен "07.04.2005 20:03:26", // дата первого запуска 30); ?>
<? // добавим агент модуля "Техподдержка" CAgent::AddAgent( "CTicket::AutoClose();", // имя функции "support", // идентификатор модуля "N", // агент не критичен к кол-ву запусков 86400, // интервал запуска - 1 сутки "", // дата первой проверки - текущее "Y", // агент активен "", // дата первого запуска - текущее 30); ?>
<?
// добавим произвольный агент не принадлежащий ни одному модулю
CAgent::AddAgent("My_Agent_Function();");
?>
<?
// файл /bitrix/php_interface/init.php
function My_Agent_Function()
{
// выполняем какие-либо действия
return "My_Agent_Function();";
}
?>
<?
// добавим произвольный агент принадлежащий модулю
// с идентификатором my_module
CAgent::AddAgent(
"CMyModule::Agent007(1)",
"my_module",
"Y",
86400);
?>
<?
// данный агент будет запущен ровно 7 раз с периодичностью раз в сутки,
// после чего будет удален из таблицы агентов.
Class CMyModule
{
public static function Agent007($cnt=1) : string
{
echo "Hello!";
if($cnt>=7)
return "";
return "CMyModule::Agent007(".($cnt+1).");";
}
}>
Практичный пример: Обновление курса валют на сайте. Запуск данного агента рекомендуется повесить на cron.
<?// Обновление курса валют
function AgentGetCurrencyRate()
{
global $DB;
// подключаем модуль "валют"
if(!CModule::IncludeModule('currency'))
return "AgentGetCurrencyRate();";
$arCurList = array('USD', 'EUR');
$bWarning = False;
$rateDay = GetTime(time(), "SHORT", LANGUAGE_ID);
$QUERY_STR = "date_req=".$DB->FormatDate($rateDay, CLang::GetDateFormat("SHORT", SITE_ID), "D.M.Y");
$strQueryText = QueryGetData("www.cbr.ru", 80, "/scripts/XML_daily.asp", $QUERY_STR, $errno, $errstr);
// данная строка нужна только для сайтов в кодировке utf8
$strQueryText = iconv('windows-1251', 'utf-8', $strQueryText);
if (strlen($strQueryText) <= 0)
$bWarning = True;
if (!$bWarning)
{
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/xml.php");
$objXML = new CDataXML();
$objXML->LoadString($strQueryText);
$arData = $objXML->GetArray();
$arFields = array();
$arCurRate["CURRENCY_CBRF"] = array();
if (is_array($arData) && count($arData["ValCurs"]["#"]["Valute"])>0)
{
for ($j1 = 0; $j1<count($arData["ValCurs"]["#"]["Valute"]); $j1++)
{
$arFields = array(
"CURRENCY" => $arData["ValCurs"]["#"]["Valute"][$j1]["#"]["CharCode"][0]["#"],
'DATE_RATE' => $rateDay,
'RATE' => DoubleVal(str_replace(",", ".", $arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Value"][0]["#"])),
'RATE_CNT' => IntVal($arData["ValCurs"]["#"]["Valute"][$j1]["#"]["Nominal"][0]["#"]),
);
CCurrencyRates::Add($arFields);
}
}
}
return "AgentGetCurrencyRate();";
}?>
Указанный код добавляется в файл /bitrix/php_interface/init.php. Не забудьте добавить агента AgentGetCurrencyRate(); на странице Настройки > Настройки продукта > Агенты.
Агент, проверяющий наличие элементов инфоблока без заполненных цен.
init.php.
function AgentCheckPrice()
{
if(CModule::IncludeModule("iblock"))
{
$arSelect = Array("ID", "NAME", "PROPERTY_PRICE");
$arFilter = Array("IBLOCK_ID"=> 2, "PROPERTY_PRICE" => false);
$rsResCat = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$arItems = array();
while($arItemCat = $rsResCat->GetNext())
{
$arItems[] = $arItemCat;
}
CEventLog::Add(array(
"SEVERITY" => "SECURITY",
"AUDIT_TYPE_ID" => "CHECK_PRICE",
"MODULE_ID" => "iblock",
"ITEM_ID" => "",
"DESCRIPTION" => "Проверка цен, нет цен для ".count($arItems)." элементов",
));
if(count($arItems) > 0)
{
$arFilter = Array(
"GROUPS_ID" => Array(2)
);
$rsUsers = CUser::GetList(($by="personal_country"), ($order="desc"), $arFilter);
$arEmail = array();
while($arResUser = $rsUsers->GetNext())
{
$arEmail[] = $arResUser["EMAIL"];
}
if(count($arEmail) > 0)
{
$arEventFields = array(
"TEXT" => "Проверка цен, нет цен для ".count($arItems)." элементов",
"EMAIL" => implode(", ", $arEmail),
);
CEvent::Send("INFO_PRICE", "s1", $arEventFields);
}
}
}
return "AgentCheckPrice();";
}