Разработка бота для обработки заявок с сайта 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка бота для обработки заявок с сайта 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка бота для обработки заявок с сайта 1С-Битрикс

Заявка отправлена с сайта — и дальше тишина. Менеджер может заметить её через час, через день, или не заметить вовсе. Бот-обработчик закрывает этот разрыв: мгновенно фиксирует заявку в Битрикс24, уведомляет нужного менеджера, отправляет автоответ клиенту, при необходимости начинает диалог в мессенджере.

Точка входа: события форм 1С-Битрикс

Все формы на сайте Битрикс — CWebForm, веб-формы модуля form, обратные звонки из sale.order.ajax, кастомные AJAX-формы — генерируют события при отправке. Перехватываем нужные:

Веб-формы модуля form:

// local/php_interface/init.php
AddEventHandler('form', 'OnAfterResultAdd', 'handleFormSubmit');

function handleFormSubmit(int $webFormId, int $resultId, array $arResult): void {
    if (!in_array($webFormId, [1, 3, 7])) { // ID нужных форм
        return;
    }
    // Отправляем в очередь или обрабатываем синхронно
    BotQueue::push('process_form', [
        'form_id'   => $webFormId,
        'result_id' => $resultId,
        'fields'    => $arResult,
    ]);
}

Компонент bitrix:main.feedback:

AddEventHandler('main', 'OnAfterUserAdd', ...); // нет, неверно
// Правильно — хук через обработчик компонента или шаблон

Для обратного звонка (sale.order.callback) — свой обработчик через событие OnSaleOrderCallbackCreate.

Создание лида/сделки в Битрикс24

После получения данных формы создаём сущность в CRM. Логика выбора: если заявка квалифицирована (есть телефон, интерес понятен) — сразу сделка; если это первое обращение — лид.

// Создание лида
$leadId = $b24Rest->callMethod('crm.lead.add', [
    'fields' => [
        'TITLE'          => "Заявка с сайта: {$formName}",
        'NAME'           => $arResult['NAME'] ?? '',
        'LAST_NAME'      => $arResult['LAST_NAME'] ?? '',
        'PHONE'          => [['VALUE' => $arResult['PHONE'], 'VALUE_TYPE' => 'WORK']],
        'EMAIL'          => [['VALUE' => $arResult['EMAIL'], 'VALUE_TYPE' => 'WORK']],
        'SOURCE_ID'      => 'WEB',
        'SOURCE_DESCRIPTION' => $formName,
        'COMMENTS'       => $arResult['COMMENT'] ?? '',
        'ASSIGNED_BY_ID' => getResponsibleManager($webFormId),
        'UTM_SOURCE'     => $_COOKIE['utm_source'] ?? '',
        'UTM_MEDIUM'     => $_COOKIE['utm_medium'] ?? '',
        'UTM_CAMPAIGN'   => $_COOKIE['utm_campaign'] ?? '',
    ],
])['result'];

UTM-метки подтягиваются из cookie — это важно для аналитики источников заявок.

Уведомление менеджера через бота

После создания лида бот пишет ответственному в Битрикс24:

$b24Rest->callMethod('imbot.message.add', [
    'BOT_ID'    => $botId,
    'DIALOG_ID' => 'u' . $managerId,
    'MESSAGE'   => "[b]Новая заявка с сайта[/b]",
    'ATTACH'    => [[
        'TITLE'       => $formName,
        'DESCRIPTION' => "Клиент: {$name}\nТелефон: {$phone}\nКомментарий: {$comment}",
        'COLOR'       => '#2fc6f6',
        'LINK'        => "https://b24.company.ru/crm/lead/show/{$leadId}/",
    ]],
    'KEYBOARD'  => ['BUTTONS' => [[
        ['TEXT' => 'Открыть лид',     'LINK'    => "https://b24.company.ru/crm/lead/show/{$leadId}/"],
        ['TEXT' => 'Взять в работу',  'COMMAND' => 'assign_lead', 'COMMAND_PARAMS' => $leadId],
    ]]],
]);

Автоответ клиенту

Клиент получает подтверждение по email и/или SMS:

// Email через Битрикс
\Bitrix\Main\Mail\Event::sendImmediate([
    'EVENT_NAME'  => 'FORM_SUBMIT_CONFIRM',
    'LID'         => SITE_ID,
    'C_FIELDS'    => [
        'CLIENT_NAME'  => $name,
        'CLIENT_EMAIL' => $email,
        'FORM_NAME'    => $formName,
        'LEAD_URL'     => '', // не показываем клиенту
    ],
    'TO_EMAIL'    => $email,
]);

Если у клиента есть Telegram (определяем по номеру через Б24 telephony.externalcall.searchcrm) — бот может написать и туда, если настроена интеграция с Telegram-каналом открытых линий.

Маршрутизация заявок по типу

Разные формы → разные ответственные:

function getResponsibleManager(int $formId): int {
    $routing = [
        1 => 15,  // Форма "Консультация" → Иванов
        3 => 22,  // Форма "Партнёрство" → Петров
        7 => 8,   // Форма "Техподдержка" → Сидоров
    ];
    return $routing[$formId] ?? 1; // дефолтный менеджер
}

Для сложной маршрутизации (по времени суток, нагрузке на менеджеров, региону клиента) — логика усложняется, но принцип тот же.

Обработка повторных заявок

Перед созданием нового лида проверяем, нет ли уже открытого лида с таким телефоном:

$existing = $b24Rest->callMethod('crm.lead.list', [
    'filter' => [
        'PHONE' => $phone,
        '!STATUS_ID' => ['CONVERTED', 'LOSE'],
    ],
    'select' => ['ID', 'TITLE', 'ASSIGNED_BY_ID'],
])['result'];

if ($existing) {
    // Добавляем активность к существующему лиду вместо создания нового
    addActivityToLead($existing[0]['ID'], $comment);
    notifyManager($existing[0]['ASSIGNED_BY_ID'], "Повторная заявка по лиду #{$existing[0]['ID']}");
    return;
}

Очередь для надёжности

При высоком трафике обработчик формы не должен тормозить ответ сервера. Архитектура с очередью:

  1. OnAfterResultAdd кладёт задачу в Redis-очередь (< 1 мс).
  2. Worker (PHP daemon или cron каждую минуту) забирает задачи и обрабатывает.
  3. При недоступности Б24 REST API — задача остаётся в очереди, обрабатывается при следующей итерации.

Сроки

Этап Срок
Перехват событий форм Битрикс 1–2 дня
Создание лидов в Б24, маршрутизация 2–3 дня
Уведомления через бота, кнопки действий 2–3 дня
Автоответ клиенту (email/SMS) 1–2 дня
Обработка дублей, повторных заявок 1–2 дня
Очередь + тестирование 1–2 дня

Итого: 1.5–2 недели для стандартного набора форм сайта.