Интеграция формы обратной связи MODX с Битрикс24

В последнее время CRM система Битрикс24 стремительно набирает популярность. Само собой, возникает вопрос об автоматизации рутинных задач, связанных с регистрацией обращений и заведением лидов.

Если с телефонией и электронной почтой все просто и понятно, то как быть с заявками, которые поступают с сайтов, которые работают не на платформе 1С-Битрикс?

В этой статье мы поможем вам разобраться с этим вопросом.

Для того, чтобы добавлять лиды с сайта, который работает на базе CMF MODX Revolution нам потребуется уже рабочая форма на FORMIT и файл rest.php, который как раз предназначен для интеграции форм обращений с битрикс24 скачать его можно ЗДЕСЬ.

Первое.

Файл rest.php нам нужно несколько видоизменить и адаптировать его для работы с MODX. Мой файл выглядит так:

<?
// CRM server conection data
define('CRM_HOST', 'account.bitrix24.ru'); // your CRM domain name
define('CRM_PORT', '443'); // CRM server port
define('CRM_PATH', '/crm/configs/import/lead.php'); // CRM server REST service path

// CRM server authorization data
define('CRM_LOGIN', 'mail@mail.ru'); // login of a CRM user able to manage leads
define('CRM_PASSWORD', 'Your-Password'); // password of a CRM user
// OR you can send special authorization hash which is sent by server after first successful connection with login and password
//define('CRM_AUTH', 'e54ec19f0c5f092ea11145b80f465e1a'); // authorization hash

/********************************************************************************************/

// POST processing
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $leadData = $_POST;

    // get lead data from the form
    $postData = array(
        'TITLE' => $leadData['TITLE'],
        'NAME' => $leadData['NAME'],
        'EMAIL_HOME' => $leadData['EMAIL_HOME'],
        'PHONE_WORK' => $leadData['PHONE_WORK'],
    );

    // append authorization data
    if (defined('CRM_AUTH'))
    {
        $postData['AUTH'] = CRM_AUTH;
    }
    else
    {
        $postData['LOGIN'] = CRM_LOGIN;
        $postData['PASSWORD'] = CRM_PASSWORD;
    }

    // open socket to CRM
    $fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30);
    if ($fp)
    {
        // prepare POST data
        $strPostData = '';
        foreach ($postData as $key => $value)
            $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value);

        // prepare POST headers
        $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;

        // send POST to CRM
        fwrite($fp, $str);

        // get CRM headers
        $result = '';
        while (!feof($fp))
        {
            $result .= fgets($fp, 128);
        }
        fclose($fp);

        // cut response headers
        $response = explode("\r\n\r\n", $result);

        $output = '<pre>'.print_r($response[1], 1).'</pre>';
    }
    else
    {
        echo 'Connection Failed! '.$errstr.' ('.$errno.')';
    }
}
else
{
    $output = '';
}

// HTML form
?>

Теперь разберемся с полями, которые нужно менять:

'CRM_HOST' – адрес вашего корпоративного портала
'CRM_LOGIN' – ваш логин в системе
'CRM_PASSWORD' – ваш пароль в системе

$postData = array(

                               'TITLE' => $leadData['TITLE'],

                               'NAME' => $leadData['NAME'],

                               'EMAIL_HOME' => $leadData['EMAIL_HOME'],

                               'PHONE_WORK' => $leadData['PHONE_WORK'],

                );

В переменные $leadData['NAME'] пишем названия ваших полей из формы, может получиться вот так: $leadData['fullname']. Исключение составляет только переменная TITLE, как показали сотни экспериментов, название лида должно передаваться только из поля с именем name=”TITLE”, почему так пока не разобрался, в любом случае в форме можно сделать поле со свойством Hidden и именем TITlE  и передавать туда необходимое вам название лида.

Полный список полей можно посмотреть ЗДЕСЬ.

К примеру моя форма обратной связи выглядит так:

<div class="container-fluid">
<h4>Хочу купить [[*pagetitle]]</h4>
<div class="row">
[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form class="form-horizontal" role="form" action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
<input type="hidden" name="nospam:blank" value="" />
<input type="text" name="urlform" value="[[~[[*id]]]]" style="display:none;">
<div class="form-group">
    <label for="TITLE" class="col-sm-3 control-label">Товар:</label>
    <div class="col-sm-9">
<input name="TITLE" class="form-control" id="TITLE" type="text" size="46" value="[[*pagetitle]]" readonly readonly="readonly"></div>
  </div>
<div class="form-group">
    <label for="NAME" class="col-sm-3 control-label">Ваше имя:</label>
    <div class="col-sm-9"><input name="NAME" class="form-control" id="NAME" type="text" size="46" value="[[!fi.NAME]]"></div>
  </div>
<div class="form-group">
    <label for="EMAIL_HOME" class="col-sm-3 control-label">Ваш e-mail*:</label>
    <div class="col-sm-9"><input name="EMAIL_HOME" class="form-control" id="EMAIL_HOME" type="email" size="46" value="[[!fi.EMAIL_HOME]]"></div>
  </div>
<div class="form-group">
    <label for="PHONE_WORK" class="col-sm-3 control-label">Ваш телефон:</label>
    <div class="col-sm-9"><input name="PHONE_WORK" class="form-control" id="PHONE_WORK" type="tel" size="46" value="[[!fi.PHONE_WORK]]"></div>
  </div>
<input type="submit" name="Go" id="submit" value="Отправить" class="button">
</form>
</div>
</div>

Теперь самое главное. В вызов сниппета FORMIT в свойство hooks мы добавляем rest.php (если файл лежит не в корневой директории, нужно дописать полностью адрес до файла), мой вызов выглядит так:

[[!FormIt?
    &hooks=`email, redirect, FormItAutoResponder, rest.php`
    &successMessage=`Спасибо за Ваше обращение`
    &emailTo=`info@site.ru`
    &emailFromName=`name`
    &emailSubject=`Subject`
    &fiarSubject=`Спасибо за обращение! Ваше письмо поступило в обработку.`
    &emailTpl=`requestSent1`
    &fiarTpl=`OrderReport`
    &redirectTo=`1`
    &fiarFrom=` info@site.ru `
    &fiarFromName=``
    &fiarToField=`EMAIL_HOME`
    &fiarReplyTo=` info@site.ru `
]]

Вот все. Последний момент: Если вам необходимо заносить лиды из нескольких разных форм на сайте, то придется для каждой формы создать отдельный файл rest.php.

Используя вышеизложенные методы, вы можете заносить в лиды данные из любых форм, мы, к примеру, связали с битрикс24 уже несколько интернет-магазинов на Shopkeeper.

Оставить заявку

Как связаться?

Тел: +7-910-223-20-27
Email: info@groupbw.ru
skype: litvinov.d1