Поставлена задача - перенести данные по заказам и контактам из CRM "Простой бизнес" в Битрикс24.
Доступа к базе данных CRM "Простой бизнес" нет, дают три csv-файла по заказам, контактам и компаниям соответственно.
Заказы решили загружать в сделки, а к ним создавать и привязывать контакты и компании.
Алгоритм действий:
- Создаем входящий вебхук: на странице Разработчикам->Другое:
Обязательно укажем права: CRM, Задачи, Пользователи.
Получаем токен для REST-api (генерируется при создании вебхука, на скриншоте - размытая область). - Теперь пишем скрипт, который будет будет открывать csv-файл, последовательно брать из него данные, обрабатывать их и с помощью REST-api загружать в CRM.
Скрипт загрузки получился такой:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
use Bitrix\Main;
function crmPostDeal($token, $metod, $queryData)
{
$userb24 = 5;
$b24 = 'https://bitrix.testpro.ru';
$queryUrl = $b24.'/rest/'.$userb24.'/'.$token.'/'.$metod;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
$token = '1g32jhg13jh13jhg';
$arParams = array();
$row=0;
if (($handle = fopen("orders.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 2000, ";")) !== FALSE) {
if($row==0)
{
}
else
{
// add params to array
$arParams["TITLE"] = "Заказ №".$data[0];
$arName = explode(" ", $data[1]);
// CREATED_BY_ID - Создано пользователем
$metod = "user.get";
$queryData = http_build_query(array(
"NAME" => trim($arName[0]),
"LAST_NAME" => trim($arName[1])
));
$re = crmPostDeal($token, $metod, $queryData);
$ob = json_decode($re,true);
if(intval($ob["result"][0]["ID"])>0){
$arParams["CREATED_BY_ID"] = $ob["result"][0]["ID"];
$arParams["ASSIGNED_BY_ID"] = $ob["result"][0]["ID"];
}
// МПП
//Менеджер
// ASSIGNED_BY_ID - ответственный за сделку
//$arParams["ASSIGNED_BY_ID"] = 5 //Саня создает юзеров
//Источник
//Истрочник сделки или лида. Варианты списка
//(
//OTHER- Прочее;
//1 - Реклама интернет;
//2 - Рассылка почта;
//3 - По рекомендации;
//4 - Сам нашел;
//5 - Консультант)
$source = '';
if($data[5] == "Прочее"){
$source = "OTHER";
}elseif($data[5] == "Реклама интернет"){
$source = 1;
}elseif($data[5] == "Рассылка почта"){
$source = 2;
}elseif($data[5] == "По рекомендации"){
$source = 3;
}elseif($data[5] == "Сам нашел"){
$source = 4;
}elseif($data[5] == "Консультант"){
$source = 5;
}
$arParams["SOURCE_ID"] = $source;
// №КП
$arParams["UF_CRM_1621934796754"] = $data[6];
// Дата КП
$arParams["UF_CRM_1621934924622"] = $data[7];
//Статус
//Запрос;
//отказ;
//отправлено КП;
//обсуждение проекта;
//выставлен счет;
//получена оплата;
$status = '';
if($data[8] == "Запрос"){
$status = 1;
}elseif($data[8] == "отказ"){
$status = 2;
}elseif($data[8] == "отправлено КП"){
$status = 3;
}elseif($data[8] == "обсуждение проекта"){
$status = 4;
}elseif($data[8] == "выставлен счет"){
$status = 5;
}elseif($data[8] == "получена оплата"){
$status = 6;
}elseif($data[8] == ""){
$status = "NEW";
}
$arParams["STAGE_ID"] = $status;
//Комментарии МПП
$arParams["UF_CRM_1621935474473"] = $data[9];
//ТЗ, Опросный лист
//(множественный файл)
$ex_tz = explode(";", $data[16]);
if(count($ex_tz)==1)
{
$base64 = base64_encode(file_get_contents($data[16]));
$arParams["UF_CRM_1622097303472"]['fileData'] = array(preg_replace("#http:\/\/prostoy\.irbispro\.ru\/files\/#","",$data[16]),$base64);
}
elseif(count($ex_tz)>1)
{
foreach($ex_tz as $k => $fileUrl){
$base64 = base64_encode(file_get_contents($fileUrl));
$arParams["UF_CRM_1622097411131"][fileData][$k] = array(preg_replace("#http:\/\/prostoy\.irbispro\.ru\/files\/#","",$fileUrl),$base64);
}
}
//Стоимость, руб.
$arParams["OPPORTUNITY"] = $data[19];
$arParams["CURRENCY_ID"] = "RUB";
//Номер счета
$arParams["UF_CRM_1622097779695"] = $data[20];
// Тех отдел
//комментарии тех.отдела
$arParams["UF_CRM_1622099229455"] = $data[32];
//Рецепт (для ШОК)
$arParams["UF_CRM_1622099271768"] = $data[33];
//В производстве
//Дата оплаты
$arParams["UF_CRM_1622099397138"] = $data[34];
//Согласовано
$arParams["UF_CRM_1622099465170"] = $data[35];
//Дата отгрузки
$arParams["UF_CRM_1622099517984"] = $data[36];
//ПЭК
$arParams["UF_CRM_1622099559117"] = $data[37];
//Данные о конечном клиенте
//Звонок №1 (Дилер)
$arParams["UF_CRM_1622099622406"] = $data[38];
//Комментарии №1
$arParams["UF_CRM_1622099678190"] = $data[39];
//Звонок №2 (Монтажник)
$arParams["UF_CRM_1622099742231"] = $data[40];
//Комментарии №2
$arParams["UF_CRM_1622099787420"] = $data[41];
//Звонок №3 (Конечный клиент)
$arParams["UF_CRM_1622099842875"] = $data[42];
//Комментарии №3
$arParams["UF_CRM_1622099880639"] = $data[43];
//Дата обращения
$arParams["UF_CRM_1622099921681"] = $data[44];
//Сайт источнник
//Сайт с которого пришла заявка. Список. Варианты (
//Irbispro.ru;
//food-exp.ru;
//platinumdoors.ru;
//fastcold.ru;
//irbisgold.ru(ГОЛД);
//irbiscold.ru(КОЛД);
//eternal-kit.ru;
//irbisGates.ru;
//sklad-pro.ru
$site = '';
if($data[45] == "Irbispro.ru"){
$site = 43;
}elseif($data[45] == "food-exp.ru"){
$site = 44;
}elseif($data[45] == "platinumdoors.ru"){
$site = 45;
}elseif($data[45] == "fastcold.ru"){
$site = 46;
}elseif($data[45] == "irbisgold.ru(ГОЛД)"){
$site = 47;
}elseif($data[45] == "irbiscold.ru(КОЛД)"){
$site = 48;
}elseif($data[45] == "eternal-kit.ru"){
$site = 49;
}elseif($data[45] == "irbisGates.ru"){
$site = 50;
}elseif($data[45] == "sklad-pro.ru"){
$site = 51;
}
$arParams["UF_CRM_1622100108621"] = $site;
//Направление деятельности компании
//Список. Варианты
//Пищевые производства (мясная промышленность, пекарни);
//Торговые центры, магазины, супермаркеты (торговля, оптовая торговля);
//Рестораны, столовые, кафе;
//Склады, производственные помещения, строительные фирмы
$np = '';
if($data[46] == "Пищевые производства (мясная промышленность, пекарни)"){
$np = 51;
}elseif($data[46] == "Торговые центры, магазины, супермаркеты (торговля, оптовая торговля)"){
$np = 52;
}elseif($data[46] == "Рестораны, столовые, кафе"){
$np = 53;
}elseif($data[46] == "Склады, производственные помещения, строительные фирмы"){
$np = 54;
}
$arParams["UF_CRM_1622100378971"] = $np;
// проверяем есть ли сделка с кодом $data[0]
$metod = "crm.deal.list";
$queryData = http_build_query(array(
'order' => array("STAGE_ID"=>"ASC"),
'filter' => array('TITLE' => $arParams["TITLE"]),
'select' => array("ID", "TITLE", "STAGE_ID", "PROBABILITY", "OPPORTUNITY", "CURRENCY_ID")
));
$result = crmPostDeal($token, $metod, $queryData);
$obj = json_decode($result,true);
if(!empty($obj[result]))
{
if(intval($obj["result"][0]["ID"])>0)
{
$metod = "crm.deal.update";
$queryData = http_build_query(array(
'id' => $obj["result"][0]["ID"],
'fields' => $arParams,
'params' => array("")
));
$r = crmPostDeal($token, $metod, $queryData);
}
}
else
{
// создаем сделку
$metod = "crm.deal.add";
$queryData = http_build_query(array(
'fields' => $arParams,
'params' => array("")
));
$r = crmPostDeal($token, $metod, $queryData);
}
}
$row++;
}
fclose($handle);
}
Отдельно отметим, что дату создания заказа и дату изменения загрузить в CRM с помощью REST-api нельзя, так как эти поля readonly. Поэтому загружать их будем прямыми SQL-запросами(у нас коробочная версия). Для этого, на стороне CRM создаем скрипт:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$connection = \Bitrix\Main\Application::getConnection();
function formDate($date){
$ex = explode(" ", $date);
$ex1 = explode(".", $ex[0]);
return $ex1[2]."-".$ex1[1]."-".$ex1[0]." ".$ex[1];
}
$arParams = array();
$row=0;
if (($handle = fopen("orders.csv", "r")) !== FALSE)
{
while (($data = fgetcsv($handle, 2000, ";")) !== FALSE)
{
if($row==0)
{
}
else
{
$data[0] = "Заказ №".$data[0];
if(strlen($data[2])>0){
$data[2] = formDate($data[2]);
$resUp = $connection->query('UPDATE b_crm_deal SET DATE_CREATE = \''.$data[2].'\' WHERE TITLE=\''.$data[0].'\'');
}
if(strlen($data[3])>0){
//Изменено
$data[3] = formDate($data[3]);
$resUp = $connection->query('UPDATE b_crm_deal SET DATE_MODIFY = \''.$data[3].'\' WHERE TITLE=\''.$data[0].'\'');
}
}
$row++;
}
fclose($handle);
}
Теги: CRM, sql update, crm.deal.add, crm.deal.update, импорт из csv, импорт сделок, crm простой бизнес