Продолжаю серию статей, посвященную доработкам стандартного функционала Битрикс24. Сегодня мы применим вполне себе документированную для REST API функцию crm.lead.add для коробочной версии продукта.
Почему Вам может никогда не потребоваться данная доработка. Стандартные CRM-формы позволяют размещать на сайте специальные формы, по результату заполнения которых все данные будут переданы в CRM-систему, то есть в нашем случае — будет создан лид. Но, как говорится «никогда не говори никогда» и при решении некоторых задач — стандартный функционал не всегда устраивает.
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__) . "/../.."); $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; ini_set('display_errors', 'on'); define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_PERMISSIONS", true); define('BX_NO_ACCELERATOR_RESET', true); define('CHK_EVENT', true); define('BX_WITH_ON_AFTER_EPILOG', true); require ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); @set_time_limit(0); @ignore_user_abort(true); \Bitrix\Main\Loader::includeModule('im'); //id ответственного и уведомителя $responsible = 1; $inform = 2; $oLead = new CCrmLead(false); $arFields = array( "TITLE" => $_REQUEST['name'] . ' - ' . $_REQUEST['city'], "NAME" => $_REQUEST['name'], "STATUS_ID" => 'NEW', "OPENED" => "Y", "COMMENTS" => $_REQUEST['message'], "COMPANY_TITLE" => $_REQUEST['organization'], "UF_CRM_1562047838555" => $_REQUEST['inn'], "SOURCE_ID" => "SELF", "FM" => Array( "EMAIL" => Array( "n0" => Array( "VALUE" => $_REQUEST['email'], "VALUE_TYPE" => "WORK", ) , ) , 'PHONE' => array( 'n0' => array( 'VALUE' => $_REQUEST['phone'], 'VALUE_TYPE' => 'WORK' ) ) , ) , ); $LEAD_ID = $oLead->Add($arFields, true, array( 'CURRENT_USER' => $responsible )); /*отправляем уведомление о новом лиде*/ if (IsModuleInstalled("im") && CModule::IncludeModule("im")) { $attach = new CIMMessageParamAttach(null, "#95c255"); $attach->AddLink(Array( "NAME" => "Создан лид № " . $LEAD_ID . "", "DESC" => "Лид должен быть обработан в ближайшее время!", "LINK" => "https://адрес_портала/crm/lead/details/" . $LEAD_ID . "/" )); $arMessageFields = array( "TO_USER_ID" => $responsible, "FROM_USER_ID" => $inform, "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, "MESSAGE" => "Новая заявка с сайта", "ATTACH" => Array( $attach ) ); $mess = CIMNotify::Add($arMessageFields); } CMain::FinalActions();
Давайте теперь разберем отдельные моменты, которые могут вызвать сложности.
Само создание лида заканчивает на 50-й строке, далее мы отправляем уведомление о новом лиде ответственному сотруднику. Собственно, в строках 20-21 мы обозначаем роли. $responsible
— идентификатор ответственного за лид сотрудника,$inform
— идентификатор сотрудника, от имени которого будут приходить уведомления.
$_REQUEST
— означает, что наш скрипт получает данные из формы (в моем случае — методом POST). На этапе отладки — можете указать эти значения непосредственно в исходном коде скрипта.
UF_CRM_1562047838555
в 31-й строке — пример заполнения пользовательского поля. В моем случае — это ИНН. Но как же получить этот удивительный идентификатор? На самом деле просто, более того, существует как минимум два способа:
32 строка — SOURCE_ID
. Идентификатор источника или просто Источник. Особенность состоит в том, что предустановленные источники имеют идентификаторы вида SELF, PARTNER, CALL, а вот добавленные самостоятельно — будут иметь уже числовой идентификатор. На это случай, к сожалению у меня не предусмотрено двух стульев способов. ID ищем в исходном коде страницы.
С 33-й строки — обратите внимание как нужно передавать электронную почту и контактный телефон.
По нюансам и особенностям — пожалуй, что и все.
Описание всех доступных полей смотрите в официальной документации.
Спасибо! Не мог CORS запрос сделать в Битрикс24 Bitrix24, помогло define («NOT_CHECK_PERMISSIONS», true);
А как можно сделать проверку по номеру телефона, и если такой лид уже имеется то дополняем информацию о лиде и (или) делаем лид повторным?
Поиск лида выполняется методом CCrmLead::GetList или CCrmLead::GetListEx. Я разбирал поиск по номеру телефона на примере компаний. Подробнее в этой статье.
За обновление лида отвечает метод CCrmLead::Update.
Спасибо
А как добавлять несколько телефонов и почты при создание лида?
и еще у меня вопрос, при создание лида, БП или роботы будут срабатывать после создания лида? если нет, то как запустить по api?
Добавить номера и почты получилось.
'EMAIL' => array ( 'n0' => array ('VALUE' => '[email protected]', 'VALUE_TYPE' => 'WORK'), 'n1' => array ('VALUE' => '[email protected]', 'VALUE_TYPE' => 'WORK'), 'n2' => array ('VALUE' => '[email protected]', 'VALUE_TYPE' => 'WORK'), ) , 'PHONE' => array (
Подскажите, как запустить к созданному Лиду роботы и БП?
БП можно запустить штатными средствами. Настройки CRM -> Роботы и бизнес-процессы -> Бизнес-процессы. Далее создаете БП с автоматическим запуском при добавлении лида.
С Роботами CRM по аналогии. Там только обратите внимание, что роботы добавляются для стадий.
у меня есть БП и роботы которые срабатывают при создание лида. Но когда я создаю лид по api
new CCrmLead
, они не запускаюся.Тогда идей нет, надо разбираться. Возможно лид создается с ошибками. Попробуйте включить логирование ошибок.
я читал что БП и роботы нужно в скрипте запускать после добавления лида. ноя не понимаю как запустить
вы пробовали добавлять лид по новому api?
\Bitrix\Crm\Service\Container::getInstance()->getFactory(\CCrmOwnerType::Lead);
Да, я пробовал добавлять лиды через методы ядра D7.
Добавление элемента CRM через API ничем не отличается от создания его через интерфейс портала. Т.е. если все сделано правильно, то нет необходимости в ручном запуске БП.
Для запуска БП через API — ознакомьтесь с методом CBPDocument::StartWorkflow. Но я бы рекомендовал вернуться к созданию лида и разобраться что с ним не так.