Разработка AI-ассистента для CRM суммаризация звонков предложения

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-ассистента для CRM суммаризация звонков предложения
Средняя
~1-2 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка AI-ассистента для CRM: суммаризация звонков и предложения

AI-ассистент для CRM автоматизирует рутинные задачи менеджеров по продажам: суммаризация переговоров, извлечение данных для обновления сделки, генерация follow-up письма, подготовка к следующему контакту. Менеджер фокусируется на продажах, а не на заполнении CRM.

Архитектура CRM-ассистента

from anthropic import Anthropic
from pydantic import BaseModel
from typing import Optional, Literal
import json

client = Anthropic()

class CallSummary(BaseModel):
    key_points: list[str]
    client_needs: list[str]
    objections: list[str]
    agreements: list[str]
    next_steps: list[str]
    deal_probability: Literal["high", "medium", "low"]
    sentiment: Literal["positive", "neutral", "negative"]

class CRMFields(BaseModel):
    title: Optional[str] = None
    budget: Optional[float] = None
    timeline: Optional[str] = None
    decision_maker: Optional[str] = None
    competitors_mentioned: list[str] = []
    pain_points: list[str] = []
    notes: str = ""

class CRMAssistant:

    def summarize_call(self, transcript: str) -> CallSummary:
        """Суммаризует транскрипцию звонка"""

        response = client.messages.create(
            model="claude-haiku-4-5",
            max_tokens=2048,
            system="""Ты — ассистент по продажам. Анализируй переговоры.
Будь конкретным: указывай факты, цифры, имена из разговора.""",
            messages=[{
                "role": "user",
                "content": f"""Проанализируй звонок и верни JSON:
{{
  "key_points": ["ключевые моменты"],
  "client_needs": ["потребности клиента"],
  "objections": ["возражения"],
  "agreements": ["договорённости"],
  "next_steps": ["следующие шаги"],
  "deal_probability": "high|medium|low",
  "sentiment": "positive|neutral|negative"
}}

Транскрипция:
{transcript}"""
            }]
        )

        text = response.content[0].text
        data = json.loads(text[text.find("{"):text.rfind("}") + 1])
        return CallSummary(**data)

    def extract_crm_fields(self, transcript: str) -> CRMFields:
        """Извлекает данные для обновления CRM"""

        response = client.messages.create(
            model="claude-haiku-4-5",
            max_tokens=1024,
            messages=[{
                "role": "user",
                "content": f"""Извлеки данные из разговора для CRM.
Верни только то, что явно упоминалось в разговоре.

{{
  "title": "название сделки если обсуждалось",
  "budget": число или null,
  "timeline": "сроки если упоминались",
  "decision_maker": "ЛПР если называли",
  "competitors_mentioned": ["конкуренты если упоминались"],
  "pain_points": ["боли клиента"],
  "notes": "важные заметки"
}}

Разговор:
{transcript[:3000]}"""
            }]
        )

        text = response.content[0].text
        try:
            data = json.loads(text[text.find("{"):text.rfind("}") + 1])
            return CRMFields(**data)
        except Exception:
            return CRMFields()

    def generate_followup_email(
        self,
        summary: CallSummary,
        crm_fields: CRMFields,
        manager_name: str,
        client_name: str,
        company_name: str,
    ) -> str:
        """Генерирует follow-up письмо после звонка"""

        response = client.messages.create(
            model="claude-sonnet-4-5",
            max_tokens=1024,
            messages=[{
                "role": "user",
                "content": f"""Напиши follow-up письмо после переговоров.

Менеджер: {manager_name}
Клиент: {client_name}, компания {company_name}

Ключевые моменты разговора:
{chr(10).join(f"- {p}" for p in summary.key_points)}

Договорённости:
{chr(10).join(f"- {a}" for a in summary.agreements)}

Следующие шаги:
{chr(10).join(f"- {s}" for s in summary.next_steps)}

{f"Обсуждаемый бюджет: {crm_fields.budget}" if crm_fields.budget else ""}
{f"Сроки: {crm_fields.timeline}" if crm_fields.timeline else ""}

Требования к письму:
- Деловой, профессиональный тон
- Кратко: 3-4 абзаца
- Подтверди договорённости
- Укажи следующий шаг с конкретной датой если есть
- Подпись менеджера"""
            }]
        )

        return response.content[0].text

    def prepare_next_meeting(
        self,
        summary: CallSummary,
        crm_history: list[dict],
        meeting_agenda: str = "",
    ) -> str:
        """Готовит бриф для следующего контакта"""

        history_text = "\n".join([
            f"[{h['date']}] {h['summary']}"
            for h in crm_history[-5:]
        ]) if crm_history else "Первый контакт"

        response = client.messages.create(
            model="claude-haiku-4-5",
            max_tokens=1024,
            messages=[{
                "role": "user",
                "content": f"""Подготовь бриф менеджера для следующего контакта.

История взаимодействий:
{history_text}

Итоги последнего звонка:
- Потребности: {", ".join(summary.client_needs)}
- Возражения: {", ".join(summary.objections)}
- Договорённости: {", ".join(summary.agreements)}

{f"Планируемая повестка: {meeting_agenda}" if meeting_agenda else ""}

Включи:
1. Контекст (что важно помнить)
2. Открытые вопросы требующие проработки
3. Рекомендуемые аргументы против возражений
4. Предложения и материалы для встречи"""
            }]
        )

        return response.content[0].text

Интеграция с популярными CRM

class AmoCRMIntegration:
    """Интеграция с amoCRM (популярна в России)"""

    def __init__(self, domain: str, access_token: str):
        self.base_url = f"https://{domain}.amocrm.ru/api/v4"
        self.headers = {"Authorization": f"Bearer {access_token}"}

    def update_lead(self, lead_id: int, fields: CRMFields, note: str):
        """Обновляет сделку данными из звонка"""
        import requests

        # Обновляем поля сделки
        update_data = {}
        if fields.budget:
            update_data["price"] = int(fields.budget)
        if fields.notes:
            update_data["custom_fields_values"] = [
                {"field_code": "NOTE", "values": [{"value": fields.notes}]}
            ]

        if update_data:
            requests.patch(
                f"{self.base_url}/leads/{lead_id}",
                headers=self.headers,
                json=update_data
            )

        # Добавляем примечание
        requests.post(
            f"{self.base_url}/leads/{lead_id}/notes",
            headers=self.headers,
            json={"note_type": "common", "params": {"text": note}}
        )

Практический кейс: B2B-продажи SaaS

Команда: 8 менеджеров по продажам, 15–20 звонков в день у каждого.

Проблема: менеджеры тратили 20–30 минут после каждого звонка на CRM + письмо. "Горячий" момент после звонка терялся.

Результат:

  • Время post-call работы: 25 мин → 5 мин (ревью AI черновика)
  • Качество follow-up писем: значительно выросло (более конкретные, с правильными деталями)
  • Заполнение CRM: 70% автоматически
  • Конверсия из первого звонка в следующий шаг: +18%

Сроки

  • Суммаризация + извлечение полей: 3–5 дней
  • Follow-up генерация: 2–3 дня
  • CRM интеграция (amoCRM/Bitrix): 3–5 дней
  • Встроенная транскрипция звонков: +1 неделя