Разработка VK-бота с интеграцией Битрикс24
Пользователь пишет в сообщения группы ВКонтакте — бот отвечает, квалифицирует лид и создаёт сделку в Битрикс24. Это не просто автоответчик: диалог сохраняется в CRM, менеджер видит переписку в карточке лида и может ответить прямо из Б24.
Два способа интеграции ВКонтакте с Битрикс24
Способ 1: Открытые линии Битрикс24. Б24 имеет нативный коннектор для VK. Он подключается в настройках открытых линий (imopenlines) и работает «из коробки» — если ваш тариф включает эту функцию. Ограничения: только текст и вложения, нет программируемой логики бота, нет автоответов с разветвлённым сценарием.
Способ 2: Кастомная интеграция через VK API. Бот на вашем сервере получает сообщения от VK через Callback API или Long Poll, обрабатывает их по своей логике, общается с Б24 через REST API. Полный контроль над поведением.
Для сложных сценариев (квалификация лидов, меню с кнопками, обработка фото/голосовых) — нужен кастомный бот.
Архитектура кастомного VK-бота
Пользователь → VK Group Messages
↓
VK Callback API (POST на сервер бота)
↓
Сервер бота (PHP/Node.js)
├── Логика разговора (FSM / сценарий)
├── VK API: messages.send, messages.getHistory
└── Битрикс24 REST API:
├── crm.lead.add / crm.deal.add
├── crm.activity.add (запись диалога)
└── im.message.add (уведомление менеджера)
Настройка VK Callback API
В настройках группы ВКонтакте → «Работа с API» → «Callback API» указываем адрес сервера и подписываемся на события message_new, message_reply, message_event (нажатие кнопки).
VK отправляет на сервер POST-запрос с JSON:
{
"type": "message_new",
"object": {
"message": {
"from_id": 123456789,
"text": "Привет, как заказать?",
"id": 987
}
},
"group_id": 111222333
}
Сервер должен ответить строкой ok в течение 5 секунд.
Логика бота: FSM (конечный автомат)
Сценарий разговора реализуется через хранение состояния диалога:
// Состояние диалога хранится в Redis: state:{vk_user_id}
$state = $redis->get("vk_dialog:{$userId}");
switch ($state) {
case null:
// Новый диалог
sendVkMessage($userId, "Здравствуйте! Вы хотите:\n1. Узнать цену\n2. Оставить заявку\n3. Связаться с менеджером");
$redis->set("vk_dialog:{$userId}", 'menu', 3600);
break;
case 'menu':
if ($text === '2' || stripos($text, 'заявк') !== false) {
sendVkMessage($userId, "Укажите ваш телефон:");
$redis->set("vk_dialog:{$userId}", 'await_phone', 3600);
}
break;
case 'await_phone':
if (isValidPhone($text)) {
createLeadInB24($userId, $phone);
sendVkMessage($userId, "Спасибо! Менеджер свяжется с вами в течение часа.");
$redis->del("vk_dialog:{$userId}");
} else {
sendVkMessage($userId, "Не могу распознать номер. Введите в формате +7XXXXXXXXXX");
}
break;
}
Создание лида в Битрикс24
function createLeadInB24(int $vkUserId, string $phone): int {
// Получаем данные пользователя VK
$vkUser = callVkApi('users.get', ['user_ids' => $vkUserId, 'fields' => 'photo_200']);
$name = $vkUser[0]['first_name'] . ' ' . $vkUser[0]['last_name'];
// Создаём лид в Б24
$result = $b24->callMethod('crm.lead.add', [
'fields' => [
'TITLE' => "VK: {$name}",
'NAME' => $vkUser[0]['first_name'],
'LAST_NAME' => $vkUser[0]['last_name'],
'PHONE' => [['VALUE' => $phone, 'VALUE_TYPE' => 'WORK']],
'SOURCE_ID' => 'VK',
'COMMENTS' => "ВКонтакте ID: {$vkUserId}\nhttps://vk.com/id{$vkUserId}",
'ASSIGNED_BY_ID' => 5, // ID ответственного менеджера
],
]);
// Прикрепляем историю переписки как активность
$b24->callMethod('crm.activity.add', [
'fields' => [
'OWNER_TYPE_ID' => 1, // лид
'OWNER_ID' => $result['result'],
'TYPE_ID' => 4, // задача
'SUBJECT' => 'Переписка VK',
'DESCRIPTION' => $dialogHistory,
],
]);
return $result['result'];
}
Кнопки в VK-сообщениях
VK поддерживает клавиатуры с кнопками (inline и под полем ввода):
$keyboard = [
'one_time' => true,
'buttons' => [[
['action' => ['type' => 'text', 'label' => 'Оставить заявку', 'payload' => '{"action":"lead"}'], 'color' => 'primary'],
['action' => ['type' => 'text', 'label' => 'Позвонить нам', 'payload' => '{"action":"call"}'], 'color' => 'secondary'],
]],
];
callVkApi('messages.send', [
'user_id' => $userId,
'message' => 'Выберите действие:',
'keyboard' => json_encode($keyboard),
'random_id' => time(),
]);
Уведомление менеджера в Битрикс24
После создания лида отправляем уведомление ответственному через im.notify:
$b24->callMethod('im.notify', [
'to' => $managerId,
'message' => "Новый лид из VK: {$name}, тел. {$phone}. [URL=https://b24.ru/crm/lead/{$leadId}/]Открыть[/URL]",
'type' => 'SYSTEM',
]);
Сроки
| Этап | Срок |
|---|---|
| Настройка VK Callback API, базовый приём сообщений | 1–2 дня |
| Сценарий бота (FSM, хранение состояния) | 2–4 дня |
| Интеграция с Б24: создание лидов, активности | 2–3 дня |
| Кнопки, меню, обработка вложений | 1–2 дня |
| Уведомления менеджерам | 1 день |
| Тестирование | 1–2 дня |
Итого: 1.5–2 недели для стандартного сценария квалификации лидов.







