B2B-продажи в РФ 2026 года всё больше уходят в мессенджеры — именно туда переезжают LPR (лица, принимающие решения) после ухода LinkedIn и западных каналов. Бот в MAX закрывает важный кусок воронки: первичная квалификация, сбор контактов, передача горячего лида менеджеру в готовом для звонка виде. В этой статье — как построить B2B-лидогенерацию через бот в MAX: квалификация по BANT, скоринг, передача в CRM, follow-up неотвеченных, дашборды воронки и метрики.
Зачем нужен бот в B2B-воронке
| Задача | Что делает бот |
|---|---|
| Первичная квалификация | Отсеивает «неподходящих» (компания не той отрасли/размера) |
| Сбор контактов | ФИО, должность, email, телефон, компания |
| Скоринг | Оценка «готовности» 1–100 |
| Передача в CRM | Создание сделки в amoCRM/Bitrix с заполненными полями |
| Прогрев | Серия касаний (контент, кейсы, вебинары) |
| Reminder | «Менеджер не дозвонился, удобно сейчас?» |
| Аналитика | Воронка по источникам, конверсии, LTV |
Цель — менеджер получает лид с полностью заполненным профилем, оценкой и историей касаний. Не «парень из бота, перезвоните».
Квалификация: BANT vs MEDDIC
BANT (Budget, Authority, Need, Timing) — простая, для коротких сделок. MEDDIC (Metrics, Economic Buyer, Decision Criteria, Decision Process, Identify Pain, Champion) — для энтерпрайз. Для бота — лучше BANT в виде 4–6 вопросов.
QUESTIONS = [
{
"key": "industry",
"q": "В какой отрасли работаете?",
"type": "buttons",
"options": ["Ритейл", "Финансы", "Производство", "Услуги", "Другое"],
},
{
"key": "size",
"q": "Размер компании?",
"type": "buttons",
"options": ["1-10", "11-50", "51-200", "201-1000", "1000+"],
},
{
"key": "role",
"q": "Ваша роль?",
"type": "buttons",
"options": ["Собственник", "ИТ-директор", "Маркетинг", "Продажи", "Другое"],
},
{
"key": "budget",
"q": "Какой ориентировочный бюджет на проект?",
"type": "buttons",
"options": ["До 500 тыс.", "0.5–2 млн", "2–10 млн", "10+ млн", "Не определён"],
},
{
"key": "timing",
"q": "Когда планируете запуск?",
"type": "buttons",
"options": ["В этом месяце", "1–3 месяца", "3–6 месяцев", "Дольше"],
},
{
"key": "use_case",
"q": "Кратко опишите задачу:",
"type": "text",
},
]
Не больше 5–7 вопросов — после этого drop-off растёт экспоненциально.
Скоринг лида
SCORE_RULES = {
"industry": {"Ритейл": 20, "Финансы": 25, "Производство": 15, "Услуги": 15, "Другое": 5},
"size": {"1-10": 5, "11-50": 15, "51-200": 25, "201-1000": 30, "1000+": 25},
"role": {"Собственник": 30, "ИТ-директор": 25, "Маркетинг": 15, "Продажи": 15, "Другое": 5},
"budget": {"До 500 тыс.": 10, "0.5–2 млн": 25, "2–10 млн": 35, "10+ млн": 30, "Не определён": 5},
"timing": {"В этом месяце": 35, "1–3 месяца": 25, "3–6 месяцев": 10, "Дольше": 0},
}
def score_lead(answers: dict) -> int:
return sum(SCORE_RULES[k].get(v, 0) for k, v in answers.items() if k in SCORE_RULES)
Категоризация:
- 0–30: cold (рассылка контента);
- 31–60: warm (касание менеджера через 24 ч);
- 61+: hot (звонок менеджера в течение часа).
Реализация в боте
@bot.message_handler(commands=["start"])
async def on_start(msg):
text = (
"Привет! 👋 Я помогу подобрать решение под вашу задачу за 2 минуты.\n\n"
"5 коротких вопросов — и подключу менеджера с готовым предложением."
)
kb = InlineKeyboardMarkup([[InlineKeyboardButton("🚀 Начать", callback_data="qual:start")]])
await bot.send_message(msg.chat.id, text, reply_markup=kb)
@bot.callback_query_handler(lambda c: c.data == "qual:start")
async def start_qual(call):
await set_state(call.from_user.id, "qual:0", payload={"answers": {}})
await ask_q(call.message.chat.id, 0)
async def ask_q(chat_id: int, idx: int):
if idx >= len(QUESTIONS):
return await finalize_lead(chat_id)
q = QUESTIONS[idx]
if q["type"] == "buttons":
rows = [[InlineKeyboardButton(opt, callback_data=f"qa:{idx}:{i}")] for i, opt in enumerate(q["options"])]
await bot.send_message(chat_id, q["q"], reply_markup=InlineKeyboardMarkup(rows))
else:
await bot.send_message(chat_id, q["q"])
Передача в CRM
async def finalize_lead(chat_id: int, user_id: int):
state = await get_state(user_id)
answers = state.payload["answers"]
score = score_lead(answers)
contact = await get_contact_info(user_id) # name, phone, email из MAX-профиля + допросов
deal_id = await crm.create_deal({
"name": f"{contact.company or contact.name} — заявка из MAX",
"responsible_user_id": pick_manager(score, answers["industry"]),
"tags": ["MAX", "bot_lead", f"score_{score//10*10}"],
"fields": {
"Источник": "Бот MAX",
"Отрасль": answers["industry"],
"Размер": answers["size"],
"Бюджет": answers["budget"],
"Срок": answers["timing"],
"Задача": answers.get("use_case"),
"Скоринг": score,
},
"contacts": [{"name": contact.name, "phone": contact.phone, "email": contact.email}],
})
# Уведомление менеджеру
await notify_manager(deal_id, score, answers)
# Подтверждение пользователю
await bot.send_message(chat_id, build_thank_you(score))
pick_manager — роутинг по отрасли (один менеджер ведёт ритейл, другой — финансы) и по нагрузке (round-robin или least-loaded).
Подтверждение и SLA
В зависимости от скора — разный текст:
def build_thank_you(score: int) -> str:
if score >= 61:
return ("🎯 Спасибо! Передал заявку менеджеру.\n\n"
"Ольга свяжется в течение 1 часа в рабочее время.\n"
"Кстати, вот наш кейс по похожей задаче: https://example.ru/case-x")
if score >= 31:
return ("✅ Спасибо! Менеджер подберёт решение и свяжется в течение 24 часов.\n\n"
"Пока — бесплатный гайд «Как выбрать платформу X»: https://...")
return ("Спасибо за интерес! Подпишу вас на полезные материалы. "
"Если понадобится решение — пишите, отвечу.")
SLA по обработке хот-лида публично озвучивается, что повышает доверие.
Follow-up
Менеджер не дозвонился? Бот напоминает:
async def cron_follow_up():
# Лид > 24 часов, статус "не дозвонились"
rows = await db.fetch_all("""
SELECT * FROM leads
WHERE status='no_answer'
AND created_at < now() - interval '24 hours'
AND followup_count < 2
""")
for r in rows:
await bot.send_message(
r.user_id,
"Менеджер пытался дозвониться. Когда удобно перезвонить?",
reply_markup=InlineKeyboardMarkup([
[InlineKeyboardButton("Через 1 час", callback_data=f"fu:1h:{r.id}")],
[InlineKeyboardButton("Завтра утром", callback_data=f"fu:tomorrow:{r.id}")],
[InlineKeyboardButton("Не интересно", callback_data=f"fu:no:{r.id}")],
]),
)
Прогрев холодных
Лиды со скором < 30 — серия касаний:
- День 1: «Спасибо за интерес, вот гайд по теме».
- День 7: кейс клиента из вашей отрасли.
- День 14: вебинар-приглашение.
- День 30: повторная квалификация «Что-то изменилось у вас в задаче?».
Если после 30 дней нет реакции — в архив. Через 6 месяцев — повторное касание.
Интеграция с amoCRM / Bitrix24
Подробно — в статье «Интеграция бота MAX с 1С/amoCRM/Bitrix24». Минимум:
import httpx
async def amocrm_create_lead(data: dict, contact: dict) -> int:
async with httpx.AsyncClient() as cli:
# Контакт
c = await cli.post(
f"{AMO_BASE}/api/v4/contacts",
json={"name": contact["name"], "custom_fields_values": [...]},
headers={"Authorization": f"Bearer {AMO_TOKEN}"},
)
contact_id = c.json()["_embedded"]["contacts"][0]["id"]
# Сделка
d = await cli.post(
f"{AMO_BASE}/api/v4/leads",
json={
"name": data["name"],
"responsible_user_id": data["responsible_user_id"],
"_embedded": {"contacts": [{"id": contact_id}]},
"custom_fields_values": [...],
},
headers={"Authorization": f"Bearer {AMO_TOKEN}"},
)
return d.json()["_embedded"]["leads"][0]["id"]
Метрики воронки
| Метрика | Бенчмарк |
|---|---|
| Conversion start → start_qualification | 60–80% |
| Conversion start_qual → completed | 50–70% |
| Среднее время квалификации | 90–180 секунд |
| Hot leads / total | 20–40% |
| Conversion lead → customer | 5–20% (B2B индустрия) |
| Среднее время до первого контакта менеджера (hot) | < 1 час |
| Cost per qualified lead | 500–5 000 ₽ |
Антифрод и защита от ботов
В B2B типичная проблема — конкуренты или боты заполняют форму, чтобы выкачать контент / выявить ваших менеджеров. Меры:
- captcha на входе для трафика с подозрительных источников;
- проверка email на disposable (mailinator, 10minutemail);
- проверка телефона на validity (REST API телефонной валидации);
- лимит 1 заявка с user_id в 7 дней;
- анализ времени прохождения квалификации — < 10 секунд = бот.
Common pitfalls
- 20 вопросов вместо 5 — drop-off 80%.
- Нет SLA реакции — лид через час остыл.
- Ручная передача в CRM — менеджер забывает, лиды теряются.
- Скоринг = средний по больнице — не отделяет hot от cold.
- Только текст, без кнопок — пользователь печатает «10», вы парсите regex.
- Менеджер не видит истории касаний — звонит «вслепую».
Итого
B2B-бот для лидогенерации в MAX: 5–7 квалификационных вопросов по BANT с inline-кнопками, скоринг 0–100 по правилам по отрасли/размеру/роли/бюджету/срокам, автоматическая передача в amoCRM/Bitrix24 с заполненными полями и тегами, роутинг на менеджера по отрасли и нагрузке, разный thank-you и SLA по сегменту (hot — звонок за час, warm — 24 часа, cold — прогрев), follow-up неотвеченных, прогрев холодных серией контента, метрики воронки (conv start→qual 60–80%, hot share 20–40%). MVP — 4–6 недель и 700–1500 тыс. ₽; полный с прогревом, скорингом, интеграцией CRM, дашбордами — 8–12 недель и 1.5–3 млн ₽. ROI обычно 5–15× за счёт того, что менеджеры тратят время только на готовых лидов с заполненным профилем, а не на «расскажите кто вы и что нужно».
Частые вопросы
Сколько вопросов в квалификации B2B-бота?
Оптимально 5–7. До 5 — недостаточно для скоринга, после 7 — drop-off растёт экспоненциально (с каждым вопросом теряете 5–10% лидов). Минимум: отрасль, размер компании, роль контакта, ориентировочный бюджет, срок запуска. Опционально — задача в свободной форме (1 текстовое поле). Всё через inline-кнопки, кроме последнего — это снижает трение и даёт чистые данные для скоринга. Среднее время прохождения — 90–180 секунд.
Как считать скоринг лида?
Простая аддитивная модель: каждому варианту ответа — балл (отрасль 5–25, размер 5–30, роль 5–30, бюджет 5–35, срок 0–35). Сумма 0–100. Категоризация: 0–30 cold, 31–60 warm, 61+ hot. Веса калибруются по реальной конверсии: смотрите, какие ответы коррелируют со сделкой, поднимайте им вес. Через ML (логистическая регрессия / градиентный бустинг) можно сильно поднять точность скоринга при наличии 500+ закрытых сделок для обучения.
Какой SLA реакции на горячий лид?
Хот-лид (61+ score) — звонок менеджера в течение 1 часа в рабочее время. Это критично: исследования показывают, что conversion падает в 5–10 раз при задержке более 1 часа. Warm (31–60) — 24 часа. Cold (0–30) — серия писем без звонка. SLA должен быть публично озвучен в подтверждении пользователю — это повышает доверие и удерживает на линии. Нарушение SLA — алерт менеджеру и эскалация руководителю.
Как роутить лиды между менеджерами?
Двухуровневый роутинг: по отрасли (ритейл — Ольга, финансы — Сергей) и по нагрузке (round-robin или least-loaded по количеству активных сделок). Дополнительно — приоритет хот-лидов перед warm-лидами в очереди распределения. Если у профильного менеджера загрузка > N сделок — fallback на старшего менеджера или дежурного. Ночью и в выходные — отложенная передача с follow-up в начале рабочего дня.
Как обработать ситуацию «менеджер не дозвонился»?
Cron раз в 6 часов проверяет лиды со статусом no_answer старше 24 часов. Бот шлёт сообщение «Менеджер пытался дозвониться. Когда удобно перезвонить?» с inline-кнопками «через час / завтра утром / не интересно». На основе ответа — запись в задачу менеджеру с правильным дедлайном. Не более 2 follow-up через бот, дальше — в архив. Это спасает 15–30% лидов, которые иначе потерялись бы из-за неудачного времени звонка.
Как защитить B2B-бот от конкурентов и ботов-скрейперов?
Captcha на старте для подозрительного трафика (Yandex SmartCaptcha с invisible режимом). Проверка email на disposable домены (mailinator, 10minutemail и т.п. — отбиваем). Проверка телефона на validity через REST API (NUMVERIFY, Twilio Lookup). Лимит 1 заявка с user_id в 7 дней. Анализ времени прохождения — < 10 секунд это явно бот, отбрасываем. Скоринг с понижающим коэффициентом для подозрительных IP (TOR, дата-центры). Внутренний blacklist user_id и компаний по результатам ручного ревью.
Сколько стоит и сколько занимает разработка?
MVP с квалификацией, скорингом, передачей в CRM, базовым follow-up — 4–6 недель и 700–1500 тыс. ₽. Полная версия с прогревом холодных, ML-скорингом, дашбордами воронки, A/B-тестами вопросов, интеграцией с amoCRM/Bitrix24/RetailCRM — 8–12 недель и 1.5–3 млн ₽. Поддержка инфры — 5–15 тыс. ₽/мес. ROI обычно 5–15× в первые 6 месяцев: менеджеры тратят время только на квалифицированных лидов с заполненным профилем, конверсия в сделку растёт в 2–3 раза, cost per qualified lead снижается на 40–70%.