События

Какие уже события отслеживаются?

При установке модуля сразу  регистрируются обработчики  на события:
  1. main OnBeforeUserAdd - перед добавлением пользователя
  2. main OnAfterUserAdd - после добавления пользователя
  3. main OnBeforeUserUpdate - перед обновлением пользователя
  4. main OnAfterUserUpdate - после обновления пользователя
  5. main OnBeforeEventAdd - перед возникновением почтового события
  6. sale OnBeforeOrderAdd - пере добавлением заказа
  7. sale OnOrderAdd - после добавления заказа
  8. sale OnBeforeOrderUpdate - перед обновлением заказа
  9. sale OnOrderUpdate - при обновлении заказа
  10. sale OnSalePayOrder при оплате заказа
  11. sale OnSaleCancleOrder - при отмене заказа
  12. sale OnSaleStatusOrder - при изменении статуса заказа
При возникновении того или иного события происходит отправка смс,   какой шаблон отправлять при том или ином событии настраивается в модуле на странице - Административный раздел → Настройки → СМС Оповещения → Настройки модуля

События модуля СМС оповещений, доступные для использования

Так как модуль написан используя новое ядро битрикса -  D7, то в модуле доступны события добавления, редактирования, удаления записей из базы данных для следующих классов:
  • \Bxmaker\Smsnotice\Manager
  • \Bxmaker\Smsnotice\Service
  • \Bxmaker\SmsNotice\Template
  • \Bxmaker\SmsNotice\Template\Type
  • \Bxmaker\SmsNotuce\Template\Site
/* события - OnBeforeAdd, OnAfterAdd, OnBeforeDelete, OnAfterDelete, OnBeforeUpdate, OnAfterUpdate */

AddEventHandler('bxmaker.smsnotice', '\Bxmaker\Smsnotice\Manager::OnBeforeAdd', 'bxmaker_smsnotice_onBeforeAdd');


use \Bitrix\Main\Entity; /* стоку разместить в начале файла */

function bxmaker_smsnotice_onBeforeAdd(Entity\Event $event)
{
    $result = new Entity\EventResult;
    $data = $event->getParameter("fields");

    if (isset($data['STATUS']))
    {
        /* указываем статус сообщения - "доставлено", при добавлении в базу*/
        $result->modifyFields(array('STATUS' => \Bxmaker\SmsNotice::SMS_STATUS_DELIVERED));
    }

    // $result->unsetFields(array('COMMENT'));

    return $result;
}


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

Событие перед отправкой одиночного смс - OnBeforeSend

/* регистрация обработчика события */
AddEventHandler('bxmaker.smsnotice', 'OnBeforeSend','bxmaker_smsnotice_OnBeforeSend');


function bxmaker_smsnotice_OnBeforeSend($arFields){

    /* здесь происходят какие то операции над $arFields */

    /* 1. возвращение результата работы обработчик*/
    /* если ошибок не было */
    return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array($arFields));


    /* 2. если произошла ошибка или надо предотвратить отправку
    возвращаем ошибку и текст ошибки. Можно добавить 
    $arFields['error_msg'] = 'Текст ошибки. Если не указывать
    этот параметр будет возвращен текст ошибки - "Один из обработчиков событий вернул статус - ERROR.
    Отправка не произошла."';
    */
    return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, array($arFields));

}

Отправка смс по шаблону - OnBeforeSendTemplate

/* регистрация обработчика события */AddEventHandler('bxmaker.smsnotice', 'OnBeforeSendTemplate','bxmaker_smsnotice_OnBeforeSendTemplate');


function bxmaker_smsnotice_OnBeforeSendTemplate($template, $arFields){

    /* здесь происходят какие то операции над $arFields */

    /*1. возвращение результата работы обработчик*/
    /* если ошибок не было */
    return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array($template, $arFields));


    /*2. если произошла ошибка или надо предотвратить отправку
    возвращаем ошибку и текст ошибки. Можно добавить
    $arFields['error_msg'] = 'Текст ошибки. Если не указывать
    этот параметр будет возвращен текст ошибки - "Один из обработчиков событий вернул статус - ERROR.
    Отправка не произошла."';
    */
    return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::ERROR, array($template, $arFields));

}

Событие OnPreparedOrderData - Изменение полей с данными о заказе, добавление своих

Это событие вызывается после того как подготовленные данные о заказе, которые дальше будут использоваться для формирования смс сообщения на основе шаблона. Его удобно использовать для расширения данных для автозамены. 

Рассмотрим на примере.

Задача -  нужно покупателю в смс отправить сообщение с ссылкой на страницу с описанием пункты выдачи заказа, схемой проезда и тп. Идентификатор пункта выдачи есть в адресе доставки -  Пункт выдачи boxberry: ул. Одоевского, д. 27, лит. А, секция 212 (ТК Платформа, м. Приморская), телефон: (812) 930-09-15, часы работы: с 11:00 до 21:00, без выходных, код филиала: 78461/6603/7/72

1. Добавляем  тип шаблона для статуса заказа

Добавление типа смс шаблона

2. Указываем в настройках модуля для соответствующего статуса отправку сообщений  с типом

В настройках модуля к статусу привязываем тип отправляемых сообщений

3. Добавляем СМС шаблон в котором указываем новое поле с кодом филиала (оно будет формироваться обработчиком события далее)
Адрес пункта выдачи - https://boxberry.ru/find_an_office/#DELIVERY_BOXBERRY_CODE_FILIALA#/

Добавление шаблона смс для добавленного типа на битриксе


4. Добавляем обработчик события в файл /bitrix/php_interface/init.php

$eventManager = \Bitrix\Main\EventManager::getInstance(); //подписываем обработчик на событие

$eventManager->addEventHandler("bxmaker.smsnotice", "OnPreparedOrderData", array(
'CBXmakerEventHandler', 'bxmaker_smsnotice__OnPreparedOrderData'
));
 
Class CBXmakerEventHandler {

    // обоработчик ----
    public function bxmaker_smsnotice__OnPreparedOrderData(\Bitrix\Main\Event $event)
    {
          $arOrderData = $event->getParameters();

          $codFiliala = '';
          $deliveryAdress = explode(',',$arOrderData['PROPERTY_VALUE_ADDRESS']);
          foreach($deliveryAdress as $adres)
          {
              $arAdresCol = explode(':', trim($adres));
              if($arAdresCol[0] = 'код филиала')
              {
                  $codFiliala = explode('/', trim($arAdresCol[1]));
                  $codFiliala = $codFiliala[0];
               }
           }

          $arOrderData['DELIVERY_BOXBERRY_CODE_FILIALA'] = $codFiliala;

           $result = new \Bitrix\Main\EventResult(Bitrix\Main\EventResult::SUCCESS, $arOrderData);

           return $result;
    }
}
 
5. В результате получаем

В результате отправляется смс на битриксе покупателю с ссылкой на пункт выдачи