Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds
Powrót do kolekcji
Przewodnik17 min czytania

Vapi, głosowi agenci AI i realny koszt minuty

Vapi spina rozpoznawanie mowy, model i syntezę w jednego agenta głosowego. Realny koszt minuty, opóźnienie, narzędzia i porównanie z Retell oraz Bland.

Vapi - kompletny przewodnik po platformie głosowych agentów AI

Czym jest Vapi?

Vapi to platforma deweloperska do budowania, testowania i wdrażania głosowych agentów AI. Zamiast samodzielnie łączyć speech-to-text, modele językowe i text-to-speech, Vapi dostarcza zunifikowany pipeline, który obsługuje cały cykl rozmowy: nasłuchiwanie, myślenie i mówienie.

Wartość tej warstwy polega na tym, że rozmowa głosowa to znacznie więcej niż trzy wywołania po kolei. Trzeba wykryć, kiedy rozmówca skończył mówić, obsłużyć przerwanie w połowie zdania, zmieścić się w budżecie czasowym, przy którym cisza nie staje się niezręczna, i poradzić sobie z tym, że rozpoznanie mowy myli się częściej, niż wynikałoby z zestawień. Samodzielne poskładanie tego zajmuje tygodnie.

Ceną jest zależność od pośrednika i rachunek, który wygląda inaczej, niż sugeruje strona z cennikiem. Do tego wrócimy niżej, bo to najważniejsza rzecz do policzenia przed decyzją.

Dlaczego Vapi?

Kluczowe zalety Vapi

  1. Niska latencja - Dostawca deklaruje poniżej 500 ms głos-do-głosu, w praktyce zwykle więcej, bo liczy się cały łańcuch
  2. BYO Keys - Przynieś własne klucze API do dowolnych dostawców (OpenAI, Anthropic, ElevenLabs, Deepgram i więcej)
  3. Flow Studio - Wizualny builder do projektowania logiki konwersacji drag-and-drop
  4. Tool calling - Agenci mogą wywoływać twoje API w trakcie rozmowy (rezerwacje, CRM, bazy danych)
  5. Multilingual - Ponad 100 języków i akcentów
  6. Skalowalność - Obsługa milionów jednoczesnych połączeń
  7. SDK na każdą platformę - Web, iOS, Android, Python, backend

Vapi vs Retell AI vs Bland AI

CechaVapiRetell AIBland AI
Latencja~700ms~600ms~800ms
Koszt bazowy$0.05/min (+ dostawcy)~$0.07/min (all-in)~$0.09/min
Realny koszt$0.13-$0.31/min~$0.07-$0.15/min~$0.09-$0.20/min
Modele BYOPełne wsparcieOgraniczonePełne wsparcie
Visual builderFlow StudioTakPathways builder
Open sourceNieNieNie
HIPAA$2,000/mies. add-onW cenieW cenie
SDKWeb, iOS, Android, PythonWeb, PythonREST API
Jednoczesne połączenia1M+Nielimitowane20,000+/h
Najlepsze doCustom builds, dev-heavyInbound support, healthcareHigh-volume outbound

Architektura - jak działa Vapi?

Vapi działa jako warstwa orkiestracji między twoją aplikacją a dostawcami AI. Cały cykl rozmowy opiera się na trzech krokach:

1. Listen (nasłuchiwanie)

Speech-to-text (STT) zamienia głos rozmówcy na tekst. Vapi obsługuje dostawców takich jak Deepgram, Whisper (OpenAI), Gladia i Azure Speech.

2. Think (myślenie)

LLM przetwarza transkrypcję i generuje odpowiedź. Możesz użyć GPT-4o, Claude, Gemini, Llama lub dowolnego innego modelu. W tym kroku agent może też wywoływać narzędzia (tool calling).

3. Speak (mówienie)

Text-to-speech (TTS) zamienia odpowiedź na głos. Obsługiwani dostawcy to ElevenLabs, Play.ht, Azure TTS, LMNT i inni.

Zaawansowane funkcje konwersacji

  • Endpointing - Wykrywa, kiedy rozmówca skończył mówić
  • Interrupt detection - Pozwala rozmówcy przerwać agentowi w trakcie mówienia
  • Backchanneling - Wstawia krótkie potwierdzenia ("tak", "rozumiem") podczas przetwarzania
  • Emotion detection - Identyfikuje sygnały tonu takie jak pilność czy frustracja

Pierwsze kroki

Instalacja SDK

Code
Bash
npm install @vapi-ai/web

npm install @vapi-ai/server-sdk

pip install vapi_server_sdk

Instalacja CLI

Code
Bash
curl -sSL https://vapi.ai/install.sh | bash

CLI automatycznie wykrywa twój stack technologiczny (React, Vue, Next.js, Python, Go, Flutter, React Native) i generuje przykłady kodu dopasowane do projektu.

Tworzenie asystenta

Asystenta zakłada się po stronie serwera, kluczem prywatnym. Klucz publiczny i pakiet przeglądarkowy służą wyłącznie do rozpoczynania rozmowy, więc próba wywołania tworzenia asystenta z pakietu webowego skończy się błędem, bo ta klasa nie ma takiej metody.

Code
TypeScript
import { VapiClient } from "@vapi-ai/server-sdk";

const client = new VapiClient({ token: process.env.VAPI_API_KEY });

const assistant = await client.assistants.create({
  name: "Customer Support Agent",
  firstMessage: "Hello! How can I help you today?",
  model: {
    provider: "openai",
    model: "gpt-4o",
    temperature: 0.7,
    messages: [
      {
        role: "system",
        content:
          "You are a friendly customer support agent. Help users with their orders and account questions.",
      },
    ],
  },
  voice: {
    provider: "11labs",
    voiceId: "21m00Tcm4TlvDq8ikWAM",
  },
});
Code
Python
from vapi import Vapi
import os

vapi = Vapi(token=os.getenv("VAPI_API_KEY"))

assistant = vapi.assistants.create(
    name="Customer Support Agent",
    first_message="Hello! How can I help you today?",
    model={
        "provider": "openai",
        "model": "gpt-4o",
        "temperature": 0.7,
        "messages": [
            {
                "role": "system",
                "content": "You are a friendly customer support agent. Help users with their orders and account questions.",
            }
        ],
    },
    voice={
        "provider": "11labs",
        "voiceId": "21m00Tcm4TlvDq8ikWAM",
    },
)

Rozpoczęcie rozmowy (Web)

Code
TypeScript
import Vapi from "@vapi-ai/web";

const vapi = new Vapi("YOUR_PUBLIC_API_KEY");

vapi.start("YOUR_ASSISTANT_ID");

vapi.on("call-start", () => {
  console.log("Call connected");
});

vapi.on("call-end", () => {
  console.log("Call ended");
});

vapi.on("message", (message) => {
  if (message.type === "transcript") {
    console.log(`${message.role}: ${message.transcript}`);
  }
});

vapi.on("error", (error) => {
  console.error("Call error:", error);
});

Rozpoczęcie rozmowy telefonicznej (Server)

Code
Python
from vapi import Vapi
import os

vapi = Vapi(token=os.getenv("VAPI_API_KEY"))

call = vapi.calls.create(
    phone_number_id="YOUR_PHONE_NUMBER_ID",
    customer={"number": "+1234567890"},
    assistant_id="YOUR_ASSISTANT_ID",
)

print(f"Call started: {call.id}")

Tool calling - wywoływanie narzędzi

Tool calling to jedna z najpotężniejszych funkcji Vapi. Pozwala agentowi wywoływać twoje API w trakcie rozmowy - sprawdzać status zamówienia, rezerwować wizytę, aktualizować CRM, czy pobierać dane z bazy.

Tworzenie narzędzia przez API

Code
Bash
curl -X POST 'https://api.vapi.ai/tool' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
    "type": "function",
    "function": {
      "name": "get_order_status",
      "description": "Check the current status of a customer order",
      "parameters": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string",
            "description": "The unique order identifier"
          }
        },
        "required": ["order_id"]
      }
    },
    "server": {
      "url": "https://your-api.com/webhook/vapi"
    }
  }'

Dodawanie narzędzia do asystenta

Code
Bash
curl -X PATCH 'https://api.vapi.ai/assistant/ASSISTANT_ID' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": {
      "provider": "openai",
      "model": "gpt-4o",
      "toolIds": ["your-tool-id"]
    }
  }'

Zarządzanie narzędziami przez CLI

Code
Bash
vapi tool list

vapi tool get <tool-id>

vapi tool create

vapi tool test <tool-id>

vapi tool delete <tool-id>

Obsługa tool calla na serwerze

Kiedy agent wywołuje narzędzie, Vapi wysyła request do twojego serwera:

Code
JSON
{
  "message": {
    "type": "tool-calls",
    "toolCallList": [
      {
        "id": "toolu_01DTPAzUm5Gk3zxrpJ969oMF",
        "name": "get_order_status",
        "arguments": {
          "order_id": "ORD-12345"
        }
      }
    ]
  }
}

Twój serwer musi zwrócić wynik z odpowiednim toolCallId:

Code
JSON
{
  "results": [
    {
      "toolCallId": "toolu_01DTPAzUm5Gk3zxrpJ969oMF",
      "result": "Order ORD-12345 is currently being shipped. Expected delivery: tomorrow."
    }
  ]
}

Implementacja webhooków

Code
TypeScript
import express from "express";

const app = express();
app.use(express.json());

app.post("/webhook/vapi", async (req, res) => {
  const { message } = req.body;

  if (message.type === "tool-calls") {
    const results = await Promise.all(
      message.toolCallList.map(async (toolCall) => {
        if (toolCall.name === "get_order_status") {
          const order = await db.orders.findById(
            toolCall.arguments.order_id
          );
          return {
            toolCallId: toolCall.id,
            result: `Order ${order.id}: ${order.status}. ${order.trackingInfo}`,
          };
        }

        if (toolCall.name === "book_appointment") {
          const booking = await calendar.createEvent(
            toolCall.arguments
          );
          return {
            toolCallId: toolCall.id,
            result: `Appointment booked for ${booking.date} at ${booking.time}.`,
          };
        }

        return {
          toolCallId: toolCall.id,
          result: "Unknown tool",
        };
      })
    );

    return res.json({ results });
  }

  res.json({ received: true });
});

app.listen(3000);
Code
Python
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/webhook/vapi", methods=["POST"])
def handle_webhook():
    message = request.json.get("message", {})

    if message.get("type") == "tool-calls":
        results = []
        for tool_call in message.get("toolCallList", []):
            if tool_call["name"] == "get_order_status":
                order = db.orders.find_by_id(tool_call["arguments"]["order_id"])
                results.append({
                    "toolCallId": tool_call["id"],
                    "result": f"Order {order.id}: {order.status}. {order.tracking_info}",
                })

            elif tool_call["name"] == "book_appointment":
                booking = calendar.create_event(tool_call["arguments"])
                results.append({
                    "toolCallId": tool_call["id"],
                    "result": f"Appointment booked for {booking.date} at {booking.time}.",
                })

        return jsonify({"results": results})

    return jsonify({"received": True})

if __name__ == "__main__":
    app.run(port=3000)

Flow Studio - wizualny builder

Flow Studio to wizualny builder do projektowania logiki konwersacji bez pisania kodu. Umożliwia tworzenie złożonych scenariuszy rozmów za pomocą drag-and-drop.

Możliwości Flow Studio

  • Branching prompts - Różne ścieżki rozmowy w zależności od odpowiedzi
  • Conditional paths - Warunki logiczne (jeśli klient VIP → przekieruj do specjalisty)
  • Error fallback - Automatyczne obsługiwanie błędów i nieoczekiwanych odpowiedzi
  • Webhook triggers - Wywołanie zewnętrznych API w dowolnym momencie rozmowy
  • Transfer calls - Przekierowanie do żywego agenta z zachowaniem kontekstu

Squads - orkiestracja wielu asystentów

Squads pozwalają na koordynację wielu asystentów w jednej rozmowie. Każdy asystent ma swoją specjalizację, a transfery między nimi zachowują pełen kontekst rozmowy.

Przykładowy scenariusz:

  1. Recepcjonista - Wita klienta i identyfikuje potrzebę
  2. Specjalista techniczny - Rozwiązuje problemy techniczne
  3. Dział sprzedaży - Przedstawia ofertę i finalizuje zamówienie

Każdy transfer jest płynny - kolejny asystent wie, o czym była dotychczasowa rozmowa.

Dostawcy i integracje

LLM (modele językowe)

DostawcaModele
OpenAIGPT-5 i warianty mini oraz nano, GPT-4.1, GPT-4o, o3, o4-mini
AnthropicClaude Sonnet 4.6, Claude Opus 4.6, Claude Haiku 4.5
GoogleGemini 3 Flash, Gemini 2.5 Pro, Gemini 2.5 Flash
MetaLlama 4 Maverick i Scout, Llama 3.3 (przez Groq/Together)
CustomDowolny model przez Custom LLM URL

TTS (text-to-speech)

DostawcaOpis
ElevenLabsNajbardziej realistyczne głosy, klonowanie głosu
Play.htSzeroki wybór głosów, konkurencyjna cena
Azure TTSEnterprise-grade, wiele języków
LMNTSzybki, niski koszt
DeepgramUltraszybki TTS

STT (speech-to-text)

DostawcaOpis
DeepgramNajszybszy, najlepsza latencja
Whisper (OpenAI)Najdokładniejszy, więcej języków
GladiaDobry balans szybkości i jakości
Azure SpeechEnterprise, HIPAA-ready

Telephony

DostawcaOpis
TwilioNajpopularniejszy, globalny zasięg
TelnyxKonkurencyjna cena, dobra jakość
BYOCBring Your Own Carrier - podłącz swojego dostawcę

Vapi Evals - testowanie agentów

Vapi Evals to framework do testowania głosowych agentów przed wdrożeniem na produkcję. Pozwala tworzyć symulowane rozmowy i walidować zachowanie agenta.

Trzy metody walidacji

  1. Exact match - Dokładne dopasowanie dla deterministycznych odpowiedzi
  2. Regex patterns - Elastyczne wzorce dla zmiennych formatów
  3. AI judges - Semantyczna ewaluacja przez AI dla złożonych odpowiedzi

Testowanie przez CLI

Code
Bash
vapi listen --forward-to localhost:3000/tools/webhook

Ta komenda uruchamia lokalny serwer, który odbiera eventy webhookowe z Vapi i przekazuje je do twojego serwera deweloperskiego w czasie rzeczywistym.

MCP (Model Context Protocol)

Vapi obsługuje MCP, co pozwala asystentowi dynamicznie korzystać z narzędzi udostępnianych przez serwery MCP podczas rozmowy. Zamiast definiować narzędzia statycznie, agent może odkrywać i wywoływać narzędzia w runtime.

Cennik

Koszt bazowy

ElementKoszt
Platforma Vapi$0.05/min
STT (Deepgram)~$0.01/min
LLM (GPT-4o)~$0.02-$0.20/min
TTS (ElevenLabs)~$0.04/min
Telephony (Twilio)~$0.01/min
Łącznie~$0.13-$0.31/min

Darmowe kredyty

Nowe konto dostaje $5 kredytów, bez podawania karty, przy czym jeden kredyt to jeden dolar. Przy realnym koszcie $0.13-$0.31/min to około 16-38 minut rozmów, a dostawca opisuje ten próg jako ponad 60 minut, licząc po tańszej konfiguracji.

SIP Lines

Plan zużyciowy zawiera 10 jednoczesnych linii SIP. Dodatkowe linie kosztują $10/miesiąc za każdą. W planie kontraktowym liczba linii jest ustalana indywidualnie.

HIPAA Compliance

Zgodność z HIPAA jest dostępna jako add-on za $2,000/miesiąc, a zerowa retencja danych to osobny add-on za $1,000/miesiąc. Warto przy tym wiedzieć, że domyślnie historia rozmów przechowywana jest 14 dni, a historia czatu 30 dni, i dopiero plan kontraktowy pozwala to zmienić.

Porównanie kosztów

PlatformaRealny koszt/minDarmowe kredytyHIPAA
Vapi$0.13-$0.31$5$2,000/mies.
Retell AI$0.07-$0.31$10W cenie
Bland AI$0.09-$0.20TakW cenie

Te przedziały nie są wprost porównywalne, bo każdy dostawca liczy je inaczej. Vapi podaje osobno stawkę za orkiestrację i koszty dostawców przekazywane bez narzutu, a Retell publikuje jeden przedział $0.07-$0.31/min obejmujący już model i syntezę. Górne końce obu przedziałów są więc takie same, a nie dwukrotnie różne, i decyduje o nich wybór modelu oraz głosu, nie sama platforma.

Praktyczne zastosowania

Customer support bot

Code
TypeScript
const assistant = await vapi.assistants.create({
  name: "Support Agent",
  firstMessage: "Hi! Welcome to Acme Support. How can I help you?",
  model: {
    provider: "openai",
    model: "gpt-4o",
    messages: [
      {
        role: "system",
        content: `You are a customer support agent for Acme Corp.
You can check order status, process returns, and answer product questions.
Always be friendly and professional. If you cannot resolve an issue,
offer to transfer to a human agent.`,
      },
    ],
    toolIds: ["order-status-tool", "return-tool", "transfer-tool"],
  },
  voice: {
    provider: "11labs",
    voiceId: "21m00Tcm4TlvDq8ikWAM",
  },
});

Appointment scheduler

Code
TypeScript
const assistant = await vapi.assistants.create({
  name: "Booking Agent",
  firstMessage: "Hello! I can help you schedule an appointment. What day works best for you?",
  model: {
    provider: "openai",
    model: "gpt-4o",
    messages: [
      {
        role: "system",
        content: `You are an appointment scheduling assistant for a dental clinic.
Collect: patient name, preferred date/time, reason for visit.
Check availability using the check_slots tool before confirming.
Always confirm the final booking details before saving.`,
      },
    ],
    toolIds: ["check-slots-tool", "book-appointment-tool"],
  },
  voice: {
    provider: "11labs",
    voiceId: "pNInz6obpgDQGcFmaJgB",
  },
});

Lead qualification

Code
TypeScript
const assistant = await vapi.assistants.create({
  name: "Sales Qualifier",
  firstMessage:
    "Hi! Thanks for your interest in our product. I'd love to learn more about your needs.",
  model: {
    provider: "anthropic",
    model: "claude-sonnet-4-6",
    messages: [
      {
        role: "system",
        content: `You are a sales qualification agent.
Ask about: company size, current solution, budget range, timeline.
Score the lead as hot/warm/cold based on responses.
Save qualification data using the save_lead tool.
If the lead is hot, offer to schedule a demo with a sales rep.`,
      },
    ],
    toolIds: ["save-lead-tool", "schedule-demo-tool"],
  },
  voice: {
    provider: "playht",
    voiceId: "jennifer",
  },
});

Integracja z React

Code
TypeScript
import { useState } from "react";
import Vapi from "@vapi-ai/web";

const vapi = new Vapi("YOUR_PUBLIC_API_KEY");

export function VoiceAssistant() {
  const [isActive, setIsActive] = useState(false);
  const [transcript, setTranscript] = useState<string[]>([]);

  const startCall = async () => {
    setIsActive(true);
    await vapi.start("YOUR_ASSISTANT_ID");
  };

  const endCall = () => {
    vapi.stop();
    setIsActive(false);
  };

  vapi.on("message", (message) => {
    if (message.type === "transcript" && message.transcriptType === "final") {
      setTranscript((prev) => [
        ...prev,
        `${message.role}: ${message.transcript}`,
      ]);
    }
  });

  return (
    <div className="flex flex-col items-center gap-4 p-6">
      <button
        onClick={isActive ? endCall : startCall}
        className={`px-6 py-3 rounded-full font-medium ${
          isActive
            ? "bg-red-500 hover:bg-red-600 text-white"
            : "bg-blue-500 hover:bg-blue-600 text-white"
        }`}
      >
        {isActive ? "End Call" : "Start Call"}
      </button>
      <div className="w-full max-w-md space-y-2">
        {transcript.map((line, i) => (
          <p key={i} className="text-sm text-gray-700 dark:text-gray-300">
            {line}
          </p>
        ))}
      </div>
    </div>
  );
}

Ograniczenia i wyzwania

  1. Złożony cennik - Wielowarstwowa struktura kosztów (platforma + STT + LLM + TTS + telephony) utrudnia budżetowanie
  2. Developer-first - Wymaga umiejętności programistycznych, nie nadaje się dla zespołów bez developerów
  3. Zarządzanie dostawcami - Musisz zarządzać 4-5 oddzielnymi dostawcami z osobnymi rozliczeniami
  4. HIPAA drogi - $2,000/miesiąc za zgodność z HIPAA plus $1,000/miesiąc za zerową retencję danych, podczas gdy konkurencja oferuje zgodność w cenie
  5. Vendor lock-in - Mimo BYO keys, logika orkiestracji jest powiązana z platformą Vapi
  6. Latencja zmienna - ~700ms średnio, ale może rosnąć w zależności od wybranych dostawców

Skąd bierze się realny koszt minuty

To jest najczęstsze rozczarowanie przy tej platformie i warto rozłożyć je na części, zanim ktoś zaplanuje budżet na podstawie liczby ze strony głównej.

Stawka pięciu centów za minutę pokrywa wyłącznie warstwę orkiestracji, czyli pracę tego pośrednika. Wszystko, co faktycznie prowadzi rozmowę, rozlicza się osobno.

Rozpoznawanie mowy naliczane jest za minutę nagrania i idzie do wybranego dostawcy. Model językowy naliczany jest za tokeny, przy czym rozmowa głosowa zużywa ich więcej, niż wynikałoby z długości wypowiedzi, bo do każdej tury dokładany jest cały dotychczasowy przebieg. Synteza mowy naliczana jest za znaki, a głosy dające najlepsze wrażenie są najdroższe. Telefonia to osobna pozycja i przy numerach zagranicznych potrafi zdominować rachunek.

Suma tych składników bywa kilkukrotnie wyższa od stawki bazowej i przy typowej konfiguracji wychodzi kilkanaście do trzydziestu kilku centów za minutę. Rozstrzygające jest to, co wybierzesz w każdej warstwie, a nie sam pośrednik.

Praktyczna rada brzmi tak: policz jedną rozmowę zanim uruchomisz kampanię. Weź nagranie trwające tyle, ile Twoje typowe połączenie, przepuść je przez wybrany zestaw dostawców i zsumuj pozycje. Ta jedna liczba pomnożona przez dzienny wolumen mówi więcej niż jakiekolwiek zestawienie, bo uwzględnia Twoje głosy, Twój model i Twoją długość rozmowy.

Osobno warto policzyć koszt rozmów nieudanych. Połączenie odebrane przez pocztę głosową albo rozłączone po dwóch sekundach też kosztuje, a przy kampaniach wychodzących takich prób bywa więcej niż rozmów właściwych.

Gdzie to pasuje, a gdzie nie

Warto rozstrzygnąć to wcześnie, bo agent głosowy bywa wybierany do zadań, które lepiej obsłuży formularz.

Pasuje tam, gdzie rozmowa jest naturalnym kanałem i już się odbywa: potwierdzanie wizyt, przyjmowanie zgłoszeń, kwalifikacja zapytań, obsługa poza godzinami pracy. W tych przypadkach agent zastępuje czekanie na linii, a nie wygodniejszy interfejs.

Nie pasuje tam, gdzie użytkownik i tak siedzi przed ekranem. Rozmowa jest wolniejsza niż kliknięcie, więc agent głosowy w aplikacji webowej rozwiązuje problem, którego nie ma, chyba że chodzi o dostępność.

Trzeci przypadek jest graniczny: rozmowy wymagające podania danych wrażliwych. Numer karty podyktowany agentowi przechodzi przez rozpoznawanie mowy, model i logi, więc każde z tych miejsc trzeba objąć tym samym reżimem co system płatności. Zwykle prostszym rozwiązaniem jest przekazanie tej części do systemu tonowego albo do człowieka.

Warto też pamiętać o warstwie, którą łatwo pominąć. Agent podłączony do narzędzi wykonuje działania w Twoich systemach na podstawie tego, co usłyszał, a rozpoznanie mowy myli się. Rezerwacja na złą datę wynikająca z przesłyszenia jest realnym scenariuszem, więc operacje nieodwracalne powinny wymagać potwierdzenia powtórzonego przez agenta.

Integracja z resztą stosu

Wywoływanie narzędzi to zwykłe wywołania po stronie Twojego serwera, więc agent wpina się w to, co już masz.

Przy modelach warto pamiętać, że wybór dostawcy to decyzja o opóźnieniu, nie tylko o jakości. Model z OpenAI albo inny szybki wariant daje odpowiedź w czasie, który nie psuje rytmu rozmowy, a model mocniejszy potrafi dołożyć sekundę, która w tekście jest niezauważalna, a w rozmowie brzmi jak zawahanie.

Po stronie głosu decyduje wrażenie. ElevenLabs daje najbardziej naturalne brzmienie i najwyższą stawkę za znak, a tańsze silniki bywają wystarczające przy krótkich, rzeczowych komunikatach. To jest wybór do przetestowania na własnych tekstach, bo różnica słychać najbardziej przy nazwach własnych i liczbach.

Zdarzenia z rozmowy trafiają do Twojego zaplecza przez wywołania zwrotne, więc podłączenie ich do n8n albo podobnego narzędzia pozwala zapisać wynik w systemie zgłoszeń bez pisania osobnej usługi. To sensowna droga przy prostych przepływach i zła przy logice, która musi być niezawodna, bo warstwa automatyzacji dokłada kolejne miejsce awarii.

FAQ

Czy mogę użyć własnych modeli AI?

Tak, Vapi obsługuje BYO (Bring Your Own) keys dla wszystkich komponentów pipeline'u. Możesz użyć dowolnego LLM, TTS i STT. Jeśli twój model jest hostowany u wspieranego dostawcy, wystarczy podać klucz API. Dla custom modeli hostowanych gdzie indziej, użyj Custom LLM URL.

Ile kosztuje minuta rozmowy?

Bazowa opłata Vapi to $0.05/min, ale realny koszt to $0.13-$0.31/min po dodaniu kosztów STT, LLM, TTS i telefonii. Dokładna kwota zależy od wybranych dostawców.

Czy Vapi obsługuje polski?

Tak, Vapi obsługuje ponad 100 języków, w tym polski. Jakość zależy od wybranych dostawców STT i TTS - Whisper (OpenAI) i ElevenLabs oferują dobre wsparcie dla polskiego.

Jak szybko mogę zbudować pierwszego agenta?

Rejestracja zajmuje około 10 minut. Konfiguracja pierwszego agenta kolejne 20-30 minut. W ciągu godziny możesz mieć działającego agenta głosowego, który odbiera telefony i prowadzi naturalne rozmowy.

Czy Vapi jest open source?

Nie, Vapi jest platformą zamkniętą. SDK klienckie (Web, Python) są dostępne na GitHubie, ale sam silnik orkiestracji jest proprietary. Najczęściej wskazywana alternatywa otwarta, Vocode, przestała być rozwijana: ostatnie stabilne wydanie w PyPI pochodzi z czerwca 2024, a ostatni commit w repozytorium z listopada 2024, więc traktuj ją jako punkt wyjścia do własnego rozwidlenia, a nie utrzymywany projekt.

Kiedy wybrać Vapi zamiast Retell AI lub Bland AI?

Wybierz Vapi, gdy potrzebujesz maksymalnej kontroli nad pipeline'em głosowym, chcesz używać custom modeli, budujesz produkt deweloperski lub potrzebujesz Flow Studio do wizualnego projektowania konwersacji. Retell jest lepszy dla prostszych wdrożeń i healthcare, a Bland dla kampanii outbound na dużą skalę.

Podsumowanie

Vapi to najpotężniejsza platforma do budowania głosowych agentów AI, jeśli masz zespół deweloperski i potrzebujesz pełnej kontroli nad każdym elementem pipeline'u. Modułowa architektura BYO keys, Flow Studio, tool calling i wsparcie dla 100+ języków sprawiają, że możesz zbudować dokładnie takiego agenta, jakiego potrzebujesz.

Główne kompromisy to złożony cennik (realnie $0.13-$0.31/min vs prostsze modele konkurencji) i wymóg umiejętności technicznych. Dla zespołów z developerami budujących zaawansowane rozwiązania głosowe - Vapi jest standardem branżowym.

Dokumentacja i opis interfejsu stoją na stronie dla programistów, a warunki planów w cenniku dostawcy.