Добавление полей почтовых событий

Обновлено 18.10.2024

Если в почтовом событии не хватает каких-то необходимых полей, то их можно добавить вручную с помощью небольшой кастомизации сайта. Само добавление состоит из 2х шагов:

  1. Добавление нового поля непосредственно в данные почтового события
  2. Добавление описание нового поля в настройке типа почтового события, чтобы модуль его "увидел".

Добавление нового поля непосредственно в данные почтового события

Пример обработчика для добавления поля #DELIVERY_TIME# со временем доставки заказа. Обработчик можно разместить в файле init.php.

В примере предполагается, что само значение времени доставки вы получите самостоятельно, в зависимости от вашей логики сайта.
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'main', 
    '\Bitrix\Main\Mail\Internal\Event::OnBeforeAdd', 
    '\MailCustom::onBeforeAdd'
);

class MailCustom
{
    function onBeforeAdd(\Bitrix\Main\Entity\Event $event)
    {
        $fields = $event->getParameter("fields");
        if($fields['EVENT_NAME'] != 'SALE_NEW_ORDER') // модифицируем только конкретное почтовое событие
            return;

        $cFields = $fields['C_FIELDS'];
        $cFields['DELIVERY_TIME'] = "моё значение"; // добавляем время доставки
        $result = new \Bitrix\Main\Entity\EventResult();
        $changedFields = array(
            'C_FIELDS' => $cFields,
        );
        $result->modifyFields($changedFields);
        return $result;
    }
}

Добавление описание нового поля в настройке типа почтового события

Если в почтовое событие добавили новое поле и требуется настроить его передачу в amoCRM, достаточно добавить описание этого поля к описаниям других полей в настройках типа почтового события.

Например, в типе события "Новый заказ" (SALE_NEW_ORDER) добавили поле "Время доставки" с кодом DELIVERY_TIME. Чтобы модуль его "увидел", добавим его к другим полям в настройках типа события:

  1. Находим описание типа события в административной части сайта (Настройки — Настройки продукта — Почтовые события — Типы почтовых событий — Новый заказ (SALE_NEW_ORDER));
  2. В настройках типа события в поле "Описание" для каждого активного языка добавляем с новой строки #DELIVERY_TIME# - Время доставки;

Всё! Теперь вы можете интегрировать это поле точно так же, как и все остальные.

Будьте внимательны в написании системного кода поля. Поле с таким именем должно существовать в почтовом событии. В случае ошибки ничего передано не будет.

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