OnBeforeSessionTransfer
Описание и параметры
В событие приходит объект \Bitrix\Main\Event.
Входящие параметры можно получить через $eventParams = $event->getParameters();
Параметры
| Параметр | Описание |
|---|---|
| session | Массив данных сессии, которая перенаправляется на нового оператора. Текущий оператор, с которого предполагается снять диалог, указан в элементе OPERATOR_ID. |
| config | Информация об открытой линии, к которой принадлежит сессия. |
| chat | Объект Bitrix\ImOpenLines\Chat из которого можно получить информацию о чате, который относится к сессии. |
| reasonReturn |
Причина
Перечень доступных причин:
Внимание! Актуальный список причин можно увидеть в классе \Bitrix\ImOpenLines\Queue.
\Bitrix\ImOpenLines\Queue::REASON_DEFAULT; //по умолчанию \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_ABSENT = 'VACATION'; //отпуск \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_DAY_PAUSE = 'NONWORKING'; //нерабочее время \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_DAY_END = 'NONWORKING'; //нерабочее время \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_DELETED = 'DISMISSAL'; //оператор уволен \Bitrix\ImOpenLines\Queue::REASON_REMOVED_FROM_QUEUE = 'REMOVING'; //оператор удален \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_NOT_AVAILABLE = 'NOT_AVAILABLE'; //оператор недоступен \Bitrix\ImOpenLines\Queue::REASON_OPERATOR_OFFLINE = 'OFFLINE'; //оператор не в сети \Bitrix\ImOpenLines\Queue::REASON_QUEUE_TYPE_CHANGED = 'DEFAULT'; //по умолчанию того, почему происходит назначение нового оператора. |
| newOperatorQueue | Массив. Самый важный параметр, который и необходимо вернуть в событии. При необходимости в элементы массива можно вносить изменения и изменять штатную логику.
Элементы массива:
|
Проверка на корректность
Внимательно проверяется корректность данных, которые возвращает обработчик. Если что-то не пройдет проверку, то отработает штатный алгоритм, как будто бы обработчика и нет.
Было создано дополнительное событие OnErrorEventBeforeSessionTransfer.
На него можно подписать на время отладки. В параметрах передается массив ошибок и объект, который вернул обработчик события.
Пример результата
array ( 'errors' => array ( 0 => 'The result of the processing of the event returned with an error', ), 'eventResult' => Bitrix\Main\EventResult::__set_state(array( 'moduleId' => NULL, 'handler' => NULL, 'type' => 0, 'parameters' => array ( 'RESULT' => 5, ), )), )
Данное решение должно существенно облегчить дебаг.
Пример кода
"Болванка" событий
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('imopenlines', 'OnBeforeSessionTransfer', 'onBeforeSessionTransfer');
$eventManager->addEventHandler('imopenlines', 'OnErrorEventBeforeSessionTransfer', 'onErrorEventBeforeSessionTransfer');
public static function onBeforeSessionTransfer(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
//test
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
AddMessage2Log(var_export($eventParams,1), 'onBeforeSessionTransfer');
//END test
$eventParams['newOperatorQueue'] = [
'RESULT' => true,
'OPERATOR_ID' => 1,
'OPERATOR_LIST' =>
[],
'DATE_QUEUE' => false,
'QUEUE_HISTORY' =>
[
1 => true,
],
];
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
$eventParams
);
}
public static function onErrorEventBeforeSessionTransfer(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
//test
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
AddMessage2Log(var_export($eventParams,1), 'OnErrorEventBeforeSessionTransfer');
//END test
}
© «Битрикс», 2001-2025, «1С-Битрикс», 2025