﻿# Настроить обработчик событий в модулях

> [HTML Version](events_processing.html)

В рамках модуля вы можете настроить обработку различных событий системы.

Обработчик события запускает определённое действие в системе после того, как событие произошло. Это удобно при разработке комплексных модулей.

При наступлении события в системе может:

- выполняться [скрипт](type-script.md), созданный в обработчике;

- запускаться [бизнес-процесс, настроенный на уровне модуля](extention-processes.md);

- отправляться сообщение во [внешний микросервис](custom_services.md). Доступно только в [ELMA365 On‑Premises](elma365-on-premises.md).

Например, в модуле можно создать обработчик, который запускает процесс после редактирования пользователем элемента приложения.

## Настроить обработчик событий

Cоздание и настройка обработчика событий в модуле состоит из нескольких этапов. Рассмотрим их подробнее.

### Шаг 1. Создание обработчика и выбор его типа

1. Перейдите в **Администрирование** **>** **Модули**.

2. Наведите курсор на модуль и нажмите на появившийся значок шестерёнки.

3. Перейдите на вкладку **Обработка событий**.

4. Нажмите кнопку **+ Обработчик **и задайте необходимые настройки в открывшемся окне.  
**(events_processing-1.png)**

- **Название\* **— укажите название обработчика;

- **Тип обработчика\*** — выберите действие, которое будет совершаться при выполнении события:

	- **Запуск скрипта** — выполняет скрипт, созданный в обработчике;

	- **Запуск процесса** — запускает бизнес-процесс, созданный в модуле на вкладке **Процессы**;

	- **Передача сообщения в сервис** — отправляет сообщение во внешний микросервис. Действие доступно только в [ELMA365 On‑Premises](elma365-on-premises.md).

### Шаг 2. Выбор домена и события обработки

1. ****В поле** Домен события **выберите область, события в которой будет отслеживать обработчик. Доступны следующие домены:

- **Все события **— отслеживает события из всех доменов системы;

- **Элементы приложения** — при выборе домена появится поле **Фильтр типа объекта**. Укажите в нём приложение, события которого будут обрабатываться, или оставьте поле незаполненным, чтобы отслеживать события всех существующих в системе приложений.

В качестве события можно выбрать создание, обновление, изменение статуса, удаление элемента, а также добавления комментариев в его ленте.

Если вы установили отслеживание событий создания, обновления или удаления элемента и указали приложение, то в скрипт добавляется свойство \[OBJECT\]. Оно содержит строго типизированные данные элемента приложения и соответствующего события.

Обратите внимание, модуль с созданным обработчиком и указанным в нём приложением, нельзя [экспортировать](export_extention.md). Вы можете [создать решение](create-solution.md) и выгрузить модуль и приложение в его составе;

- **Линии** — фиксирует получение входящего и отправку исходящего сообщения в сессии, а также системные сообщения о смене состояния сессии. Подробнее читайте в статье [«Обработка событий при новом сообщении в сессии»](new-message-events-processing.md);

- **Задачи** — домен доступен при активированном [платном решении CRM](licenses-crm.md), в котором включено использование [задач CRM](/ru/help/crm/360012911980.html). Обработчик фиксирует события, связанные с созданием, изменением, отменой или завершением задач CRM. В появившемся поле **Фильтр типа задачи** укажите, по каким задачам отслеживать события:

	- **Звонок**, **Письмо**, **Вебинар**, **Встреча** или [пользовательский тип задачи](create-custom-crm-task.md) — по задачам CRM выбранного типа;

	- **Все задачи CRM** — по всем выше указанным задачам сразу.

Подробнее о настройке обработчика этого типа читайте в статье [«Обработка событий в задачах CRM»](/ru/help/crm/crm-events-processing.html); 

- **Приложения** — обработчик отслеживает события экспорта или импорта данных из приложений системы;

- **Файлы** — позволяет фиксировать создание, редактирование, удаление файла, добавление к нему комментариев и изменение настроек доступа;

- **Директории** — отслеживает создание, редактирование, удаление и изменение настроек доступа для папок в разделе **Файлы**;

- **Дубли** — настроить обработчик можно при активации платного решения **ELMA365 Управление** **контрагентами**, отдельно или в составе одного из [решений CRM](licenses-crm.md), в котором включён поиск дублей, т. е. элементов приложения с одинаковыми данными. Действие в обработчике запускается при объединении записей-дубликатов. Пример такого обработчика можно посмотреть в статье [«Обработка событий в дублях»](/ru/help/crm/duplicates-events-processing.html);

- **Модули** — позволяет отследить:

	- включение и выключение модулей;

	- установку и обновление модулей. Обратите внимание, эти события фиксируются, только если обработчик уже есть в системе, а не во время его добавления в составе модуля;

- **Настройки** — фиксируется редактирование [дополнительных параметров](360009207779.md), настроенных на уровне компании, раздела или приложения;

- **Пользователи** — отслеживаются события, связанные с [управлением аккаунтом пользователя](360004833572.md), а также действия самого пользователя, например, изменение статуса, ошибка авторизации, выход из системы и т. д. 

Если в компании используется решение **ELMA365 Omni**, в качестве события можно выбрать смену статуса оператора. Подробнее читайте в статье [«Обработка событий при изменении статуса оператора»](operator-status-events-processing.md).

2. С версии системы 2025.1 для доменов **Все события** и **Элементы приложений** доступна опция **Динамически вычислять тип события скриптом**, которая позволяет задать фильтрацию событий. Включите опцию, чтообы обработчик отслеживал сразу несколько типов событий, которые задаются в [скрипте фильтрации](#dynamic-filtering-script). Фильтрация событий выполняется до запуска самого обработчика. Например, вы можете настроить один обработчик для отслеживания событий по элементам разных приложений.

3. В поле** Событие **выберите событие, после которого будет запускаться обработчик. При включении динамического вычисления типа событий поле не отображается, так как события для отслеживания задаются в скрипте.

4. Нажмите кнопку **Создать**.

### Шаг 3. Добавление скрипта или бизнес-процесса

После того как вы заполнили необходимые поля для обработчика и сохранили их, откроется окно настройки действия при фиксации события. В зависимости от типа обработчика выполните следующие действия:

1. **Для типа «Запуск скрипта».**  
****  
Напишите скрипт на вкладке **Скрипты**. В нём вы можете:

1. Получить доступ к переменным из других разделов и пользовательских модулей, настроив [опциональные зависимости](optional-dependencies.md).  
  
Для создания зависимости на верхней панели нажмите **Настройки** и добавьте разделы и модули в список. После этого к ним можно обращаться через глобальную константу [Imports](optional-dependencies.md#use-imports). Модуль с опциональными зависимостями можно экспортировать без ограничений.  
(events_processing-4.png)

2. Получить доступ к переменным из приложений с помощью [глобальной константы](global-constants.md) `Namespace`.   
  
Для этого в модуле на вкладке **Настройки** создайте поле типа **Приложение** и укажите в нём целевое приложение. Тогда в скрипте обработчика вы сможете применять методы, доступные для выполнения операций над элементами приложений. Подробнее с таким примером можно ознакомиться в [ELMA365 Community](https://community.elma365.com/ru/threads/96/).  
  
При использовании глобальной константы `Namespace` модуль можно экспортировать только в составе [пользовательского решения](create-solution.md) вместе с приложением, которое отслеживается в обработчике.

3. Обращаться к библиотекам из [npm-пакетов с серверными зависимостями](npm-package.md), если добавили их предварительно на вкладке **Файлы**. Эта возможность доступна только для ELMA365 On-Premises начиная с версии 2026.4.

2. **Для типа «Запуск процесса».**  
****  
Выберите бизнес-процесс, созданный на уровне модуля. Затем на вкладке **Входные переменные** сопоставьте переменные из контекста процесса со свойствами события: объект, название, автор и т. д.  
  
Для событий предусмотрен ограниченный набор системных полей: идентификатор, название, описание, время события, название объекта, автор и т. д. Также для каждого события есть индивидуальные свойства, отсылающие к выбранному домену и типу действия.  
  
Настройка на вкладке **Входные переменные** позволяет определить источники данных для свойств из контекста процесса. Она выполняется в зависимости от реализуемого обработчика и конечной потребности пользователя.  
**(events_peocessing-2.png)**

**Важно**:** **на вкладке **Входные переменные** отображаются свойства, присутствующие в контексте процесса в момент его привязки к обработчику. Если контекст процесса был изменён, новые переменные не появятся в настройках обработчика. Необходимо повторно создать и настроить обработчик событий, привязав к нему тот же самый бизнес‑процесс.

3. **Для типа «Передача сообщения в сервис».**  
****  
Укажите микросервис.

### Шаг 4. Настройка фильтрации событий при динамическом вычислении

Этот шаг выполняется, если на этапе создания обработчика вы выбрали домены **Все события** или **Элементы приложения** и включили опцию **Динамически вычислять тип события скриптом**.

1. Задайте фильтр для отбора событий, которые отслеживает обработчик. Для этого на вкладке **Настройки** нажмите ссылку **Вычисляется скриптом**.**(events_processing-5.png)**

2. Откроется вкладка **Скрипты**. В методе \[OBJECT\]** **укажите типы событий для отслеживания. Доступные варианты зависят от домена, выбранного при создании обработчика:

- **Все события** — можно указать типы событий из различных доменов. Их список ограничен. При создании фильтра вы увидите подсказки с возможными значениями;

- **Элементы приложений** — доступны только события по элементам приложений.

Подробнее о написании скрипта и особенностях динамической фильтрации читайте в [справке ELMA365 TS SDK](https://tssdk.elma365.com/ru/latest/pages/quick-start/intro_dynamic-filtration.html).

Сформированный фильтр применится после публикации обработчика событий и включения модуля. Обработчик будет запускаться по событиям системы, которые подходят под заданные условия.

### Шаг 5. Публикация и включение обработчика

На верхней панели страницы настроек нажмите **Сохранить**, а затем **Опубликовать**, чтобы активировать обработчик событий. Затем перейдите на страницу управления модулем и включите его.

Таким образом в пользовательском модуле можно добавить несколько обработчиков событий. Например, при смене статуса элементов приложения **Заказы** будет запускаться бизнес‑процесс обработки. При этом с помощью [скрипта](360027203731.md) или [шлюза](360012495911.md) можно настроить разные ветки хода процесса в зависимости от статуса элемента. 

В ELMA365 Community вы можете ознакомиться с настройкой обработчиков на примерах:

- [отслеживание изменения значений в свойствах элементов приложения](https://community.elma365.com/ru/threads/96/);

- [отправка письма на электронную почту при изменении статуса элемента приложения](https://community.elma365.com/ru/threads/2793/).

Также вы можете ознакомиться с настройкой обработчиков с теми доменами, которые доступны при использовании решений:

- **ELMA365 CRM** — [«Обработка событий в задачах CRM»](/ru/help/crm/crm-events-processing.html) и [«Обработка событий в дублях»](/ru/help/crm/duplicates-events-processing.html);

- **ELMA365 Omni** — [«Обработка событий при новом сообщении в сессии»](new-message-events-processing.md) и [«Обработка событий при изменении статуса оператора»](operator-status-events-processing.md).

## Трассировка скрипта обработчика 

Если для обработчика типа **Запуск скрипта** включён сбор трейсов в разделе **Администрирование > Инструменты разработчика**, вы можете проанализировать выполнение его скрипта. Это позволяет оценить продолжительность отдельных запросов, оптимизировать код и выявить причины ошибок.

Чтобы изучить трейсы, в настройках модуля откройте вкладку **Обработка событий**. Для просмотра записей:

- по всем обработчикам в модуле — в правом верхнем углу страницы нажмите **Посмотреть трассировку**;

- по определённому обработчику — нажмите на его название и на верхней панели выберите **Трассировка**. 

Подробнее о включении трассировки и информации в карточке трейса читайте в статье [«Трассировка серверных скриптов»](server-script-tracing.md).

## Отменить действие обработчика

Чтобы отменить действие обработчика, на вкладке **Обработка событий** нажмите на три точки напротив названия созданного обработчика. Затем выберите кнопку **Отмена публикации**. При этом после выполнения события действие обработчика не будет совершаться. 

Кроме того, при необходимости вы можете удалить существующий обработчик событий. Для этого на вкладке **Обработка событий** отметьте один или несколько обработчиков в списке. Нажмите кнопку **Удалить**, появившуюся в правом верхнем углу страницы. 

**(events_processing-3.png)**