Внедрение платформы Vapi для голосовых AI-агентов

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Внедрение платформы Vapi для голосовых AI-агентов
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Разработка голосовых агентов на платформе VAPI

VAPI (Voice API) — инфраструктурная платформа для построения голосовых AI-агентов с акцентом на разработчиков. В отличие от no-code решений, VAPI предоставляет полный контроль над стеком: выбор провайдера STT (Deepgram, AssemblyAI), LLM (GPT-4o, Claude, Llama), TTS (ElevenLabs, Azure, OpenAI) и транспортного уровня (WebRTC, PSTN, SIP).

Архитектура VAPI-агента

Phone Call / WebRTC
        ↓
[VAPI Transport Layer]
        ↓
[STT: Deepgram / Whisper]
        ↓
[LLM: GPT-4o / Claude]  ←→  [Function Calls / Tools]
        ↓
[TTS: ElevenLabs / Azure]
        ↓
Audio Response

Создание агента через VAPI API

import requests
from typing import Optional

class VAPIAgentBuilder:
    """Конструктор голосовых агентов через VAPI API"""

    def __init__(self, api_key: str):
        self.api_key = api_key
        self.base_url = "https://api.vapi.ai"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }

    def create_assistant(self, name: str,
                          system_prompt: str,
                          model: str = "gpt-4o",
                          voice_provider: str = "elevenlabs",
                          voice_id: str = "rachel",
                          tools: Optional[list] = None) -> dict:
        """
        Создание голосового ассистента.
        tools: функции для вызова во время разговора (получение данных, запись)
        """
        assistant_config = {
            "name": name,
            "model": {
                "provider": "openai" if "gpt" in model else "anthropic",
                "model": model,
                "systemPrompt": system_prompt,
                "temperature": 0.7,
            },
            "voice": {
                "provider": voice_provider,
                "voiceId": voice_id,
                "speed": 1.0,
                "stability": 0.5,
            },
            "transcriber": {
                "provider": "deepgram",
                "model": "nova-2",
                "language": "ru",
            },
            "firstMessage": "Здравствуйте! Чем могу помочь?",
            "endCallMessage": "Спасибо за звонок. До свидания!",
            "endCallFunctionEnabled": True,
            "silenceTimeoutSeconds": 20,
            "maxDurationSeconds": 600,
        }

        if tools:
            assistant_config["model"]["tools"] = tools

        response = requests.post(
            f"{self.base_url}/assistant",
            json=assistant_config,
            headers=self.headers
        )
        return response.json()

    def create_tool(self, name: str,
                     description: str,
                     parameters: dict,
                     server_url: str) -> dict:
        """
        Инструмент для агента: HTTP-вызов во время разговора.
        Типичные кейсы: проверка статуса, поиск в базе, запись заявки.
        """
        return {
            "type": "function",
            "function": {
                "name": name,
                "description": description,
                "parameters": {
                    "type": "object",
                    "properties": parameters,
                    "required": list(parameters.keys())
                }
            },
            "server": {
                "url": server_url,
                "timeoutSeconds": 5,
            }
        }

    def create_outbound_call(self, assistant_id: str,
                              phone_number: str,
                              customer_data: dict = None) -> dict:
        """Инициирование исходящего звонка с передачей контекста"""
        payload = {
            "assistantId": assistant_id,
            "customer": {
                "number": phone_number,
                "name": customer_data.get("name", "") if customer_data else "",
            },
        }

        if customer_data:
            # Передаём данные о клиенте в контекст агента
            payload["assistantOverrides"] = {
                "variableValues": customer_data
            }

        response = requests.post(
            f"{self.base_url}/call",
            json=payload,
            headers=self.headers
        )
        return response.json()

    def setup_inbound_phone_number(self, phone_number: str,
                                    assistant_id: str) -> dict:
        """Привязка входящего номера к ассистенту"""
        payload = {
            "number": phone_number,
            "assistantId": assistant_id,
            "fallbackDestination": {
                "type": "number",
                "number": "+1234567890"  # Fallback на живого оператора
            }
        }

        response = requests.post(
            f"{self.base_url}/phone-number",
            json=payload,
            headers=self.headers
        )
        return response.json()

Настройка прерываний и latency

VAPI позволяет тонко настраивать параметры, влияющие на естественность разговора:

  • interruptionsEnabled — разрешает пользователю прерывать агента. Критично для натуральности диалога.
  • backgroundDenoisingEnabled — фильтрация фонового шума через Krisp.
  • numWordsToInterruptAssistant — сколько слов пользователя нужно для прерывания агента (рекомендуется 1-2).
  • backchannelingEnabled — агент произносит «угу», «понятно» во время пауз.

Интеграция с WebRTC для веб-звонков

# Frontend пример (TypeScript/JavaScript)
VAPI_WEB_SDK_EXAMPLE = """
import Vapi from "@vapi-ai/web";

const vapi = new Vapi("YOUR_PUBLIC_KEY");

// Начало разговора
vapi.start({
  assistantId: "your-assistant-id",
  // Или inline конфигурация ассистента
});

// Слушаем события
vapi.on("call-start", () => console.log("Call started"));
vapi.on("call-end", () => console.log("Call ended"));
vapi.on("message", (message) => {
  if (message.type === "transcript") {
    console.log(message.role, message.transcript);
  }
  if (message.type === "function-call") {
    // Обработка tool call на стороне клиента
    console.log("Tool:", message.functionCall.name);
  }
});
"""

Сравнение STT провайдеров в VAPI

Провайдер Latency (WER) Русский Стоимость
Deepgram Nova-2 ~250ms, WER 8% хорошо $0.0059/мин
AssemblyAI Universal ~400ms, WER 7% хорошо $0.0065/мин
OpenAI Whisper ~600ms, WER 6% отлично $0.006/мин
Azure Cognitive ~300ms, WER 9% хорошо $0.016/мин

VAPI оптимален для команд разработки, которым нужен полный контроль над стеком голосового агента. Срок до первого работающего прототипа — 2-3 дня. Production-готовый агент с интеграциями — 3-5 недель.