Автоматизируем отправку заявок в банк Битрикс 24.
Казалось бы стандартная задача, если описать ее без углубления в тех процесс компании то нужно сделать:
Процесс 1:
ИМ Bitrix> CRMB24 > Bank> CRMB24 > ИМ Bitrix
Клиент делает заказ в интернет магазине (для оформления в кредит применяем правила корзины по платёжной системе), далее стандартным обменом заказ выгружается в в Б24 Коробку, после менеджер обрабатывает заказ (наличие, актуальность цены итд) и следующим шагом нам необходимо передать информацию в банк да передать так, что бы потом словить ответ, отсортировать по направлению сделки, видеть воронку, отчет итд итп. Мы уже опускаем факт звонка, писем и СМС/Viberсообщений клиенту.
Процесс 2:
ЗаказCRM B24 > Bank > CRM B24
Тут все проще, создаем сделку, выбираем товар.
Почему проще?
- Мы можем свободно создать руками сделку в нужно нам направлении, проследить заполнение всех полей и принимать решением к примеру бизнес процессом, но!
(Данный процесс опишем немного позже, но в нем мы используем свой класс расчета цены позиций товара)
Проблемы с которыми мы обязательно столкнемся в варианте Процесса 1:
- Сделки пришедшие из ИМ Битрикс всегда попадают в направление Общие.
- Цена на товар будет уже с учетом всех скидок и наценок пришедших с ИМ Битрикс.
- При импорте заказа с ИМ Битрикс не запускаются Бизнес процессы помечены как « - запуск - При создании».
- Дополнительную информацию или поля заказа стандартный модуль обмена не передает.
- Нет возможности редактировать сделку для смены к примеру варианта кредитования или количества месяцев.
- Нет возможности запустить Бизнес процесс во время обработки заказа (исключаем вариант смены статуса или изменения заказа с подпиской на запуск БП после изменения документа);
Проблемы с которыми мы обязательно столкнемся в варианте Процесса 2:
- Стоимость товара нельзя динамически менять в зависимости от условий.
- Нет возможности редактировать сделку для смены к примеру варианта кредитования или количества месяцев.
- Нет возможности запустить Бизнес процесс во время обработки заказа (исключаем вариант смены статуса или изменения заказа с подпиской на запуск БП после изменения документа);
Решаем проблемы по мере их поступления ) максимально использую стандартные механизмы.
Мы будем считать, что поля сделки созданной из ИМ Битрикс мы уже разнесли, в первую очередь нам нужно сменить направление сделки. Направление сделки на сегодня (август 2018 года) сменить бизнес процессом нет возможности. Запустить бизнес процесс при создании сделки пришедшей из ИМ Битрикс также нет вариантов, а техподдержка лишь создает заявки в отдел разработки, так как быть? Авоттак:
init.php
$BPID – ID бизнес процесса
AddEventHandler("crm", "OnAfterCrmDealAdd", Array("MyCrmDealAdd", "My_CrmDealAdd")); class MyCrmDealAdd { function My_CrmDealAdd(&$arFields) { //AddMessage2Log('arFields:'.print_r($arFields, true)); if (\Bitrix\Main\Loader::IncludeModule('bizproc') && \Bitrix\Main\Loader::includeModule('crm')) { $dbpId = CBPDocument::StartWorkflow( $BPID, array('crm', "CCrmDocumentDeal", 'DEAL_'.$arFields["ID"]), array(), $arErrorsTmp ); } } |
Тем самым мы будем запускать Бизнес процесс при создании любой сделки, тут лучше добавить проверку на то, что сделка эта относится к сделкам из ИМ Битрикс например смотря на поле «ORIGIN_ID» в нем будет IDзаказа пришедшего из ИМ Битрикс.
Да, кстати бизнес процесс который мы запускаем делает следующее:
1. Добавляет в название пометку «Кредит»
2. Меняет на закрытый от всех статус «Кредит»
3. Копирует сделку и устанавливает новое Направление сделки
4. Удаляет текущую сделку при успешном выполнении выше пройдённых действий.
Зачем удалять? Да попросту потому, что если оставляем сделку при редактировании скопированной сделки и сохранении товаров, запускается метод синхронизации цены и синхронизирует старую сделку в направлении Общие, программная деактивация не помогает, потому удаляем).
И вот мы уже имеем сделку в нужном нам направлении сделок, остается запустить после проверки бизнес процесс. Да тут вроде все просто, создаем промежуточный статус и подписываемся на него для запуска процесса, но нет! Заказчик говорит хочу кнопочку, что бы она отображалась только там, где условия наши проходят, и что бы обновления ставились потом, можете? Можем )
И вот нам нужно запустить Бизнес процесс менеджером, но как? У нас по сути есть варианты использовать RestAPI, Webhook, или в лоб посредством аякс запроса прямо из сделки, да мы еще сможем и проверить можно ли менеджеру показать эту кнопку, а еще мы сможем.... да по сути что угодно и не внося изменения в код, просто добавив это средствами javascriptпрямо в интерфейс сделки.
Пишем бизнес процесс в котором проверяем статус сделки, есть ли для этой сделки уже созданные счета, если нет создаем счет, получаем на него ссылку и передаем в отправку прям в банк, помечая письмо. Попутно запускаем процесс ожидания ответа от банка по этой заявке, переводим в соответствующий статус сделку.
Пишем скрипт генерирующий нам доступные кнопки и вуаля....
Фото ниже )
И это было только начала из того, что вышло...