Розробка VK-бота з інтеграцією Bitrix24
Користувач пише в повідомлення групи ВКонтакте — бот відповідає, кваліфікує ліда та створює угоду в Bitrix24. Це не просто автовідповідач: діалог зберігається в CRM, менеджер бачить переписку в карточці ліда та може відповісти прямо з Б24.
Два способи інтеграції ВКонтакте з Bitrix24
Спосіб 1: Відкриті лінії Bitrix24. Б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
└── Bitrix24 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: vk_dialog:{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, "Не можу розпізнати номер. Введіть у форматі +1XXXXXXXXXX");
}
break;
}
Створення ліда в Bitrix24
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,
],
]);
// Прикріплюємо історію переписки як активність
$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 підтримує клавіатури з кнопками:
$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(),
]);
Сповіщення менеджера в Bitrix24
Після створення ліда відправляємо сповіщення відповідальному через 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 тижні для стандартного сценарію кваліфікації лідів.







