Эта версия не поддерживается. Нажмите тут, чтобы увидеть актуальную информацию

Форма заявки

Со свежими изменениями:


Для открытия формы заявки используется метод:

Comagic.openSiteRequestPanel();

Пользовательская форма заявки

Данные, полученные при использовании пользовательской формы заявки на сайте, можно отправить с помощью следующего метода:

Comagic.addOfflineRequest(req, callback);

Пользоваться данным методом можно лишь в случае отправки формы способом, не приводящим к перезагрузке страницы. Для остальных ситуаций есть альтернативный метод (описан ниже в инструкции).

Параметры:

НазваниеТипОписание
req{name: myName, email: myEmail, phone: myPhone, message: myMessage, is_sale: mySale, sale_cost: myCost, group_id: 12345 }Описание параметров: myName - тип text - имя посетителя, myEmail - тип text - адрес электронной почты посетителя, myPhone - тип text - телефон посетителя, myMessage - тип text - текст заявки и остальная информация, для которой нет отдельного поля, mySale - true - если это продажа; false - если не продажа (по умолчанию), group_id - id группы, в которую должна быть передана заявка, myCost - сумма сделки. Если необходимо передать сумму сделки, то обязательно надо передать в параметре is_sale значение true.
callback"success": <Boolean>, "result": {"code": <String>}}Функция одного аргумента, которая будет вызвана после того, как сервер пришлет результат сохранения формы. Необязательный параметр.

Пример:

  1. Обычная заявка:
Comagic.addOfflineRequest({
  name: 'Дмитрий',
  email: 'dmitry@comagic.ru',
  phone: '79123456789',
  message: 'Текст заявки...',
  group_id: 1234
});
  1. Заявка, приведшая к продаже:
Comagic.addOfflineRequest({
  name: 'Дмитрий',
  email: 'dmitry@comagic.ru',
  phone: '79123456789',
  message: 'Онлайн заказ...',
  is_sale: true,
  sale_cost: '9999'
});
  1. Пример с использованием параметра callback:
Comagic.addOfflineRequest({"name": "My Name Is"}, function(o) {console.log(o);});

после успешного сохранения заявки в консоль браузера будет выведен результат:

Object {success: true, result: null}


Альтернативный способ отправки пользовательской заявки

  1. Перед отправкой заявки нужно получить аутентификационные данные виджета, используя метод JS API Comagic.getCredentials(). Метод возвращает объект:
{
  "site_key": "VcB4qqpO1WPSopO670cAbXwAH9Ryaw75",
  "visitor_id": 17258569,
  "hit_id": 546833568748,
  "session_id": 255544855,
  "consultant_server_url": "https://server.comagic.ru/" //базовая часть URL
}
  1. Передать полученные данные вместе с остальным данными формы.
  2. В серверном обработчике заявки сделать HTTP-запрос к сервису для добавления заявки.

Базовую часть URL жестко прописывать нельзя. Ее необходимо взять из данных п.1. Она может меняться.

POST https://server.comagic.ru/api/add_offline_message/
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Form Data //данные отформатированы для наглядности
site_key=VcB4qqpO1WPSopO670cAbXwAH9Ryaw75
&visitor_id=17258569
&hit_id=546833568748
&session_id=255544855
&name=John Smith
&email=no@email.adr
&phone=+79251234567
&text=Hello, world!
&is_sale=true
&sale_cost=10000

В ответ придет флаг успешности добавления заявки (application/json):

{
  "success": true
}

Пример использования альтернативного способа отправки пользовательской заявки

Вариант с перезагрузкой страницы

Будем исходить из того, что на сайте уже установлен код вставки, подключена библиотека jQuery и есть форма обратной связи. Код простейшей формы обратной связи выглядит примерно, так:

<form id='myform' action="/send.php" method="POST">
    <input type="text" name='name' value='' placeholder="Введите имя" /><br>
    <input type="text" name='phone' value='' placeholder="Введите номер телефона" /><br>
    <input type="text" name='email' value='' placeholder="Введите e-mail" /><br>
    <textarea name="text"></textarea><br>
    <input type='submit' />
</form>

Чтобы отправить заявку, код формы нужно доработать: добавить служебные поля и обработчик на кнопку «Отправить»:

<form id='myform' action="/send.php" method="POST">
    <input type="text" name='name' value='' placeholder="Введите имя" /><br>
    <input type="text" name='phone' value='' placeholder="Введите номер телефона" /><br>
    <input type="text" name='email' value='' placeholder="Введите e-mail" /><br>
    <textarea name="text"></textarea><br>
    <input type='button' value='Отправить' onclick="formSubmit()"/>
    <input type="hidden" name='site_key'/>
    <input type="hidden" name='visitor_id'/>
    <input type="hidden" name='hit_id'/>
    <input type="hidden" name='session_id'/>
    <input type="hidden" name='consultant_server_url'/>
</form>


В коде страницы или в отдельном JS-файле нужно написать функцию formSubmit(), которая будет вызываться каждый раз при клике на кнопку «Отправить»:

function formSubmit() {
    var credentials = Comagic.getCredentials();
    for (var field in credentials) {
        if (credentials.hasOwnProperty(field)){
            $('[name='+field+']').val(credentials[field]);
        }
    }
    $('#myform').submit();
}

Этот код получает служебную информацию, сохраняет ее в невидимые служебные поля формы и отправляет форму на сервер.

Далее нужно модифицировать код, который отвечает за обработку заявки на сервере. В нашем случае этот код находится в файле send.php:

<? /* Здесь код по умолчанию, связанный с обработкой заявки на серверной стороне. Например, отправка писем, или сохранение в базу данных. */ ?>
<?
    $url = $_POST['consultant_server_url'].'api/add_offline_message/';
          $data = array(
            'site_key' => $_POST['site_key'], //Значение без изменений из служебного поля site_key
            'visitor_id' => $_POST['visitor_id'], //Значение без изменений из служебного поля visitor_id
            'hit_id' => $_POST['hit_id'], //Значение без изменений из служебного поля hit_id
            'session_id' => $_POST['session_id'], //Значение без изменений из служебного поля session_id
            'name' => $_POST['name'], //Имя клиента
            'email' => $_POST['email'], //E-mail
            'phone' => $_POST['phone'], //Номер телефона
            'text' => $_POST['text'], //Текст заявки
            'is_sale' => true, //true, если это продажа
            'sale_cost' => 10000 //Сумма сделки. Если нужно передать сумму сделки, то is_sale обязательно равно true
            );
    /* Если все поля в html-разметке формы называются так же, как этого требует CoMagic, можно написать "$data = $_POST".
    В противном случае потребуются дополнительные преобразования. */
    $options = array( 'http' =>
        array(
            'header' => "Content-type: application/x-www-form-urlencoded; charset=UTF-8",
            'method' => "POST",
            'content' => http_build_query($data)
        )
    );
    print $options['http']['content'];
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    $resultArray = json_decode($result, true);

    if ($result === false or $resultArray['success'] === false) {
        /* Здесь могут быть действия на тот случай, если отправка заявки завершилась ошибкой. */
    }
?>


Вариант с AJAX-запросом

HTML-разметка простейшей формы:

<form id='myform2'>
    <input type="text" name='name' value='' placeholder="Введите имя" /><br>
    <input type="text" name='phone' value='' placeholder="Введите номер телефона" /><br>
    <input type="text" name='email' value='' placeholder="Введите e-mail" /><br>
    <textarea name="text"></textarea><br>
    <input type='button' value='Отправить' onclick="sendAjaxSubmit()"/>
</form>

JS-код отправки AJAX-запроса:

function sendAjaxSubmit() {
    /* Здесь может быть проверка заполненных обязательных полей, валидация номера телефона и другие проверки. */
     $.ajax({
         url: 'sendAjax.php',
         method: 'POST',
         data: $('#myform2').serialize(),
         complete: function(response) {
             if (response.readyState === 4 && response.status === 200) {
                alert(response.responseText);
             }
         },
     })
}

PHP-код обработки полученного запроса:

<?
    /* Код для обработки пришедших данных, сохранение в БД или отправка заявки на почту. */
    $success = true; /* Переменная определяет, удалось ли сохранить заявку. */
    if ($success) {
        print 'Заявка успешно отправлена';
    } else {
        print 'Произошла непредвиденная ошибка';
    }
?>


Для того, чтобы отправить заявку в случае отправки заявки AJAX-запросом, модифицировать HTML-форму не нужно. Нужно модифицировать JS-код таким образом, чтобы получение служебной информации происходило перед отправкой запроса:

function sendAjaxSubmit() {
    /* Здесь может быть проверка заполненных обязательных полей, валидация номера телефона и
    другие проверки. */
    $.ajax({
        url: '/sendAjax.php',
        method: 'POST',
        data: $('#myform2').serialize(),
        complete: function(response) {
            if (response.readyState === 4 && response.status === 200) {
                alert(response.responseText);
            }
        },
        beforeSend: function(jqXHR, settings) {
            var credentials = Comagic.getCredentials();
            settings.data += '&' + $.param(credentials);
        }
    })
}

Код, который нужно выполнить на сервере. В данном случае он находится в файле sendAjax.php:

<?
    /* Здесь код по умолчанию, связанный с обработкой заявки на серверной стороне. Например, отправка писем, или сохранение в базу данных. */
?>
<?
    $success = true; /* Проверка того, что все выполнено корректно. */
    if ($success) {
        $url = $_POST['consultant_server_url'].'api/add_offline_message/';
        $data = array(
            'site_key' => $_POST['site_key'], //Значение без изменений из служебного поля site_key
            'visitor_id' => $_POST['visitor_id'], //Значение без изменений из служебного поля visitor_id
            'hit_id' => $_POST['hit_id'], //Значение без изменений из служебного поля hit_id
            'session_id' => $_POST['session_id'], //Значение без изменений из служебного поля session_id
            'name' => $_POST['name'], //Имя клиента
            'email' => $_POST['email'], //E-mail
            'phone' => $_POST['phone'], //Номер телефона
            'text' => $_POST['text'], //Текст заявки
            'is_sale' => true, //true, если это продажа
            'sale_cost' => 10000 //Сумма сделки. Если нужно передать сумму сделки, то is_sale обязательно равно true
        );
        /* Если все поля в html-разметке формы называются так же как этого требует comagic, можно написать "$data = $_POST".
        В противном случае потребуются дополнительные преобразования. */
        $options = array(
            'http' => array(
                'header' => "Content-type: application/x-www-form-urlencoded; charset=UTF-8",
                'method' => "POST",
                'content' => http_build_query($data)
            )
        );
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        $resultArray = json_decode($result, true);
        if ($result === false or $resultArray['success' === false]) {
            /* Обработка случая, если отправка заявки завершилась ошибкой. */
        } else {
            print 'Заявка успешно сохранена.';
        }
    } else {
        print 'Произошла непредвиденная ошибка';
    }
?>

Эта статья помогла Вам?
Подпишитесь на рассылку

Обещаем присылать только полезную информацию

Эта версия не поддерживается. Нажмите тут, чтобы увидеть актуальную информацию