Автоматизация бизнес-процессов своими руками

от автора

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

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

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

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


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

Путь заявки по обработчикам задан в настройках. Пока настройки это массив PHP неограниченной вложенности, но когда-нибудь появится интерфейс. 

Пример настроек: 

'get-bitrix-deal'                             => [ 'id'        => 'get-bitrix-deal', 'subsystem' => 'find-deal', 'next'      => ['remember-deal'], 'prev'      => ['prev-step'], 'condition' => [ [ 'field'     => 'get-bitrix-deal.value', 'operation' => 'empty', 'success'   => [ [ 'field'     => 'bitrix-find-contact.ID', 'operation' => 'empty', 'result'    => ['bitrix-lead-set-default-values'], ], ], ], [ 'field'     => 'get-bitrix-deal.value', 'operation' => '!|empty', 'result'    => ['get-bitrix-deal-by-id'], ], ], ]

Верхнеуровнево система выглядит следующим образом: 

Диаграмма компонентов
Диаграмма компонентов

Реализация на PHP и Laravel. 

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

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

Есть модуль API, который принимает запросы из-вне. Этот модуль имеет расширение, которое позволяет буферизировать запросы и выполнять их либо по расписанию, либо пачками, например, по 10 штук в минуту. 

Далее формируется событие NewRequest, которое перехватывается модулем маршрутизации(supervisor). Супервайзер определяет следующий шаг и передаёт диспетчеру. 

Диспетчер определяет как отправлять запрос в указанный модуль – событием внутри системы, по HTTP, либо поставить задачу в очередь. 

Модуль перехватывает событие, обрабатывает как надо, добавляет в него необходимые данные и отправляет событие обратно. 

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

На текущий момент реализованы следующие модули: 

И основные модули: 

Пример реальной схемы бизнес-процессов, построенных с помощью этих модулей: 


ссылка на оригинал статьи https://habr.com/ru/articles/576266/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *