Разработка AI-плагина для Bitrix24

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-плагина для Bitrix24
Средняя
~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-плагина для Bitrix24

Bitrix24 — популярная CRM в России и СНГ с возможностью расширений через Marketplace приложения. AI-плагин добавляет: суммаризацию звонков и писем, автоматическую заполнение полей CRM из разговора, генерацию коммерческих предложений, AI-подсказки менеджерам.

Архитектура Bitrix24 приложения

Bitrix24 приложения работают через:

  • REST API (webhooks, OAuth 2.0)
  • Placement — встраивание UI в интерфейс Bitrix24
  • Events — реакция на события (новый лид, изменение сделки)
# webhook_handler.py — обработка событий Bitrix24
from flask import Flask, request, jsonify
from anthropic import Anthropic
import requests

app = Flask(__name__)
client = Anthropic()

BITRIX_URL = "https://your-domain.bitrix24.ru/rest"
BITRIX_TOKEN = "your-webhook-token"

def bitrix_api(method: str, params: dict) -> dict:
    """Вызов Bitrix24 REST API"""
    response = requests.post(
        f"{BITRIX_URL}/{BITRIX_TOKEN}/{method}/",
        json=params,
    )
    return response.json().get("result", {})

@app.route("/webhook/call-ended", methods=["POST"])
def on_call_ended():
    """Обработчик завершения звонка"""
    data = request.json
    call_id = data.get("data", {}).get("CALL_ID")
    crm_entity_id = data.get("data", {}).get("CRM_ENTITY_ID")

    # Получаем транскрипцию звонка
    call_info = bitrix_api("voximplant.statistic.get", {"CALL_ID": call_id})
    transcript = call_info.get("TRANSCRIPT", "")

    if not transcript:
        return jsonify({"status": "no transcript"})

    # AI-суммаризация
    summary = summarize_call(transcript)

    # Записываем в CRM как активность
    bitrix_api("crm.activity.add", {
        "fields": {
            "OWNER_TYPE_ID": 2,  # 2 = Contact, 3 = Company
            "OWNER_ID": crm_entity_id,
            "TYPE_ID": 6,  # Звонок
            "SUBJECT": "Суммаризация звонка (AI)",
            "DESCRIPTION": summary["text"],
            "DESCRIPTION_TYPE": 1,
        }
    })

    # Извлекаем ключевые данные и обновляем поля сделки
    if crm_entity_id:
        updates = extract_crm_fields(transcript)
        if updates:
            bitrix_api("crm.deal.update", {
                "id": crm_entity_id,
                "fields": updates,
            })

    return jsonify({"status": "ok"})

def summarize_call(transcript: str) -> dict:
    """Суммаризует транскрипцию звонка"""
    response = client.messages.create(
        model="claude-haiku-4-5",
        max_tokens=1024,
        system="""Суммаризируй переговоры по продажам.
Формат:
- Краткое резюме (2-3 предложения)
- Ключевые договорённости
- Следующие шаги
- Возражения клиента""",
        messages=[{
            "role": "user",
            "content": f"Транскрипция звонка:\n{transcript}"
        }]
    )
    return {"text": response.content[0].text}

def extract_crm_fields(transcript: str) -> dict:
    """Извлекает данные для обновления полей CRM"""
    import json

    response = client.messages.create(
        model="claude-haiku-4-5",
        max_tokens=512,
        messages=[{
            "role": "user",
            "content": f"""Извлеки данные из разговора для CRM.
Верни JSON: {{
  "TITLE": "название сделки если упоминалось",
  "OPPORTUNITY": число (бюджет если упоминался),
  "COMMENTS": "важные заметки"
}}
Если поле не упоминалось — не включай его.

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

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

UI Placement — встраивание в карточку сделки

// placement.js — встроенный виджет в карточку CRM
BX24.init(function() {
    // Кнопка "AI-анализ" в карточке сделки
    BX24.placement.bind('CRM_DEAL_DETAIL_TAB', {
        title: 'AI Помощник',
        onClick: function() {
            showAIPanel();
        }
    });
});

async function generateCommercialProposal(dealId) {
    // Получаем данные сделки
    const deal = await BX24.callMethod('crm.deal.get', { id: dealId });

    // Запрос на генерацию КП
    const response = await fetch('/ai/generate-proposal', {
        method: 'POST',
        body: JSON.stringify({ deal: deal.result }),
        headers: { 'Content-Type': 'application/json' }
    });

    const result = await response.json();

    // Вставляем КП в поле описания
    await BX24.callMethod('crm.deal.update', {
        id: dealId,
        fields: { COMMENTS: result.proposal }
    });
}

Генерация коммерческого предложения

@app.route("/ai/generate-proposal", methods=["POST"])
def generate_proposal():
    deal = request.json.get("deal", {})

    response = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=2048,
        system="""Ты — менеджер по продажам B2B компании.
Создавай профессиональные коммерческие предложения на основе данных сделки.""",
        messages=[{
            "role": "user",
            "content": f"""Создай КП для клиента.
Данные сделки:
- Название: {deal.get('TITLE')}
- Клиент: {deal.get('COMPANY_ID')}
- Сумма: {deal.get('OPPORTUNITY')} {deal.get('CURRENCY_ID')}
- Комментарии: {deal.get('COMMENTS', '')}

Структура КП: приветствие, понимание задачи, предлагаемое решение, выгоды, стоимость, следующий шаг."""
        }]
    )

    return jsonify({"proposal": response.content[0].text})

Практический кейс: отдел продаж 15 менеджеров

Боль: менеджеры тратили 25–40 мин после каждого звонка на заполнение CRM и составление писем-резюме.

Результат: AI автоматически записывает суммаризацию, обновляет поля, предлагает черновик КП.

Метрики: время заполнения CRM после звонка: 30 мин → 5 мин. Конверсия отправленных КП: +12% (качество выросло).

Сроки

  • Webhook-обработчик + суммаризация звонков: 3–5 дней
  • UI Placement в карточках CRM: 3–5 дней
  • Генерация КП: 2–3 дня
  • Публикация в Bitrix24 Marketplace: 1–2 недели (ревью)