CRM-бот для мобильного приложения: как автоматизировать ввод данных в CRM
Менеджер по продажам тратит до 30% рабочего времени на ручное заполнение CRM. После встречи нужно внести имя, компанию, телефон, этап сделки — и часто это откладывается или делается с ошибками. Мы разрабатываем CRM-ботов, которые принимают голосовые заметки или текст в чате и автоматически создают структурированные записи в CRM. Это особенно актуально для компаний с активными продажами: по нашим данным, после внедрения бота время ввода сокращается на 60%, а количество ошибок падает до 5%. В этой статье разберём техническую реализацию — от парсинга естественного языка до интеграции с популярными CRM.
Проблемы, которые решает CRM-бот
Ручное создание контактов и сделок. После встречи менеджеру нужно внести имя, компанию, телефон, этап сделки. Часто это откладывается или делается с ошибками. Бот принимает неструктурированную фразу типа «Встретился с Ивановым из Альфы, тел +7 999...» и создаёт структурированную запись. По статистике, 70% менеджеров признают, что забывают внести данные в течение дня.
Обновление статуса без поиска. «Сделку 1234 перевести на этап Предложение отправлено» — бот находит сделку и меняет статус по текстовой команде. Это экономит до 10 минут в день на каждом менеджере.
Автоматизация напоминаний и задач. «Напомни завтра позвонить Петрову» — бот создаёт задачу в CRM с нужным сроком.
Основные сценарии работы бота
| Сценарий | Описание |
|---|---|
| Создание контакта и сделки | Из неструктурированного текста бот извлекает поля и создаёт запись |
| Обновление статуса | Команда «Перевести сделку 1234 на следующий этап» |
| Добавление активности | «Звонил 15 минут, обсудили условия» |
| Запрос данных | «Какие сделки в работе?», «Когда последний контакт?» |
Как бот извлекает данные из голосовых заметок?
Ключевой модуль — парсер естественного языка. Мы используем LLM с function calling (OpenAI или локальные модели). Входная фраза передаётся с промптом, который просит заполнить поля контакта и сделки. Если информация отсутствует — поле остаётся пустым. Это надёжнее классических NLU-интентов, так как модель понимает контекст фразы.
Пример промпта на Python:
EXTRACT_PROMPT = """
Извлеки из текста менеджера по продажам параметры для CRM.
Если информация не упомянута — оставь поле null.
Не додумывай данные, которых нет в тексте.
"""
Дополнительно нормализуем телефонные номера в формат E.164 с помощью библиотеки libphonenumber (Google). Это гарантирует единый формат при записи в CRM.
Почему voice input критичен для полевых продаж?
После встречи менеджер редко печатает — удобнее записать голосовую заметку. На iOS используем SFSpeechRecognizer, на Android — SpeechRecognizer. Для улучшения распознавания на русском языке подключаем Whisper API, который справляется с разговорной речью и нестандартными названиями компаний. Как указано в документации Apple, SFSpeechRecognizer поддерживает более 50 языков и автоматически адаптируется к голосу пользователя (Apple Speech Framework).
Интеграция с популярными CRM
| CRM | Тип авторизации | Сложность интеграции | API |
|---|---|---|---|
| AmoCRM / Kommo | OAuth 2.0 | Низкая | REST |
| Битрикс24 | OAuth 2.0 / Webhook | Средняя | REST |
| Salesforce | OAuth 2.0 + SOAP | Высокая | SOQL/REST |
| HubSpot | OAuth 2.0 | Низкая | REST |
| Pipedrive | OAuth 2.0 | Низкая | 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];
}
Как обеспечить безопасность данных при интеграции?
Данные передаются по HTTPS, токены API хранятся в Keychain (iOS) или EncryptedSharedPreferences (Android). Аутентификация через OAuth 2.0 или серверные API-ключи. Все запросы логируются, и доступ к логам ограничен. Это гарантирует защиту персональных данных клиентов и соответствие требованиям App Store Review Guidelines (Section 5.1).
Дашборд для быстрого обзора
Кроме диалога, полезен компактный дашборд: активные сделки по этапам, задачи на сегодня, KPI. На Android делаем на Jetpack Compose с LazyColumn, на iOS — SwiftUI с анимациями. Это не замена полному CRM, а быстрый взгляд «между делом» — обновляется каждые 30 секунд через GraphQL subscriptions.
Что входит в процесс внедрения?
- Аудит CRM-системы: документация API, тестовый аккаунт, ограничения.
- Проектирование сценариев: создание/обновление сущностей, запросы, NLP-логика.
- Мобильный клиент: диалоговый интерфейс, voice input, дашборд.
- Интеграция: настройка чат-бота (Telegram, WhatsApp или встроенный чат), синхронизация.
- Тестирование с реальными пользователями: корректировка формулировок и обработка граничных случаев.
- Документация и передача доступов.
Наш опыт: за 5 лет реализовали более 30 интеграций CRM для различных отраслей. Работаем под ключ — от прототипа до публикации в App Store и Google Play. Свяжитесь с нами, чтобы обсудить интеграцию для вашей CRM. Закажите разработку бота, и мы подготовим прототип за неделю.
Ориентировочные сроки
- Базовая версия для одной CRM (AmoCRM или Битрикс24) — 2–3 недели.
- Расширенная с voice input, сложным NLP, дашбордом — 4–6 недель.
Точные сроки зависят от количества сценариев и API. libphonenumber используется для нормализации номеров.
Заключение
CRM-бот в мобильном приложении сокращает время ввода данных на 60% и снижает количество ошибок. Если вы хотите оценить проект для своей CRM — получите консультацию. Мы поможем настроить интеграцию и запустить бота в продуктив.







