Отправляем заказы из ms2 в лиды CRM Битрикс24 (старый протокол)

В сообществе ни раз задавали вопрос про выгрузку заказов из MODX в CRM Битрикс24. Есть достаточно простой способ создавать лиды по старому протоколу. Делается это одним плагином на событие msOnCreateOrder. Да, функционал будет довольно ограничен, но с помощью него добавить лид вполне возможно, правда не прикрепляя к лиду товары. За то не нужно заморачиваться с созданием приложения, получения токена и т.д.
Плагин
Необходимо указать некоторые настройки в константы:
- CRM_HOST — Хост компании в Битрикс24,
- CRM_LOGIN и CRM_PASSWORD — Логин/пароль юзера в Битрикс24 с правами CRM.
switch ($modx->event->name) {
case 'msOnCreateOrder':
define('CRM_HOST', 'domain.bitrix24.ru');
define('CRM_LOGIN', 'username');
define('CRM_PASSWORD', 'password');
define('CRM_PORT', '443');
define('CRM_PATH', '/crm/configs/import/lead.php');
$data = array(
'order' => $msOrder->toArray(),
'delivery' => $msOrder->Delivery->toArray(),
'payment' => $msOrder->Payment->toArray(),
'address' => $msOrder->Address->toArray(),
'user' => $msOrder->User->toArray(),
'user_profile' => $msOrder->UserProfile->toArray(),
);
$receiver_name = explode(' ', $data['address']['receiver']);
// Формируем данные лида
$post = array(
'LOGIN' => CRM_LOGIN,
'PASSWORD' => CRM_PASSWORD,
'TITLE' => 'Заказ ' . $data['order']['num'],
'COMPANY_TITLE' => 'Сайт',
'NAME' => $receiver_name[0] ?: '',
'LAST_NAME' => $receiver_name[1] ?: '',
'COMMENTS' => $data['address']['comment'],
'OPPORTUNITY' => $data['order']['cost'],
'CURRENCY_ID' => 'RUB',
'ADDRESS' => ($data['address']['country'] . ' ' . $data['address']['region'] . ' ' . $data['address']['city'] . ', ' . $data['address']['street'] . ', ' . $data['address']['building'] . ', ' . $data['address']['room'] . ', ' . $data['address']['index']),
'PHONE_WORK' => $data['address']['phone'],
'WEB_WORK' => '',
'EMAIL_WORK' => $data['user_profile']['email'],
'STATUS_ID' => 'NEW',
'OPENED' => 'Y',
'SOURCE_ID' => 8, // Источник - Заказ на сайте
'ASSIGNED_BY_ID' => 4, // ID ответственного юзера в Битрикс24
);
// Создаем лид
if ($fp = fsockopen('ssl://' . CRM_HOST, CRM_PORT, $errno, $errstr, 30)) {
$post_str = http_build_query($post);
$headers = "POST " . CRM_PATH . " HTTP/1.0\r\n";
$headers .= "Host: " . CRM_HOST . "\r\n";
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: " . strlen($post_str) . "\r\n";
$headers .= "Connection: close\r\n\r\n";
$headers .= $post_str;
fwrite($fp, $headers);
$result = '';
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
$response = explode("\r\n\r\n", $result);
}
break;
} Итого
Как видите, все довольно просто. Можно даже немножко кастомизировать данные, которые будут попадать в CRM.
Комментарии: 36
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
А в комментарии ниже, тоже есть отправка по новому заказу.
Но справедливости ради, этот код поприятнее выглядит)
Может кому надо будет:
Идем в б24->Приложения->вебхуки
Создаем входящий вебхук с правами CRM. Копируем ссылку.
Идем в modx->системные настройки->создаем настройку «webHookUrl» и в значение вставляем скопированную ссылку.
Создаем плагин, как Выше написал Павел, на событие msOnCreateOrder
1. Как можно передать данные по вебхукам из обычной формы?
2. А куда девать секретный код, который выдаётся Битриксом?
1) Вот это положить в assets/b24/bxresthandler.class.php:
2) Создать настройку bx24_resturl с УРЛом вебхука.
3) Создать сниппет-хук для FormIt bx24FormItHook:
4) Вызывать примерно так:
5) Чанк tpl.AjaxForm.example содержит форму с полями, которые используются в сниппете-хуке bx24FormItHook:
Вроде сделал всё по инструкции, но не создаётся лид в Битрикс24, я даже жёстко прописывал данные передаваемые из сниппета в Биртикс24, но увы…
Можете подсказать в чём может быть косяк?
1)Создать файл…
https://yadi.sk/i/2z6FaL1i3N2hrU
2) Системная настройка
https://yadi.sk/i/9OGzs3ud3N2hWe
3) Сниппет
https://yadi.sk/i/r820Bx_A3N2i6L
4) Вызов
5) Форма
Там в пункте Системные настройки необходимо убрать слово profile/ из url
А заказ из корзины минишопа нужно отправлять в виде «Сделки», а все товары записывать в «Товары сделки».
Естественно все это делать через «Входящий вебхук» битрикса.
Есть у кого-нибудь такие наработки?
Скайп: pavelgvozdb
Телеграм: t.me/pavelgvozdb
Выпросил разработку у Михаила =)
Пока функционал:
Загрузка заказов из ms2 в битрикс24
Загрузка клиентов из ms2 в битрикс24
Поиск клиентов по базе ms2 в битрикс24 перед загрузкой
Возможность синхронизировать товары
Возможность синхронизировать статусы сделок/заказов.
При оформлении заказа с ms2 добавить новый метод оплаты, который будет брать счет, сформированный в ms2 и проставлять номер заказа по логике битрикс24
Добавлю и работу с formit
Все работать будет также, через вебхук
Не совсем понял про новый метод оплаты… Зачем создавать новый метод оплаты для выдергивания номера заказа из битрикса?
По мне, так достаточно чтобы в битрикс передавался вид оплаты и статус оплаты, если не «самовывоз», при этом только в одну сторону, т.к. менеджеры будут сидеть только в битриксе, в админку сайта им незачем лазить.
Это будет необязательным.
2) Для того, чтобы брать готовый счет с б24 (при оплате на расчетный счет) и выдавать его клиенту автоматом, при смене статуса заказа. (Например «Заказ подтвержден, ожидает оплаты»).
3) В лиды по логике попадают потенциальные клиенты. Из лида в сделку перевести — 1 клик.
Сейчас что готово работает так: если клиент делает повторный заказ (уже в базе найден), попадает в сделки. Если клиент не найден — в лиды. Таким образом можно распределять качество заказа. Товарные позиции в любом случае и туда, и туда попадают
Если клиент звонит/пишет емайл. Менеджеры тоже оформляют заказ на сайте, а не в б24! т.к. нет смысла заново вводить в б24 все товары, цены, свойства, остатки.
В обоих случаях нужно автоматически идентифицировать клиента, с целью не дублирования клиента в б24, по телефону и/или емайлу.
Если клиент звонит в офис после оформления заказа, то его можно идентифицировать первоначально по телефону, имени, емайлу, голосу, а затем уточнить номер заказа, если он вдруг тупанул или богатый и сделал несколько заказов.
Идентификации проходят в системе б24, в админку минишопа менеджер не заходит.
Не вижу смысла готовый счет перегонять в минишоп для того чтобы его выслать клиенту, б24 имеет кучу открытых линий и настраиваемых статусов чтобы самостоятельно справиться.
Я не знаю какие бизнесс-процессы у вас, но у меня если клиент уже выбрал товар, оформил заказ и оплатил его, то он уже не потенциальный клиент, а обыкновенный и нужно срочно начинать работу по нему.
Если клиент заполнил форму в контактах или хочет чтобы ему перезвонили или какой-то вопрос по товару, то его в лид записывать и звонить/писать ему по настроению.
Я на личном опыте испытал проблему идентификации. Когда клиент Вам говорит «у меня заказ №1708/4», а б24 проблематично(криво) ищет по кастомным полям. Вообщем то вас никто не станет заставлять активировать данную функцию.
По e-mail? Клиент звонит, диктовать email через ip-телефонию? Глупо. По телефону? Та же практика показывает, клиент может спокойно звонить с рабочего/номера жены/второго номера…
Вы неправильно поняли. Счет, она же, как правило счет-оферта генерируется через б24. Да бы не было путаницы, можно генерировать и отправлять её клиенту автоматом. Опять таки, функционально отключить можно.
А кто сказал про оплату? Я работал в интернет-магазине с 100тней заказов в день. Как правило, 20% из них запрос цен (тендерщики), 10% оплачиваются с сайта. В рф не так то любят кота в мешке.
Как раз для этого и есть открытые линии.
Меня начинают терзать смутные сомнения, что вы сможете выпустить качественный продукт.
1 раз — тендерщик = лид, 2 раз — тендерщик уже не тендерщик = сделка?
А если клиент ошибся с написанием емайл, то он опять — тендерщик?
Куда записывать простых лидов, которые мимо проходили и вопрос задали или форму заполнили?
У б24 есть 2 поиска.
А — кривой фильтр (над таблицей сущностей)
Б — Общий поиск (в шапке сайта)
А — почему кривой? Если Вы будете искать клиента «Федоров» хрен он Вам покажет результат. Там прямое совпадение. Нужно искать именно ИП Федоров А. Ю., причем с учетом регистра.
я 2ой месяц за эту хрень бьюсь с разработчиками.
В rest запросах да, можно выбрать точность совпадения, типа LIKE.
Б — общий шарит даже по документам. Если вбить туда скажем «12», то результатов будет много.
Документы дергаются с диска, а на диск закидываются эти документы из почтовых вложений (как правило, иначе почту и б24 Вам не интегрировать). У нас 200 сотрудников. Представьте сколько там pdf,word,excel файликов со значением «12».
А какое мне дело, что там вас терзает? Вас никто ни к чему не принуждает. Если вам нужно, что бы «работало как надо», Павел дал свои контакты. Не нравится — или делайте сами, или просите разработчиков за отдельную плату.
По обоюдному согласию Вы занялись разработкой модуля, тк постоянно взаимодействуете с Б24 и лучше представляете все механизмы, которые в нем реализованы )