Всем - привет. Друзья, в одной из прошлых статей мы говорили о том, как автоматически формировать лиды в CRM системе Bitrix24 на основе данных, полученных из формы обратной связи на вашем лендинг пейдж. Но тогда мы пользовались стандартными полями, которые предоставляла нам система.
На этом возможности сервиса не заканчиваются, ведь бизнес у каждого индивидуален, и вам может понадобится нестандартные поля. Благо, система позволяет их создавать. Давайте сегодня разберемся как это делается.
Создание своих полей для лидов в CRM Bitrix24
Первым делом, нужно добавить новое поле в интерфейсе вашего кабинета. Это можно сделать перейдя по такому пути: "CRM" > "Настройки" >"Настройки форм и отчетов" > "Пользовательские поля":
Здесь жмем "Добавить поле" и переходим к следующему шагу:
Тут нужно указать порядок сортировки, я оставил по умолчанию, можно добавить название поля для других языковых версий. Обязательным полем является "Название". Далее, мы можем сделать его обязательным, пометив галочкой. Галочки "Показывать в фильтре" и "Показывать в списке" - нужны для удобства навигации в самой системе.
Ну и самый главный пункт - это "Тип". Здесь вы выбираете, какой тип данных будете получать (Текстовое поле, чекбокс, выпадающий список, файл и т.д.). Давайте сегодня передадим строку. Настройки других типов, могут несущественно отличаться.
После этого, жмем "Сохранить" и еще раз заходим в настройки только что созданного поля. Обратите внимание на адресную строку, там появился id поля. Выглядит примерно так: UF_CRM_1444981630. Вот он нам и пригодится.
Сегодня я немного видоизменю код обработчика и подход в целом, так как не всем было удобно менять атрибут name, на какой-то другой, ведь у многих уже была их привязка к обработчику отправки формы.
Поэтому оставим их в покое, задавайте любые, а в обработчике уже настроим все :)
Я создал такую структуру:
<div class="wrapper"> <p>Оставьте ваши контакты, и наш менеджер<br/> свяжется с вами</p> <form id="application" action="application.php" method=post enctype="multipart/form-data"> <input name="metka" class="metka" type="hidden" value="метка для формы"/> <input name="name" class="userName" maxlength="50" placeholder="Введите ваше имя" required=""> <input name="phone" type="tel" class="userPhone" maxlength="50" placeholder="Введите ваш телефон" required=""> <input name="mail" type="email" class="userMail" maxlength="50" placeholder="Введите ваш E-mail*" required /> <input name="inn" class="userInn" type="text"/> <input class="applicationButton" type="submit" value="ОТПРАВИТЬ" /> </form> </div>
Здесь четыре стандартных поля и одно скрытое с классом "metka". Оно необходимо для того, чтобы при получении заявки мы понимали, из какой именно формы к нам пришло сообщение. В value для этого поля нужно написать, например, заказали обратный звонок, или заявка из формы в футере. Кроме того, мы сделаем так, что текст из этого поля будет названием лида. Не именем, а именно названием (есть такой обязательный параметр при формировании лида в CRM системе Bitrix 24).
Теперь небольшое отступление. Если кто-то делает формы первый раз, то суть заключается в том, что мы каждому полю задаем атрибут name с определенным именем, например, name="userMail", а в php обработчике формы забираем значение, введенное пользователем в это поле.
Теперь можем двигаться дальше. Давайте посмотрим на обработчик. Почти ничего не поменялось, только теперь нам не важно какие были значения name у формы. Точно так же формируем массив с данными и передаем в битрикс:
<? define('CRM_HOST', 'smartlanding.bitrix24.ru'); // Домен срм системы define('CRM_PORT', '443'); define('CRM_PATH', '/crm/configs/import/lead.php'); define('CRM_LOGIN', 'smart-landing@yandex.ru'); // логин define('CRM_PASSWORD', 'dfu488hojsof83'); // пароль /********************************************************************************************/ if ($_SERVER['REQUEST_METHOD'] == 'POST'){ // получаем данные из полей и задаем название лида $postData = array( 'TITLE' => $_POST['metka'], // сохраняем нашу метку и формируем заголовок лида 'NAME' => $_POST['name'], // сохраняем имя 'PHONE_WORK' =>$_POST['phone'], // сохраняем телефон 'EMAIL_WORK' => $_POST['mail'], // сохраняем почту 'UF_CRM_1443598721' => $_POST['inn'], // сохраняем ИНН ); // авторизация, проверка логина и пароля if (defined('CRM_AUTH')) { $postData['AUTH'] = CRM_AUTH; } else { $postData['LOGIN'] = CRM_LOGIN; $postData['PASSWORD'] = CRM_PASSWORD; } $fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30); if ($fp) { // формируем и шифруем строку с данными из формы $strPostData = ''; foreach ($postData as $key => $value) $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value); $str = "POST ".CRM_PATH." HTTP/1.0\r\n"; $str .= "Host: ".CRM_HOST."\r\n"; $str .= "Content-Type: application/x-www-form-urlencoded\r\n"; $str .= "Content-Length: ".strlen($strPostData)."\r\n"; $str .= "Connection: close\r\n\r\n"; $str .= $strPostData; // отправляем запрос в срм систему fwrite($fp, $str ); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); $response = explode("\r\n\r\n", $result); $output = '<pre>'.print_r($response[1], 1).'</pre>'; } else { echo 'Connection Failed! '.$errstr.' ('.$errno.')'; } } ?>
Тут, нас в первую очередь, интересуют эти строки:
define('CRM_HOST', 'smartlanding.bitrix24.ru'); // Домен срм системы define('CRM_PORT', '443'); define('CRM_PATH', '/crm/configs/import/lead.php'); define('CRM_LOGIN', 'smart-landing@yandex.ru'); // логин define('CRM_PASSWORD', 'dfu488hojsof83'); // пароль
Указываем адрес своего битрикса, логин и пароль. Как и в прошлый раз, рекомендую создать пользователя с ограниченными правами, и использовать только его логин и пароль. Так безопаснее.
Ну а теперь, собственно, и наши поля. Битрикс принимает определенные параметры, которые заданы в системе по умолчанию. Там уже есть куча нужных и не нужных полей, таких как телефон, email, должность, имя, фамилия и т.д. Ознакомиться со всей таблицей можно в моей первой статье, ссылка на которую в начале поста. Именно ими мы и пользуемся (TITLE, NAME, PHONE_WORK, EMAIL_WORK.
$postData = array( 'TITLE' => $_POST['metka'], // сохраняем нашу метку и формируем заголовок лида 'NAME' => $_POST['name'], // сохраняем имя 'PHONE_WORK' =>$_POST['phone'], // сохраняем телефон 'EMAIL_WORK' => $_POST['mail'], // сохраняем почту 'UF_CRM_1443598721' => $_POST['inn'], // сохраняем ИНН );
TITLE - это как раз то обязательное поле, о котором я говорил ранее (название лида). В него и передаем нашу метку.
С именем, телефоном и почтой - понятно. Больше всего нас интересует ИНН. Ведь такого поля в CRM системе не предусмотрено.
Помните тот id, который мы запоминали при создании нового поля? Вот именно он и будет параметром. Вот так просто все это делается. Пишем 'UF_CRM_1443598721' и передаем в него наш ИНН: $_POST['inn']. Остальное оставляем без изменений.
Подобная реализация легко вписывается в уже существующие проекты. А еще разработчики на Adobe Muse очень просили. Так вот, этот скрипт просто добавьте в свои обработчики форм, чуть отредактировав под свои имена.
Кроме того, на этом примере легко сделать поля для приема UTM меток, и передавать их вместе с остальными данными в битрикс. О том, как передавать данные UTM меток на почту, я рассказывал вот тут По аналогии вы легко передадите их в CRM. А на сегодня - все. Буду благодарен за расшаривание статьи в социальных сетях. Спасибо. Пока.
71 комментарий
Очень интересно! обязательно еще раз к вам загляну!
Весь интернет перерыл в поисках решения проблемы - почему то пользовательские поля не заполнялись. Ваша статья очень помогла. Спасибо большое!
Здорово. Я и сам долго мучался. Так как информации на эту тему практически небыло )
удалите, пожалуйста предыдущий комментарий
Не отправляется форма на Битрикс, на почту приходит, а в Битрикс нет.
Без http указан адрес битрикса?
Я пробовал привязать Ваш код отправки на Битрикс к своей форме отправке на почту. У меня в форме был указан method="post" (с кавычками), когда убрал кавычки отправляться стало как на почту так и в Битрикс. Огромное спасибо за блог и информацию которой Вы с нами делитесь.
Никогда не сталкивался с подобной проблемой. Даже предположить не мог. Но здорово, что разобрались и от писали. Спасибо. Буду иметь ввиду. Да и другим может пригодиться.
Ошибка 500. Уже все танцы с бубном проводил =/
Здравствуйте. Спасибо за инструкцию, очень помогли, но возник вопрос. При создании нового лида, назначенный ответственный не получает никакого уведомления об этом. Нужно в ручную заходить и обновлять страницу с лидами. В платных тарифах уведомления можно настроить в Бизнес процессах, как я понял, а как можно выйти из этой ситуации в бесплатных тарифах? Или я то-то не так понял((
Я не в курсе, насчет внутренней кухни битрикса, наверняка можно настроить как-то уведомления, по крайней мере на почту точно должно приходить, вроде бы как.
Интегрировал данный код в свой существующий, который на почту отправлял, все работает, в битрикс передает. Спасибо.
Но есть один момент, когда незаполненные обязательные поля форма не отправляется, но в битриксе появляется лид по этой форме, а на почте нет ничего.
Подскажите пожалуйста как исправить?
В php почти не шарю, помогите готовой строкой)
В смысле, как исправить чтоб без обезательных полей не появлялся лид в битриксе.
Ну так форма работает с условием же? То есть не отправляются данные если не заполнены обязательные поля? Вот такое же услови нужно и для скрипта отправки в битрикс.
Или, если данные пришли методом post, то
[/php]if ($_SERVER['REQUEST_METHOD'] == 'POST'){}[/php]
Внутри проверить не пустые ли данные в полях:
Если пришли, то отправляем, иначе, кидаем назад и выводим ошибку. Для ошибки можно открыть сессию и сохранить ее туда, а на главной вывести переменную с ошибкой. Тут не скажешь в двух словах и не обойдешься строчкой кода, а нужно нормальные проверки делать и обрабатывать ошибки.
Просто required="" в нужные поля формы забыл добавил)
Спасибо за ваши статьи.
Сейчас обратился в поддержку битрикс24, не присваивается ответственный через ASSIGNED_BY_ID, жду ответ. Потом отпишусь.
Марк, подскажите пожалуйста, решился ли этот вопрос? 2 дня бьюсь и никак не могу поменять ответственного через ASSIGNED_BY_ID
Все дело было в правах доступа пользователя через которого создавался лид из формы.
Внимательно ограничивайте права)
Принимайте благодарность за такой шикарный пост! С новыми CRM-формами, к сожалению, пока что бяка - нельзя несколько форм на одной странице показывать:( Буду сейчас по этой схеме обработку собирать.
Спасибо)
Дмитрий, на разных формах — должны быть разные id?
Если по статье делаете, то да.
Подскажите пожалуйста, а передавать данные UTM меток я могу через этот скрипт в битрикс24?
Да, нет никакой разницы, это же такая же строка получается.
dimadv7, спасибо огромное за статью! Может знаете - как по произвольным полям отчеты в Битриксе формировать? Я передаю utm метки и хотелось бы по ним круговую диаграмму строить
Здравствуйте. Нет, не в курсе. Я не работал так "плотно" с битрикс24 )
Дима, привет! Отличный скрипт, все отправляется как нужно. А вот вопрос, может не по теме немного: как сделать уведомления в битриксе о приходе нового лида (там звуковые или пуш, как обычно у них в системе показываются при каком-то сообщении или событии) ? А то лид пришел "по тихому" в битрикс, так можно пропустить... В почте - там тоже не всегда можно выловить. А так удобно - пришел лид, и звуковое сопровождение. Это как-то реализовывается в этом скрипте? Или нужно в битриксе что-то копать?
Привет. Спасибо. Да нет, скрипт не причем, нужно в битриксе копать. По идеи должно быть уведомление какое-то. Но я не разбирался с этим. Самым быстрым способом, думаю, будет техподдержку "потрясти".
Дальнейшая обработка лида выполняется по вашим сценариям, лид может быть конвертирован в контакт, компанию, сделку или закрыт как некачественный. При конвертации лида в новую сущность, поля заполняются автоматически, а лид становится историей нового элемента.
По поводу уведомлений. В битриксе24 при создании лида их почему-то нет.
Уведомление приходит ответственному когда для него создается дело.
Нашел такой костыль: В качестве почты для отправки данных файлом application.php указал email привязанный к порталу битрикс 24 . Теперь создется лид и дело и ответственному приходит уведомление, а письмо прикрепляется в ленту к лиду.
Добрый день. Подскажите пожалуйста. В Битрикс 24 есть несколько созданных мною обязательных к заполнению пользовательских полей в Лиде. Тип полей enumeration (список). Не могу разобраться как с помощью Вашего скрипта передавать значение этих полей, что бы при создании лида они автоматически заполнялись определенным значением.
Максим, присоединяюсь к вопросу. У меня так же есть список, но его можно свести к выбору "Да/Нет" по каждому элементу списка, разведя по отдельным пользовательским полям в Битрикс24.
Ошибку пишет скрипт, так только не крутил
Спасибо огромное. Привязал по инструкции все поля в лиды, теперь фильтрую продажи по рекламным каналам и даже ключевым фразам. Очень полезная штука!!!!!
Добрый день, подскажите. У нас есть форма, но при ее отправки, если есть лид (дубликат) нужно чтобы выдавало ошибку, такой лид есть. Нужно получить данные из CRM и вывести их в форме.
Добрый день. Не в курсе, не сталкивался с такой задачей.
Добрый день. Не в курсе, не сталкивался с такой задачей.
Дмитрий, такой вопрос, а можно такую форму с капчей в тильду интегрировать?
Геннадий, нет. В тильду не получится, так как у конструкторов нельзя добавлять php-файлы на хостинг.
Ну ладно... спасибо)
У вас оч крутой личный сайт)
Геннадий, спасибо за теплые слова)
Здравствуйте, Дмитрий. Спасибо за статью. Интересно, а каким образом интегрировать КВИЗ?
А в чем разница?
Добрый день. У меня на лэндинге несколько форм плюс квиз. Пока пробую на одной. Вот структура:
"
Прикрепить файл
Перезвоните мне
"
Файл application.php поместил в корень сайта. Логин и пароль заменил. Пробую отправить, не приходит ни на почту, ни в ЦРМ.
Подскажите, пожалуйста в чем ошибка!
Без понятия как отправить файл. Начните с простого отправьте имя и телефон, например.
Да что же такое!!! форма не вставляется! Сайт вот: _https://podokonniki.hpltop.ru/
Форма Вам знакома
Я рекомендую такой алгоритм. Скачайте исходник, замените данные для CRM, добейтесь того, чтобы из исходника уходили данные в CRM. Затем уже будете под свои нужды подстраивать.
Да, спасибо. Попробую
Попробовал.
1. Залил в корень вся файлы исходника. Заменил данные для CRM.
Результат: Данные в CRM уходят. На почту - нет
2. В исходном файле заменил формы (вставил из своего сайта)
Результат: Данные в CRM уходят. На почту - нет
3. Когда в корень вернул все папки и стили, форма работать перестала
Так в исходнике и речи же не было об отправке на почту. Только в CRM. Так что, было бы даже удивительно, если бы вы получили данные еще и на почту. Теперь можете потихоньку интегрировать с обработчиком вашей формы на сайте. Попробуйте, опять, только имя, например, и телефон отправить.
Сделал еще раз все постепенно. Шаг за шагом. Все данные отправляются на CRM только до того момента, пока я не помещаю рабочую структуру формы на сайт. Форма простая только имя и телефон. Но, на сайте не отправляет и соответственно не перебрасывает на страницу благодарности.
Экспериментирую пока только на одной форме
Уф. Вроде разобрался методом тыка. Убрал в форме вот это
И заработало. Во всяком случае отправляет. Осталось разобраться с почтой и с отображением ошибок когда не заполнены поля.
Опять не пускает код <form
class="form-element site-form"
autocomplete="on"
Отлично. Чтобы добавить код в комментарии заключите его, например в [ html ] //тут код [ / html ] в скобках только не ставьте пробелы. Если это php то ставьте [ php ] [ /php ] и если JS, то [ javascript ] //код [ /javascript ]. Обязательно уберите пробелы в скобках. Тогда будет так:
Понятно, Дмитрий, спасибо. А не подскажите, как добиться того, чтобы когда не заполнены поля, форма не отправлялась?
Доброе утро :), Дмиртий. Вот с этим "как добиться того, чтобы когда не заполнены поля, форма не отправлялась" .... разобрался.
Теперь два момента.
1. Отправка почты. Не отправляет. Я из файла application1.php (из вашей статьи https://smartlanding.biz/crm-sistema-bitrix24-dlya-landing-page.html) добавил вот этот код на свою страницу благодарности
$leadData['NAME'],
'Телефон' => $leadData['PHONE_WORK'],
'Город:' => $leadData['ADDRESS'],
'Комментарий:' => $leadData['COMMENTS'],
);
$strPostData = '';
foreach ($postData as $key => $value)
$strPostData .= ($strPostData == '' ? '' : ' ').$key.' '.($value)."";
$str .= "Заявка: ".($strPostData)."\r\n";
require 'class.phpmailer.php'; //Дополнительный скрипт для отправки файла, можете не открывать, просто положите рядом с index.html и этим файлом.
$mail = new PHPMailer();
$mail->From = 'site@hpl-plita.by'; // от кого
$mail->FromName = 'hpl-plita.by'; // от кого Имя
$mail->AddAddress('ymelik-2009@yandex.ru', 'Имя'); // кому Ваша почта, Имя
$mail->IsHTML(true); // формат письма HTML
$mail->Subject = "Новая заявка"; // тема письма
// если есть файл, то прикрепляем его к письму
if(isset($_FILES['upl'])) {
if($_FILES['upl']['error'] == 0){
$mail->AddAttachment($_FILES['upl']['tmp_name'], $_FILES['upl']['name']);
}
}
$mail->Body = $str;
// отправляем наше письмо
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);
}
if (!empty($_POST['submit'])) complete_mail();
else show_form();
?>
Но, ничего на почту не приходит.... Файл class.phpmailer.php в корень добавил
2. И вторая проблема: "как отправить с формы файл в битрикс". Погуглил, решения не нашел
По поводу отправки на почту, лучше этой статьей пользуйтесь. Она +- - самая актуальная. Но мы же на вашем сайте добились того, чтобы письма уходили на почту. Используйте его. Так будет правильнее.
Да, Дмитрий, добились. Без Битрикса все работает. Но теперь, как примирить почту в том виде, в котором была настроена не знаю.
Пробовал вставить код из config.php на страницу application.php... не срабатывает.
А почта очень нужна. Т.к. отправлять КВИЗ в лиды неблагодарное дело. Проще интегрироваться с почтовым ящиком.
Нет, Дмитрий, никак. Для эксперимента пока не интегрировал в Битрикс КВИЗ, он на почту отправляется. А формы - уходят только на Битрикс. Беда!
Дмитрий, поможете советом? Вы писали: "Но мы же на вашем сайте добились того, чтобы письма уходили на почту. Используйте его."
Я не понимаю, кого его?
Получается, добавив в структуру формы action="spasibo.php" (я переименовал файл application.php) отправки почты перестает работать и отправляет только в CRM.
В остальном структура формы не менялась:
Прикрепить файл
Перезвоните мне
Папка mail в корне присутствует (квиз отправляется отлично). Те. понимаю, что либо в структуру формы, либо в файл spasibo.php надо что-то добавлять. А что без понятия. Помогите, пожалуйста, Дмитрий
У вас есть обработчики формы. Код с отправкой в битрикс нужно интегрировать в него. Когда данные успешно отправлены на почту, нужно отправлять их и в CRM. Структуру сайтов не понмю уже.
По поводу файлов, я не отправлял никогда их, не в курсе как это сделать. Нужно убедиться у ТП битрикса возможно ли это вообще.
Здравствуйте, Дмитрий. Воз и ныне там. Не понимаю ничего в PHP
Почта настроена как в вашей статье https://smartlanding.biz/sozdanie-formy-obratnoj-svyazi.html
И отправка прекрасно работала, пока не стал интергировать отправку форм в Битрикс.
"Когда данные успешно отправлены на почту, нужно отправлять их и в CRM." - вот эта фраза - для меня темный лес.
Я так понимаю, есть какие-то основные файлы для отправки почты, которые находятся в папке mail (mail.js, mail.php, config.php, valid) и еще файлы в папке phpmailer.
Кроме того, в корень добавился файл application.php Ну и в структуру формы добавился код Вот сама структура (файл application.php заменен на application.php):
form id="open-form_2" action="spasibo.php" method=post enctype="multipart/form-data" autocomplete="on">
Прикрепить файл
Перезвоните мне
/form
Отправка форм на Бирикс отлично работает, но с почтой не понимаю.
Какой код куда вставлять? Предполагаю, что код для интеграции в Битрикс из файла spasibo.php нужно вставить в файл config.php?
Но, как там увяжутся между собой параметhы name
В обще все сумбурно и безграмотно, извините.
Опять не прошла форма
id="open-form_2" action="spasibo.php" method=post enctype="multipart/form-data" autocomplete="on">
Прикрепить файл
Перезвоните мне
action="spasibo.php" - вот это не нужно, если мы используем JS для отпрвки запроса.
Вам нужно трогать только mail.php config.php, valid.php и mail.js. их объединять с обработчиком битрикса. Вся задача и состоит в том, что бы данные из полей форм увязать между обработчиком, который отправляет на почту и обработчиком битрикса. Это все будет в файлах mail.php config.php, valid.php и mail.js
Но, в этом случае, может перестать отправляться на почту КВИЗ? Или нет? Просто я отказался от отправки квиза на битрикс слишком много полей.
В общем, Дмитрий, не могу больше занимать ваше время. Своими силами справиться с отправкой форм и на битрикс и на почту я не смогу. Сколько обойдется ваша помощь. Можем сработать и без кворка и вам и мне будет выгоднее
Ответил на почту.
а как список вывести ?
Какой список, куда вывести?...
здравствуйте
ответите или нет, но не знаю что делать.
$queryData = http_build_query(array(
'fields' => array(
//'TITLE' => 'Название формы',
//'NAME' => $_POST["name"],
'PHONE' => array(
array(
"VALUE" => $_POST["phone"],
"VALUE_TYPE" => "WORK"
)
)
),
'params' => array("REGISTER_SONET_EVENT" => "Y")
может подскажите, почему передается только один первый параметр в битрикс.
или TITLE если он стоит первым или другой если первым оказывается.
буду благодарен
александр, а зачем в строку переводите? Чем код из примера не подошел?
александр, я подумал что новая функция ведь. но странно что только один параметр первый передается, любой)