Данная статья посвящена интеграции форм на сайте с CRM Битрикс 24. Она описывает стандартную интеграцию с помощью встроенных возможностей 1С-Битрикс: Управление сайтом и CRM Битрикс 24. Также в ней указаны некоторые проблемы, которые могут возникнуть при интеграции форм на сайте с CRM, которые не освещены в основной статье учебного курса: «Администратор сервиса Битрикс 24». Если на вашем сайте установлена другая система управления, отличная от 1С-Битрикс, или формы, которые вы планируете интегрировать с Битрикс 24 выполнены в обход модуля «Веб-формы», то данная статья не поможет решить ваш вопрос в полной мере.
Основные настройки необходимы для интеграции форм с Битрикс 24
Первое, что требуется сделать — это зайти в настройки модуля «Веб-формы» и во вкладке «Связь с CRM» добавить привязку к вашему порталу (рис.1).
Важно: для осуществления интеграции требуется версия 1С-Битрикс 11.5 и выше.
Рис.1
Если при добавлении вашего портала возникает следующая ошибка: «Неподходящая версия модуля CRM». То это может происходить по следующим причинам:
- Версия модуля «CRM» в вашем Битрикс 24 ниже версии 11.5 или версия вашей системы управления 1С-Битрикс ниже версии 11.5 (1С-Битрикс проверяет http заголовок X-CRM-Version, который должен отправлять портал Битрикс 24, чтобы тот не был меньше 11.5.0)
- Ваш сайт и ваш портал Битрикс 24 работают не по https протоколу. (Это не является 100% информацией, но в своей практике я столкнулся с проблемой при интеграции форм, пока не перевел работу сайта и портала на защищенный https протокол)
- Проблемы в работе сокетов на сайте. Необходимо проверить, что функция fsockopen работает корректно и может отправлять запросы на ваш портал. (Если есть проблемы с сокетами в 1С-Битрикс, то как и в моем случае может появиться данная ошибка)
После успешного добавления вашего портала необходимо настроить те поля формы, которые будут отправляться в Битрикс 24. Для этого переходим в раздел: сервисы > веб-формы > настройка форм. Затем выбираем нашу форму и во вкладке CRM (рис.2) выбираем способ отсылки данных формы и соответствие полей формы на сайте полям в Битрикс 24.
Рис.2
- При ручной отправке данных формы, информация будет отправлена в CRM после того, как менеджер или администратор сайта вручную отправят результат формы в CRM (рис.3)
- При автоматической отправке, информация будет отправляться сразу после, того как пользователь успешно заполнит форму.
Примечание: если при автоматической отправке формы по каким-либо причинам данные формы не были отправлены, потребуется сделать повторную отправку результата формы вручную.
Рис.3
Также следует отметить, что на момент написания данной статьи по умолчанию Битрикс не поддерживает отправку полей формы типа файл.
Интеграция данных формы в лиды или сделки
Описанный выше метод интеграции форм позволяет создавать как лиды, так и сделки на базе тех данных, которые будут отправляться в Битрикс 24. По умолчанию на основе отправленной информации создаются именно лиды, если выбран режим работы: «Классическая CRM». Если же режим работы указан как «Простая CRM», то после создания лида автоматически создастся сделка по данным отправленным из формы на сайте. Поэтому данный метод подходит для создания как лидов, так и сделок.
Результаты интеграции
Индикатор успешной отправки результатов формы отображается в столбце Отправлено в CRM (рис.4).
Рис.4
В CRM результаты интеграции будут выглядеть следующим образом (рис.5)
Рис.5
13 сентября 2019 1С-Битрикс Битрикс24
Возникла задача интеграции лендинга с CRM Битрикс24. Лендинг самый обычный на HTML. Необходимо было создавать лиды из отправляемых с сайта форм обратной связи.
В формах была отправка не только данных о пользователе — имя, телефон и e-mail, но и передача нескольких нестандартных значений — название выбранного товара и пользовательский текст.
Нужно учитывать, что для создания лида в Битрикс24 поле Заголовок и Имя обязательно. Остальные поля заполняются по необходимости. Поле телефон и e-mail стандартные, а название товара и текст было решено передавать в пользовательский комментарий к лиду.
Содержание
- 1 PHP скрипт для создания лида в CRM Битрикс24
- 2 Стандартные имена ключей для полей Битрикс24
- 3 Передача значения в пользовательское поле Битрикс24 из PHP скрипта
- 4 Как узнать ID пользовательского поля?
PHP скрипт для создания лида в CRM Битрикс24
В CRM 1C-Битрикс формы, созданные через модуль форм подключаются проще простого, достаточно включить это в настройках. Но и тут на деле все оказалось довольно просто. У Битрикс существует REST API, с помощью которого можно передавать лиды через PHP скрипт. И использовать популярную CRM для любого сайта.
<?php define('CRM_HOST', 'login.bitrix24.ru'); // Указываем Ваш домен в CRM define('CRM_PORT', '443'); // Порт сервера CRM. Установлен по умолчанию, не меняем define('CRM_PATH', '/crm/configs/import/lead.php'); define('CRM_LOGIN', 'login@it-blog.ru'); // Логин пользователя Вашей CRM define('CRM_PASSWORD', 'pass'); // Пароль пользователя Вашей CRM if ($_SERVER['REQUEST_METHOD'] == 'POST') { $name = $_POST['name'];// Получаем данные из поля Имя $phone = $_POST['phone']; // Получаем данные из поля Телефон $usermail = $_POST['email']; // Получаем данные из поля E-mail $product = $_POST['product']; // Получаем данные из скрытого поля названия товара if(!empty($_POST['comment'])) { $comment = $_POST['comment']; // Если есть комментарий, то получаем поле Комментарий } $postData = array( 'TITLE' => 'Заявка с сайта', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'EMAIL_WORK' => $usermail, // E-mail 'COMMENTS' => $product.' '.$comment // Пользовательский комментарий ); 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.0rn"; $str .= "Host: ".CRM_HOST."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); $response = explode("rnrn", $result); $output = '<pre>'.print_r($response[1], 1).'</pre>'; } else { echo 'Connection Failed! '.$errstr.' ('.$errno.')'; } } ?>
Поле название товара передается через скрытый input в форме
<input type="hidden" value="Название товара" />
И при отправке в CRM к нему добавляется комментарий, если он заполнен.
Нужен ремонт форсунок краснодар? Качественный и надежный сервис окажет услуги по диагностике и ремонту дизельных форсунок.
С помощью этого нехитрого скрипта вы можете передавать любые значения из форм в поля лида.
Стандартные имена ключей для полей Битрикс24
Здесь приведены только основные поля, которые могут понадобиться для большинства сайтов. Полный список полей можно узнать из документации к Битрикс24.
TITLE — название лида
NAME — имя
LAST_NAME — фамилия
SECOND_NAME — отчество
PHONE_WORK — рабочий телефон
PHONE_MOBILE — мобильный телефон
PHONE_HOME — домашний телефон
EMAIL_WORK — рабочий e-mail
EMAIL_HOME — личный e-mail
ADDRESS — адрес
COMMENTS — комментарий
COMPANY_TITLE — название компании
WEB_HOME — личная страница
WEB_WORK — корпоративный сайт
IM_OTHER — другой контакт
Передача значения в пользовательское поле Битрикс24 из PHP скрипта
Для начала необходимо создать пользовательское поле в самой CRM:
- Зайти в раздел CRM → Настройки → Настройки форм и отчетов → Пользовательские поля → Лид и Добавить поле
- Указать название поля
- Установить галочку «Показывать в списке»
- Выбрать тип поля, например «Строка»
- Сохранить
Далее в массиве $postData добавить новое значение 'UF_CRM_XXXXXXXXXX' => $customField
,
где XXXXXXXXXX — это ID пользовательского поля
$postData = array( 'TITLE' => 'Заявка с сайта', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'EMAIL_WORK' => $usermail, // E-mail 'COMMENTS' => $product.' '.$comment, // Пользовательский комментарий 'UF_CRM_XXXXXXXXXX' => $customField, // Пользовательское поле );
Как узнать ID пользовательского поля?
Чтобы узнать ID пользовательского поля, нужно:
- Зайти в раздел CRM → Настройки → Настройки форм и отчетов → Пользовательские поля → Лид и Список поле
- В списке найти нужное поле и перейти в него
В адресной строке, вы увидите значение UF_CRM_XXXXXXXXXX https://login.bitrix24.ru/crm/configs/fields/CRM_LEAD/edit/UF_CRM_XXXXXXXXXX/ , где UF_CRM_XXXXXXXXXX
— это и есть ID
Узнать как открыть фирму в Германии на https://offshorensk.ru/
Пользователь 1288159 Заглянувший Сообщений: 32 |
Как итог перейти без последствий не возможно, ломается файл .left.menu_ext.php и index.php из-за чего соответственно полностью становится не рабочий сайт магазина…… + в папке текущего сайта создаются еще пару папок. Напрашивается вопрос, А НАФИГА ТРОАГАТЬ ТЕКУЩИЙ САЙТ? НАФИГА В ЕГО ПАПКУ ЧТО-ТО ПИСАТЬ? Простите но это ПРОВАЛ! Все заверения то что вы ГОД разрабатывали и тестили что-то там, в голове не укладываются, после 8-ми попыток, что-то натянуть из этого ни одна не увенчалась успехом, внятной инструкции найти не удалось. По поводу куда размешять Б24 на поддомен или в папку тоже как-то все очень скудно. Делали просто — развернули сайт на чистый на шаблоне altop.enext и попытались его обновить на коробку корп. |
Пользователь 291336 Эксперт Сообщений: 1497 |
не поделитесь где можно скачать новый продукт? на сайте чтото не видно ссылок и в установщике тоже нельзя выбрать — а в презентации обещали выложить |
Пользователь 272462 Постоянный посетитель Сообщений: 268 |
|
Администратор Сообщений: 22 |
loki-sim, да, такая ошибка наблюдается, исправляем. Связано с одним из обновлений модуля intranet. Исправим в ближайшее время. Подробнее про мастер вы можете узнать в документации |
Пользователь 1288159 Заглянувший Сообщений: 32 |
Роман Нейман, Добрый день.
Роман Семёнов, |
Администратор Сообщений: 22 |
loki-sim, попробуйте деинсталировать модуль timeman с удалением таблиц и повторно установить его и повторить текущий шаг мастера. Это ошибка тоже в процессе исправления. |
Пользователь 1288159 Заглянувший Сообщений: 32 |
Роман Нейман, как долго ждать исправления? я так понимаю это сейчас в приоритете, ибо из-за этих ошибок невозможно поставить ваш новый продукт. |
Пользователь 159878 Посетитель Сообщений: 49 |
А у меня при при обновлении платформы выдает ошибку: Ошибка в updater’e 14.5.7 модуля crm: [1061] Duplicate key name ‘IX_LEAD_5’ [1061] Duplicate key name ‘IX_CONTACT_BDAY’. Установка обновлений модуля crm прервана. [CL04] Ошибка обновления модулей. Не знаете как исправить? |
Евгений Жуков
Администратор Сообщений: 9035 Epic fail — сказать «это так просто» и не суметь сделать |
#9 0 13.11.2019 15:43:57
Обратиться в техподдержку. Не надо сверлить зубы через задний проход дрелью от Сваровски |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#10 0 13.11.2019 15:47:52
Первым делом так поступил …Молчат( |
||||
Евгений Жуков
Администратор Сообщений: 9035 Epic fail — сказать «это так просто» и не суметь сделать |
#11 0 13.11.2019 15:48:51
Номер обращения? Не надо сверлить зубы через задний проход дрелью от Сваровски |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#12 0 13.11.2019 15:59:48
Писал в чат, там номер тикета не дают |
||||
Пользователь 159878 Посетитель Сообщений: 49 |
#13 0 13.11.2019 16:01:21
Вот скрин, последний был Давид Давтян и перенаправил к другому специалисту Прикрепленные файлы joxi_screenshot_1573650028947.png (69.8 КБ) |
||||
Администратор Сообщений: 22 |
#14 0 13.11.2019 17:09:38 loki-sim, обновления поправили. Вам нужно заново запустить мастер и загрузить новые модули. Загрузка модулей пройдёт быстрее, мы подняли минимальные версии модулей с которых начинается загрузка обновлений. Евгений Вальтер, для модуля crm также поднята минимальная версия, теперь этой ошибки у вас быть не должно. |
Пользователь 159878 Посетитель Сообщений: 49 |
#15 0 13.11.2019 17:47:06
Скажите сейчас можно уже делать переход на новую редакцию или там еще остались проблемы? |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#16 0 13.11.2019 18:52:55
Теперь не может установить модуль календаря При установке модуля «Календарь событий» произошла ошибка Прикрепленные файлы joxi_screenshot_1573660301494.png (63.9 КБ) |
||
Администратор Сообщений: 22 |
#17 0 13.11.2019 19:08:47 Евгений Вальтер, повторяется ли ошибка при установке модуля из раздела «Модули» /bitrix/admin/module_admin.php?lang=ru ? |
Пользователь 159878 Посетитель Сообщений: 49 |
#18 0 13.11.2019 19:20:23 |
Пользователь 159878 Посетитель Сообщений: 49 |
#19 0 13.11.2019 19:21:22
Вот скрин Прикрепленные файлы joxi_screenshot_1573662063668.png (243.97 КБ) |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#20 0 13.11.2019 19:22:53
При этом я так понимаю сам модуль установился (скриншот) Прикрепленные файлы joxi_screenshot_1573662138779.png (278.51 КБ) |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#21 0 13.11.2019 19:24:59 Вернее не установился, в списке модулей он не установлен, но файлы есть. Это же модуль битрикса24 я так понимаю у нас их не должно было быть. |
Пользователь 1288159 Заглянувший Сообщений: 32 |
#22 0 14.11.2019 00:00:29 Эх…. сажусь теперь и я пробовать, еще раз на тестовой среде накатить эту обнову…. Но ощущение что не получится, а как красиво все всегда на презентации и хочется так же. клац одну кнопочку и все ЗаШиБиСь
Ура это случилось теперь не нужно выкачивать модули с 7-ой версии, и 10 лет не прошло) В корне в папку services добавляется папка openlines… Оставлю это тут для раздумий….. Может пора отозвать продукт пока люди себе сайты не поломали??? Пусть Рыжиков примет наконец волевое решение и скажет Блин ДА ложанулись в этот раз по крупному, нужен еще месяц на тесты и доделки! Ну сырой он, в общем я для себя принял решение, что вернусь к этому вопросу не раньше декабря месяца. После еще пары часов я всетаки это поставил, но поверьте без бубна и бутылки водки точно не обойтись. И вот так висит уже полчаса примерно. Осталось понять почему виснет процесс, где лог смотреть? или в какой скрипт смотреть? |
||
Роман Нейман Администратор Сообщений: 22 |
#23 0 14.11.2019 09:29:57
Сам модуль не установлен, пока что загрузились обновления модуля. Это модуль корпоративного портала, он есть в новой редакции. loki-sim, я рад, что у вас получилось выполнить мастер. Обработка заказов выполняется на агентах, напишите нам, в техническую поддержку посмотрим, почему у вас «завис» процесс обработки заказов. |
||
Пользователь 159878 Посетитель Сообщений: 49 |
#24 0 14.11.2019 10:29:03
Я написал вам в личку |
||||
Пользователь 1288159 Заглянувший Сообщений: 32 |
#25 0 14.11.2019 10:56:55
Пока не хочется живой портал оставлять на день. Мы делаем снапшоты и после неудачи откатываемся к ним, именно по этому все действо и происходит ночью когда у сайта почти нулевая посещаемость. Ваша поддержка не работает ночью, поэтому пока сами… Вы просто ткните, где код агента расположен, а уж отладку сделать не большая проблема и посмотреть почему не завершается. З.Ы. Нашел пустые заказы где нет отгрузок и обязательных полей для заказа, удалил, возможно поможет. А разработчикам доработать нужно уведомление на каком заказе повисло чтобы понять какой из них проблемный и каждый раз в код не лезть. |
||
Многие владельцы сайтов на CMS WordPress уже задумывались как же связать сайт с CRM системой Битрикс 24? Чтобы ответить на данный вопрос, давайте рассмотрим интеграцию Contact Form 7 и Bitrix24.
Прежде всего рекомендую ознакомится со статьей «Битрикс24 лиды с сайта — автоматическое создание лидов» и затем продолжить изучение данной инструкции.
И так, давайте более детально рассмотрим автоматическую передачу заявок в CRM Битрикс24 для одной из популярных CMS систем WordPress, а также не менее популярного для неё плагина для создания, получения и обработки лидов с сайта — Contact Form 7. Для этого на понадобится:
- Хук для перехвата введенных данных из Contact Form 7.
- Выбор подходящего способа передачи в Битрикс 24
- С помощью упрощенного Rest API
- PHP скрипт для интеграции при помощи упрощенного Rest API
- Объединение хука и PHP скрипта.
- При помощи входящего вебхука
- PHP скрипт для интеграции при входящего вебхука
- Объединение хука и PHP скрипта.
- С помощью упрощенного Rest API
- Внесение полученного кода в Вашу тему в файл
functions.php
Хук для перехвата введенных данных из Contact Form 7
Что такое хук? Хук — это технология перехвата вызова функций в сторонних процессах. Соответственно, так как Contact Form 7 — это сторонний плагин, то нам необходим хук для получения обрабатываемых там данных.
В нашем случаи хук для перехвата данных из Contact Form 7 в CMS WordPress будет выглядеть следующим образом:
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' ); function your_wpcf7_mail_sent_function( $contact_form ) { $title = $contact_form->title; $posted_data = $contact_form->posted_data; //Вместо "Контактная форма 1" необходимо указать название Вашей контактной формы if ('Контактная форма 1' == $title ) { $submission = WPCF7_Submission::get_instance(); $posted_data = $submission->get_posted_data(); //далее мы перехватывает введенные данные в Contact Form 7 //перехватываем поле [your-name] $firstName = $posted_data['your-name']; //перехватываем поле [your-message] $message = $posted_data['your-message']; //в данном примере рассмотрены два поля. Как перехватывать остальные поля //читайте ниже. }
В данном хуке приведены примеры по перехвату только двух полей: Имени и Сообщения.
Если Вам необходимо передавать больше полей или какие-либо отдельно созданные поля, то возникает вопрос где брать название $posted_data
?
Для того, чтобы найти названия для $posted_data
, Вам необходимо перейти в плагин Contact Form 7 — Контактные формы — «Интересующая контактная форма» — Шаблон/Письмо, где можно найти информацию о том, какие поля используются в Вашей форме.
Название $posted_data для хука Contact Form 7
Выбор подходящего способа передачи в Битрикс 24
В данной статье рассматривается два способа интеграции CF7 и Битрикс24:
- с помощью упрощенного Rest API;
- при помощи входящего вебхука в Битрикс24.
Из данных двух способов, я бы рекомендовал использовать интеграцию при помощи входящего вебхука в Битрикс24, так как данный способ более безопасный и более функциональный, чем интеграция при помощи упрощенного Rest API.
-
С помощью упрощенного Rest API
PHP скрипт упрощенного Rest API для отправки данных в Bitrix24
Где взять данный скрипт и как его настроить, вы можете узнать здесь «Автоматическое создание лидов в Битрикс24 через упрощенный Rest API».
Прежде чем указывать ваш логин и пароль в PHP скрипте, ознакомитесь, пожалуйста, с разделом «Логин и пароль пользователя Вашей CRM».
Объединение хука и PHP скрипта
Рассмотрев PHP скрипт упрощенного Rest API для отправки данных в Bitrix24 и Хук для перехвата введенных данных из Contact Form 7 теперь можно перейти к объединению данных двух функций. При этом необходимо будет учесть последовательность функций в коде, которая будет иметь следующий вид:
- вызов функции для перехвата данных;
- подключение к серверу CRM;
- авторизация в CRM;
- перехват данных из Contact Form 7;
- формирование параметров для создания лида в переменной
$postData = array
из Contact Form 7; - передача данных из Contact Form 7 в Bitrix24.
Таким образом мы получим код следующего вида:
// Вызываем функцию для перехвата данных add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' ); function your_wpcf7_mail_sent_function( $contact_form ) { // Подключаемся к серверу CRM define('CRM_HOST', '[ваше_название].bitrix24.ru'); // Ваш домен CRM системы define('CRM_PORT', '443'); // Порт сервера CRM. Установлен по умолчанию define('CRM_PATH', '/crm/configs/import/lead.php'); // Путь к компоненту lead.rest // Авторизуемся в CRM под необходимым пользователем: // 1. Указываем логин пользователя Вашей CRM по управлению лидами define('CRM_LOGIN', 'login'); // 2. Указываем пароль пользователя Вашей CRM по управлению лидами define('CRM_PASSWORD', 'password'); // Перехватываем данные из Contact Form 7 $title = $contact_form->title; $posted_data = $contact_form->posted_data; // Вместо "Контактная форма 1" необходимо указать название вашей контактной формы if ('Контактная форма 1' == $title ) { $submission = WPCF7_Submission::get_instance(); $posted_data = $submission->get_posted_data(); // Далее перехватываем введенные данные в полях Contact Form 7: // 1. Перехватываем поле [your-name] $firstName = $posted_data['your-name']; // 2. Перехватываем поле [your-message] $message = $posted_data['your-message']; // Формируем параметры для создания лида в переменной $postData = array $postData = array( // Устанавливаем название для заголовка лида 'TITLE' => 'Название лида с сайта', 'NAME' => $firstName, 'COMMENTS' => $message, ); // Передаем данные из Contact Form 7 в Bitrix24 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.0rn"; $str .= "Host: ".CRM_HOST."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); $response = explode("rnrn", $result); $output = '<pre>'.print_r($response[1], 1).'</pre>'; } else { echo 'Connection Failed! '.$errstr.' ('.$errno.')'; } } }
-
При помощи входящего вебхука
PHP скрипт входящего вебхука для отправки данных в Bitrix24
PHP скрипт входящего вебхука и принцип его работы был рассмотрен ранее в статье «Автоматическое создание лидов в Битрикс24 при помощи входящего вебхука».
Для того чтобы активировать работу данного скрипта, необходимо создать вебхук в самом Битрикс24 и получить
[идентификатор_пользователя]
и[код_вебхука]
. Как это сделать можно узнать здесь: «Как создать входящий вубхук».Объединение хука и PHP скрипта
Рассмотрев PHP скрипт входящего вебхука для отправки данных в Bitrix24, хук для перехвата введенных данных из Contact Form 7, активировав входящий вебхук и получив
[идентификатор_пользователя]
и[код_вебхука]
, можно перейти к объединению данных двух функций. При этом необходимо будет учесть последовательность функций в коде, которая будет иметь следующий вид:- вызов функции для перехвата данных;
- перехват данных из Contact Form 7;
- формирование URL в переменной
$queryUrl
; - формирование параметров для создания лида в переменной
$queryData
; - обращение к Битрикс24 при помощи функции
curl_exec
;
Таким образом мы получим код следующего вида:
// Вызываем функцию для перехвата данных add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' ); function your_wpcf7_mail_sent_function( $contact_form ) { // Перехватываем данные из Contact Form 7 $title = $contact_form->title; $posted_data = $contact_form->posted_data; //Вместо "Контактная форма 1" необходимо указать название вашей контактной формы if ('Контактная форма 1' == $title ) { $submission = WPCF7_Submission::get_instance(); $posted_data = $submission->get_posted_data(); // Далее перехватываем введенные данные в полях Contact Form 7: // 1. Перехватываем поле [your-name] $firstName = $posted_data['your-name']; // 2. Перехватываем поле [your-message] $message = $posted_data['your-message']; // Формируем URL в переменной $queryUrl для отправки сообщений в лиды Битрикс24, где // указываем [ваше_название], [идентификатор_пользователя] и [код_вебхука] $queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json'; // Формируем параметры для создания лида в переменной $queryData $queryData = http_build_query(array( 'fields' => array( // Устанавливаем название для заголовка лида 'TITLE' => 'Название лида с сайта', 'NAME' => $firstName, 'COMMENTS' => $message, ), 'params' => array("REGISTER_SONET_EVENT" => "Y") )); // Обращаемся к Битрикс24 при помощи функции curl_exec $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); $result = json_decode($result, 1); if (array_key_exists('error', $result)) echo "Ошибка при сохранении лида: ".$result['error_description']."<br/>"; } }
Особенности для передачи номера телефона, email или мессенджера
При интеграции CF и Битрикс 24 с помощью входящего вебхука, необходимо учесть особенности передачи номера телефона, email или мессенджера. Что это за особенности, и как все-таки передавать данные параметры можно узнать в разделе «Учесть особенность для передачи номера телефона, email, мессенджера».
Внесение полученного кода в Вашу тему в файл functions.php
Теперь остается внести любой полученный код из перечисленных вариантов интеграции в functions.php
Вашей текущей темы на WordPress.
Для этого необходимо перейти в Внешний вид → Редактор → Функции темы.
Открыв файл functions.php
необходимо вставить полученный код в самом низу документа.
Вот и все. Интеграция Contact Form 7 и Bitrix24 завершена.
Основные ошибки интеграции
смотрите статью «Основные ошибки при интеграции Битрикс24 и сайта».
P.S
Если у Вас интернет-магазин на основе плагина Woocommerce, то рекомендую ознакомиться со статьей по интеграции Woocommerce и Bitrix24.
Понравилась статья? Поделись ей =)
Хотите быть в курсе новых инструкций и кейсов для вашей работы?
Подпишись на полезную рассылку об интернет-маркетинге
Нужно передать данные формы сайта в лиды Crm Bitrix24. Форма отправляется методом POST. Язык сайта:PHP.
Состав формы:
Поле | Переменная |
Имя | $_POST[“NAME_CALLBACK”] |
Телефон | $_POST[“PHONE_CALLBACK”] |
Электронная почта | $_POST[“EMAIL_CALLBACK”] |
Метка UTM_SOURCE | $_POST[“UTM_CALLBACK”] |
Передачу будем организовывать через функцию php curl_exec()- выполнение запроса cURL .
Вариант 1
Сперва сделал через crm/configs/import/lead.php
$url =‘https://[ИМЯ].bitrix24.ru/crm/configs/import/lead.php? LOGIN=[логин]&PASSWORD=[пароль]&TITLE=’.str_replace(» «,«»,$_POST[«NAME_CALLBACK»]).‘&PHONE_WORK=’.str_replace(» «,«»,$_POST[«PHONE_CALLBACK»]).‘&UTM_SOURCE=’.str_replace(» «,«»,$_POST[«UTM_CALLBACK»]).‘&EMAIL_WORK=’.str_replace(» «,«»,$_POST[«EMAIL_CALLBACK»]).‘&ASSIGNED_BY_ID=15&SOURCE_ID=WEB’; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($ch); curl_close($ch); |
Разберем запрос:
[ИМЯ].bitrix24.ru – Имя СРМ Битрикс 24
[логин]– логин пользователя в CRM
[пароль]– пароль пользователя в CRM
TITLE– Название лида (обязательное)
PHONE_WORK– Рабочий телефон лида
EMAIL_WORK– Рабочая почта лида
ASSIGNED_BY_ID – ид отвественного
SOURCE_ID= Источник лида, здесь SOURCE_ID=WEB – веб сайт
UTM_SOURCE – метка UTM_source
К недостаткам этого варианта можно отнести небезопасность – в запросе передаются данные пользователя СРМ . У пользователя должны быть права только на добавление лида.
Также не предаются метки UTM, поэтому пришлось воспользоваться вебхуком.
Вариант 2 ВЕБХУК
В CRM Bitrix 24 выбираем Приложения, вкладка Вебхуки, добавить ВебХук – Входящий
Вводим название, описание и отмечаем галку CRM. После сохранения появится код вебхука и пример URL, который нужно использовать при отправке данных в СРМ Битрикс24.
На основании полученного кода вебхука и примера формируем запрос к Битрикс24:
$Url = ‘https://[ИМЯ].bitrix24.ru/rest/[id пользователя]/[код вебхука]/crm.lead.add.json‘;
При тестировании данного способа выявилось, что некоторые поля поменялись. PHONE_WORK и EMAIL_WORK теперь нужно передавать как маcсивы PHONE и EMAIl
В итоге код PHP по отправки лидов СРМ Битрикс 24 выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// определяем URL $Url = ‘https://[ИМЯ].bitrix24.ru/rest/[id пользователя]/[код вебхука]/crm.lead.add.json’; // описываем параметры лида $ParamLid = http_build_query(array( ‘fields’ => array( ‘TITLE’ => str_replace(» «,«»,$_POST[«NAME_CALLBACK»]), // НАЗВАНИЕ ‘NAME’ => str_replace(» «,«»,$_POST[«NAME_CALLBACK»]), // ИМЯ ‘PHONE’ => Array( «n0» => Array( «VALUE» => str_replace(» «,«»,$_POST[«PHONE_CALLBACK»]), «VALUE_TYPE» => «WORK», )), // РАБОЧИЙ ТЕЛЕФОН в массиве ‘OPENED’ => ‘Y’, // Доступно для всех ‘SOURCE_ID’ => «WEB», //Источник вебсайт ‘SOURCE_DESCRIPTION’ => str_replace(» «,«»,$_POST[«UTM_CALLBACK»]), // доп описание источника ‘EMAIL’ => Array( «n0» => Array( «VALUE» => str_replace(» «,«»,$_POST[«EMAIL_CALLBACK»]), «VALUE_TYPE» => «WORK», ), ), // Рабочая эл. почта ‘UTM_SOURCE’ => str_replace(» «,«»,$_POST[«UTM_CALLBACK»]), // UTM метка ‘ASSIGNED_BY_ID’ => 15, // Ид ответственного ), ‘params’ => array(«REGISTER_SONET_EVENT» => «Y») )); // обращаемся к сформированному URL при помощи функции curl_exec для создания лида $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $Url, CURLOPT_POSTFIELDS => $ParamLid, )); $result2 = curl_exec($ch); curl_close($ch); |
Как узнать ID пользователя в CRM Bitrix 24
Здесь ид пользователя нужен чтобы назначить ответственного при передаче данных формы в лид СРМ.
Переходим в Справочник “Сотрудники”, наводим мышкой на нужного сотрудника и переходим по ссылке Имя сотрудника:
В адресной строке браузера смотрим ИД выбранного пользователя:
Все параметры для передачи данных в лиды CRM
Поле | Описание | Тип |
---|---|---|
ADDRESS | Адрес контакта | string |
ADDRESS_2 | Вторая страница адреса | string |
ADDRESS_CITY | Город | string |
ADDRESS_COUNTRY | Страна | string |
ADDRESS_COUNTRY_CODE | Код страны | string |
ADDRESS_POSTAL_CODE | Почтовый индекс | string |
ADDRESS_PROVINCE | Область | string |
ADDRESS_REGION | Район | string |
ASSIGNED_BY_ID | Связано с пользователем по ID | user |
BIRTHDATE | Дата рождения | date |
COMMENTS | Комментарии | string |
COMPANY_ID | Привязка лида к компании | crm_company |
COMPANY_TITLE | Название компании, привязанной к лиду | crm_company |
CONTACT_ID | Привязка лида к контакту | crm_contact |
CREATED_BY_ID | Кем создана | user |
DATE_CREATE | Дата создания | datetime |
DATE_MODIFY | Дата изменения | datetime |
Адрес электронной почты | crm_multifield | |
HAS_EMAIL | Проверка заполненности поля электронной почты | char |
HAS_PHONE | Проверка заполненности поля телефон | char |
HONORIFIC | Вид обращения | crm_status |
ID | Идентификатор контакта | integer |
IM | Мессенджеры | crm_multifield |
IS_RETURN_CUSTOMER | Признак повторного лида | char |
MODIFY_BY_ID | Идентификатор автора последнего изменения | user |
NAME | Имя | string |
OPENED | Доступен для всех | char |
ORIGINATOR_ID | Идентификатор источника данных | string |
ORIGIN_ID | Идентификатор элемента в источнике данных | string |
ORIGIN_VERSION | Оригинальная версия | string |
PHONE | Телефон контакта | crm_multifield |
POST | Должность | string |
SECOND_NAME | Отчество | string |
SOURCE_DESCRIPTION | Описание источника | string |
SOURCE_ID | Идентификатор источника | crm_status |
STATUS_DESCRIPTION | string | |
STATUS_ID | string | |
STATUS_SEMANTIC_ID | string | |
TITLE | Название лида | string |
UTM_CAMPAIGN | Обозначение рекламной кампании | string |
UTM_CONTENT | Содержание кампании | string |
UTM_MEDIUM | Тип трафика | string |
UTM_SOURCE | Рекламная система | string |
UTM_TERM | Условие поиска кампании | string |
WEB | URL ресурсов лида | crm_multifield |
Поделиться ссылкой:
Похожие записи
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
$to = ["..."]; $smtp_server = 'ssl://smtp.yandex.ru'; $smtp_port = 465; $smtp_user = '...'; $smtp_pass = '...'; $bot_token = '...'; $chat_id = ...; $bitrix24 = new Bitrix24Api(); if(isset($_POST['form'])) { require_once '../vendor/autoload.php'; $transport = (new Swift_SmtpTransport($smtp_server, $smtp_port)) ->setUsername($smtp_user) ->setPassword($smtp_pass); $mailer = new Swift_Mailer($transport); $errors = []; if ($_POST['form'] == 'callback_top') { if(!isset($_POST['name']) || empty($_POST['name'])) { $errors[] = 'name'; } if(!isset($_POST['phone']) || empty($_POST['phone'])) { $errors[] = 'phone'; } if(count($errors) == 0) { $body = ''; $body .= 'Имя: '.htmlspecialchars($_POST['name']); $body .= "rn"; $body .= 'Телефон: '.htmlspecialchars($_POST['phone']); $body .= "rn"; $body .= 'Услуга: '.htmlspecialchars($_POST['service_name']); $body .= "rn"; $body .= 'Город: '.htmlspecialchars($_POST['service_city']); $body .= "rn"; $body .= 'Referrer: '.htmlspecialchars($_SERVER['HTTP_REFERER']); $body .= "rn"; $body .= 'IP: '.htmlspecialchars($_SERVER['REMOTE_ADDR']); $from = 'запрос звонка в шапке'; telegram($from, $body); $message = (new Swift_Message('Письмо с сайта ('.$from.')')) ->setFrom([$smtp_user => 'Site Robot']) ->setTo($to) ->setBody($body); $result = $mailer->send($message); $bitrix24->callback($_POST['name'], $_POST['phone']); echo json_encode(['success' => 1]); } else { $response['errors'] = $errors; echo json_encode($response); } } class Bitrix24Api { private $host = '...bitrix24.ru'; private $port = '443'; private $path = '/crm/configs/import/lead.php'; private $login = '...'; private $password = '...'; public function callback($name, $phone) { $postData = array( 'TITLE' => 'Заказ звонка', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'LOGIN' => $this->login, 'PASSWORD' => $this->password ); if (!$fp = fsockopen("ssl://".$this->host, $this->port, $errno, $errstr, 30)) { throw new Exception('Connection Failed! '.$errstr.' ('.$errno.')'); } $strPostData = ''; foreach ($postData as $key => $value) { $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value); } $str = "POST ". $this->path." HTTP/1.0rn"; $str .= "Host: ". $this->host ."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); } public function callbackMiddle($name, $phone) { $postData = array( 'TITLE' => 'Заказ звонка', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'LOGIN' => $this->login, 'PASSWORD' => $this->password ); if (!$fp = fsockopen("ssl://".$this->host, $this->port, $errno, $errstr, 30)) { throw new Exception('Connection Failed! '.$errstr.' ('.$errno.')'); } $strPostData = ''; foreach ($postData as $key => $value) { $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value); } $str = "POST ". $this->path." HTTP/1.0rn"; $str .= "Host: ". $this->host ."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); } public function callbackBottom($name, $phone) { $postData = array( 'TITLE' => 'Заказ звонка', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'LOGIN' => $this->login, 'PASSWORD' => $this->password ); if (!$fp = fsockopen("ssl://".$this->host, $this->port, $errno, $errstr, 30)) { throw new Exception('Connection Failed! '.$errstr.' ('.$errno.')'); } $strPostData = ''; foreach ($postData as $key => $value) { $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value); } $str = "POST ". $this->path." HTTP/1.0rn"; $str .= "Host: ". $this->host ."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); } public function becomeMaster($name, $phone) { $postData = array( 'TITLE' => 'Заказ звонка', // Заголовок для лида 'NAME' => $name, // Имя 'PHONE_WORK' => $phone, // Телефон 'LOGIN' => $this->login, 'PASSWORD' => $this->password ); if (!$fp = fsockopen("ssl://".$this->host, $this->port, $errno, $errstr, 30)) { throw new Exception('Connection Failed! '.$errstr.' ('.$errno.')'); } $strPostData = ''; foreach ($postData as $key => $value) { $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value); } $str = "POST ". $this->path." HTTP/1.0rn"; $str .= "Host: ". $this->host ."rn"; $str .= "Content-Type: application/x-www-form-urlencodedrn"; $str .= "Content-Length: ".strlen($strPostData)."rn"; $str .= "Connection: closernrn"; $str .= $strPostData; fwrite($fp, $str); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); } } |