Как работает битрикс event send

Как работает битрикс event send

Событие event send в Битрикс отвечает за передачу данных между различными модулями и компонентами платформы. Оно реализуется через механизм подписки на события, позволяя системам реагировать на определённые действия без прямого вызова функций, что повышает гибкость архитектуры.

В основе работы лежит функция ExecuteModuleEventEx, которая инициирует обработку события и передает необходимые параметры подписчикам. Важно понимать, что event send не выполняет автоматическую обработку данных, а лишь уведомляет зарегистрированные обработчики, которые должны быть реализованы в модулях или пользовательских скриптах.

Для эффективного использования event send следует учитывать порядок подключения обработчиков, так как он влияет на последовательность выполнения кода. Также рекомендуется ограничивать количество параметров события, чтобы снизить нагрузку и повысить производительность. Практика показывает, что оптимальное решение – использовать event send для передачи структурированных массивов с минимально необходимыми данными.

Как зарегистрировать событие event send в модуле Битрикс

Как зарегистрировать событие event send в модуле Битрикс

Регистрация события event send в модуле Битрикс начинается с создания файла init.php в каталоге модуля или с использования существующего. В этом файле необходимо подключить обработчик события через метод RegisterModuleDependences.

Пример регистрации обработчика для события отправки почты:

RegisterModuleDependences(
"main",
"OnBeforeEventSend",
"ваш_модуль",
"ВашКлассОбработчика",
"МетодОбработки"
);

Аргументы функции:

  • «main» – модуль, где возникает событие (почта находится в модуле main);
  • «OnBeforeEventSend» – имя события, которое вызывается перед отправкой почтового сообщения;
  • «ваш_модуль» – идентификатор вашего модуля;
  • «ВашКлассОбработчика» – класс с методом для обработки;
  • «МетодОбработки» – метод, который будет вызван при событии.

В классе обработчика метод должен принимать параметры, передаваемые событием. Например:

class ВашКлассОбработчика
{
public static function МетодОбработки(&$arFields, &$arTemplate)
{
// Логика изменения данных письма перед отправкой
}
}

Для подтверждения регистрации модуля рекомендуется использовать файл install/index.php с вызовом RegisterModuleDependences при установке и удалять регистрацию при удалении модуля.

Важно: используйте именно событие OnBeforeEventSend, если требуется изменить или дополнить данные письма до отправки. Если регистрация нужна для других целей, применяйте соответствующие события из документации.

Механизм передачи данных через event send в пользовательских обработчиках

Механизм передачи данных через event send в пользовательских обработчиках

Для передачи данных через событие event send в Битрикс используется массив параметров, который передается вторым аргументом метода Send. В пользовательских обработчиках эти параметры доступны через аргументы функции, зарегистрированной на событие.

Вызов события выглядит так: GetModuleEvents("module_id", "OnEventName") для получения списка обработчиков и ExecuteModuleEventEx($event, [$params]) для их запуска с передачей данных. При использовании CEvent::Send("EVENT_NAME", SITE_ID, $arFields) в $arFields помещаются все нужные переменные.

В обработчике данные принимаются в виде массива $arFields с ключами, соответствующими именам параметров. Строгого шаблона нет, но рекомендуется использовать понятные ключи для обеспечения удобства и совместимости.

Для передачи сложных структур, например массивов или объектов, необходимо сериализовать данные, поскольку event send передает параметры в виде простых типов (строки, числа). В обработчике следует выполнить обратную десериализацию. Альтернативный способ – хранить данные во внешнем хранилище (кеш, БД) с передачей через event send ключа для доступа.

Рекомендуется избегать передачи больших объемов данных напрямую через event send, чтобы не увеличить нагрузку на систему и не вызвать ошибки при обработке. Оптимальный подход – передавать минимально необходимый набор параметров для идентификации и дальнейшей выборки.

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

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

Настройка параметров события для передачи данных в event send

Настройка параметров события для передачи данных в event send

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

Пример массива параметров:


$arEventFields = [
  "EMAIL_TO" => "user@example.com",
  "USER_NAME" => "Иван",
  "ORDER_ID" => 2451
];

Имена ключей должны строго соответствовать переменным, указанным в шаблоне письма (в административной панели: Настройки → Почтовые события → Типы событий). Ошибка в названии приведёт к тому, что значение не будет подставлено.

Обязательные действия:

  • Проверить, что тип события уже создан и активен.
  • Убедиться, что шаблон письма связан с нужным типом события.
  • Задать корректные значения в массиве $arEventFields.

Для отправки используется функция Event::send() или CCEvent::Send(). Рекомендуется использовать современный класс \Bitrix\Main\Mail\Event:


\Bitrix\Main\Mail\Event::send([
  "EVENT_NAME" => "ORDER_CREATED",
  "LID" => "s1",
  "C_FIELDS" => $arEventFields
]);

Параметр LID должен соответствовать коду сайта, для которого настроен шаблон письма. Ошибочное указание приведёт к игнорированию события или его отправке не по тому шаблону.

Перед вызовом send() убедитесь, что все необходимые значения присутствуют, и исключите лишние или пустые элементы. Рекомендуется логировать результат отправки с помощью writeToLog или кастомного логгера для отладки и отслеживания проблем.

Обработка ошибок при срабатывании события event send

Обработка ошибок при срабатывании события event send

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

  • Проверка параметров перед отправкой: Убедитесь, что массив $arEventFields содержит все обязательные ключи, соответствующие шаблону письма. Отсутствие хотя бы одного может привести к сбою без информативного сообщения об ошибке.
  • Ручная валидация e-mail: Используйте check_email($email) до передачи данных в Event::send(), чтобы исключить недопустимые адреса, которые не будут обработаны SMTP-сервером.
  • Обработка исключений: Оборачивайте вызов \Bitrix\Main\Mail\Event::send() в блок try-catch и логируйте исключения через Bitrix\Main\Diag\Debug::writeToFile() или Bitrix\Main\Diag\Logger.
  • Проверка результата: Метод send() возвращает объект EventResult. Используйте $result->isSuccess() для проверки, а $result->getErrors() для получения информации о причине сбоя.
  • Логирование ошибок: Создайте отдельный лог-файл для почтовых событий. Пример: /local/php_interface/logs/mail_errors.log. Фиксируйте дату, тип события, email и текст ошибки.
  • Автоматическое уведомление разработчиков: Настройте отправку уведомления на внутренний email при каждом сбое, чтобы ускорить устранение ошибок.
  • Обработка ошибок в агентах и бизнес-процессах: Исключите молчаливое игнорирование. Возвращайте false в агенте при ошибке отправки и записывайте подробности.
  • Мониторинг очереди отправки: Если используется отложенная отправка, проверяйте таблицу b_event. Застревание записей в статусе «N» сигнализирует о сбое.

Регулярный аудит отправки событий и наличие централизованного логирования позволяют минимизировать влияние ошибок и обеспечивают стабильную работу системы уведомлений.

Использование event send для интеграции с внешними сервисами

Использование event send для интеграции с внешними сервисами

Механизм event send в Битрикс позволяет автоматически отправлять данные во внешние системы при наступлении заданного события. Это может быть CRM, ERP, мессенджер или аналитическая платформа. Для реализации интеграции требуется создать собственное почтовое событие и соответствующий обработчик.

Регистрируйте почтовое событие через административный раздел: Настройки → Почтовые события → Типы событий. Укажите уникальный идентификатор, который будет использоваться в коде.

Создайте шаблон почтового события, даже если фактическая отправка писем не требуется. Это обязательное условие для корректного вызова Event::send(). В теле шаблона можно передавать данные, которые будут обработаны скриптом-интегратором.

Пример вызова:

use Bitrix\Main\Mail\Event;
Event::send([
"EVENT_NAME" => "SEND_TO_API",
"LID" => "s1",
"C_FIELDS" => [
"USER_EMAIL" => $userEmail,
"ORDER_ID" => $orderId,
"TOKEN" => $apiToken
]
]);

Создайте обработчик почтового события через EventManager::addEventHandler, в котором реализуйте отправку запроса во внешний сервис. Используйте Bitrix\Main\Event для перехвата события и Bitrix\Main\Web\HttpClient для выполнения HTTP-запроса.

Пример обработчика:

use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Bitrix\Main\Web\HttpClient;
EventManager::getInstance()->addEventHandler("", "OnBeforeEventSend", function(Event $event) {
if ($event->getParameter("EVENT_NAME") === "SEND_TO_API") {
$fields = $event->getParameter("C_FIELDS");
$http = new HttpClient();
$http->post("https://external.service/api/receive", $fields);
}
});

Рекомендуется реализовать логирование запросов и ответов от сервиса для отладки и мониторинга. Исключите отправку данных без валидации. При работе с авторизацией используйте безопасные токены или ключи, хранимые в настройках модуля или .settings.php.

События с event send не блокируют выполнение основного скрипта, но при работе с внешними API желательно контролировать таймауты и обрабатывать исключения, чтобы избежать задержек.

Практические примеры применения event send в бизнес-процессах

Практические примеры применения event send в бизнес-процессах

В интернет-магазине при оформлении заказа через компонент sale.order.ajax используется событие event send для отправки уведомления менеджеру. В этом случае вызывается почтовое событие с типом SALE_NEW_ORDER, где в шаблоне письма можно использовать переменные заказа: например, номер, сумма, способ оплаты и контактные данные клиента.

При регистрации нового пользователя на портале event send активирует отправку приветственного письма. Внутри обработчика события OnAfterUserAdd вызывается CEvent::Send с типом NEW_USER_REGISTRATION. Это письмо может содержать персональную ссылку для активации аккаунта и временный пароль.

В CRM-сценарии при изменении стадии лида на «Сделка заключена» триггер запускает отправку события типа DEAL_SUCCESS. В шаблоне письма, кроме данных сделки, можно динамически подставлять контактные данные менеджера и ссылку на PDF-документ с договором. Вызов события реализуется через CEvent::Send в пользовательском бизнес-процессе на основе статуса.

Для сбора обратной связи после завершения услуги используется кастомный компонент, который через неделю после закрытия задачи отправляет клиенту письмо с просьбой оценить качество работы. Событие отправляется через CEvent::Send с типом FEEDBACK_REQUEST, при этом дата отправки рассчитывается cron-скриптом, работающим с сущностью tasks_task.

В корпоративном портале при создании нового элемента в списке заявок (инфоблок) отправляется уведомление ответственному сотруднику. Сценарий реализуется через привязанный к событию добавления элемента инфоблока агент, внутри которого вызывается CEvent::Send с типом SUPPORT_TICKET_CREATED. Поля письма автоматически заполняются из свойств инфоблока.

Вопрос-ответ:

Ссылка на основную публикацию