Реализация бота для автоматизации CRM-процессов в мобильном приложении
Менеджер по продажам тратит 20–30% рабочего времени на внесение данных в CRM. Голосовая заметка после встречи, быстрый статус сделки между звонками — бот делает это через диалог, не заставляя открывать полноценный CRM-клиент.
Ключевые сценарии CRM-бота
Создание контакта и сделки. «Только что встретился с Иваном Петровым из ООО Альфа, телефон +7 999 123-45-67, интересует наш Pro-тариф, планируем созвониться в пятницу» — бот разбирает это в структуру и создаёт контакт + сделку в CRM.
Обновление статуса. «Сделка 1234 — перевести на этап Предложение отправлено» без поиска по интерфейсу.
Добавление активности. «Звонил 15 минут, обсудили условия, следующий шаг — демо в четверг».
Запрос данных. «Какие сделки у меня в работе?», «Когда последний контакт с клиентом Ромашка?».
Интеграция с CRM API
Популярные системы с REST API:
- AmoCRM / Kommo — OAuth 2.0, полный REST API для сделок, контактов, задач, воронки
- Битрикс24 — REST API через входящий webhook или OAuth
- Salesforce — SOQL + REST/SOAP API, наиболее сложный в настройке
- HubSpot — чистый REST, хорошая документация
- Pipedrive — REST, удобен для малого бизнеса
Для AmoCRM создание сделки с контактом:
const amo = require('amocrm-js');
async function createDealWithContact(dealData, contactData) {
// Сначала создаём или находим контакт
const contacts = await client.contacts.create([{
name: contactData.name,
phone: [{ value: contactData.phone, enum_code: 'WORK' }],
email: contactData.email ? [{ value: contactData.email, enum_code: 'WORK' }] : []
}]);
const contactId = contacts[0].id;
// Создаём сделку и линкуем контакт
const deals = await client.leads.create([{
name: dealData.name,
price: dealData.price || 0,
pipeline_id: dealData.pipelineId,
status_id: dealData.statusId,
_embedded: {
contacts: [{ id: contactId }]
}
}]);
return deals[0];
}
Парсинг неструктурированного текста — ключевая задача. Менеджер не будет заполнять поля через диалог поочерёдно. Он скажет фразу, бот должен извлечь из неё имя, компанию, телефон, намерение, следующий шаг.
LLM с function calling здесь работает лучше, чем NLU с интентами: модель понимает контекст и заполняет поля, которые есть в тексте, остальные оставляет пустыми.
EXTRACT_PROMPT = """
Извлеки из текста менеджера по продажам параметры для CRM.
Если информация не упомянута — оставь поле null.
Не додумывай данные, которых нет в тексте.
"""
Нормализация телефонов. +7 999 123-45-67, 89991234567, 8(999)123-45-67 — один и тот же номер. Перед записью в CRM нормализуем в E.164: +79991234567. Библиотека libphonenumber (Google) — стандарт для этого.
Voice input для полевых продаж
Менеджер не будет печатать после встречи — запишет голосовую заметку. На iOS — SFSpeechRecognizer с SFSpeechAudioBufferRecognitionRequest, на Android — SpeechRecognizer. После транскрипции текст передаётся боту как обычное текстовое сообщение.
Качество транскрипции на русском: нативные API работают приемлемо для структурированных фраз, Whisper API лучше справляется с разговорной речью и нестандартными именами/терминами отрасли.
Дашборд в мобильном приложении
Помимо диалога, CRM-бот часто дополняется компактным дашбордом: активные сделки по этапам, задачи на сегодня, KPI за месяц. Это не замена полному CRM-клиенту — быстрый обзор для менеджера между встречами.
На Android — Jetpack Compose с LazyColumn и animated counters, на iOS — SwiftUI с Animation modifiers.
Процесс работы
Аудит CRM-системы: документация API, тестовый аккаунт.
Проектирование сценариев: создание сущностей, обновление статусов, запросы данных.
NLP-логика для парсинга неструктурированного ввода.
Мобильный клиент с диалогом и voice input.
Тестирование с реальными продажниками — их формулировки всегда отличаются от тестовых.
Ориентиры по срокам
Бот для одной CRM (AmoCRM / Битрикс24) с базовыми сценариями — 2–3 недели. С голосовым вводом, сложным парсингом, дашбордом — 4–6 недель.







