הערה: כאשר לקוח מבקש סוכן קולי שלא נתקע בהפסקות ולא ממתין שלוש שניות לפני תגובה, פתרונות IVR סטנדרטיים אינם באים בחשבון. נתקלנו בכך בפרויקט עבור חברת פינטק: הם נדרשו לטפל ב-500+ שיחות בשעה עם זמן השהיה מינימלי ויכולת הפרעה. Retell AI התברר כפלטפורמה היחידה שבה זמן ההשהיה נשאר מתחת ל-800 אלפיות השנייה גם עם לוגיקת LLM מותאמת אישית. יישמנו אותו במפתח מלא: הגדרנו סטרימינג של WebSocket, דיאלוגים עם מצב (stateful), ואינטגרציה עם CRM. להלן הפרטים על איך זה עובד ואילו בעיות זה פותר.
בעיות שאנו פותרים
פיתוח סוכנים קוליים ברמת production אינו רק על ASR ו-TTS. האתגרים הטכניים העיקריים:
- זמן השהיה גבוה: פתרונות מוכנים כמו VAPI או Play.ht מספקים 1.5–3 שניות, מה שהורג המרות. Retell עם סטרימינג של WebSocket נשאר בטווח של 500–800 אלפיות השנייה, ועם כוונון buffer סטרימינג, אפילו מהיר יותר.
- ניהול מצב דיאלוג: תרחישים רב-שלביים (הסמכת לידים, הזמנת פגישות, תשלום) דורשים אחסון הקשר. Retell מאפשר לשמור סשנים עם מצב (stateful) על השרת שלך במקום להעביר את כל ההיסטוריה עם כל בקשה.
- הפרעות וערוצי תגובה (backchannels): בשיחה אמיתית, המשתמש עשוי להפריע לסוכן. Retell תומך ברגישות להפרעות ובערוצי תגובה אוטומטיים ("אה-הא", "כן") — המדמים אינטראקציה חיה.
- אינטגרציה עם CRM ואנליטיקה: ללא webhooks ו-REST API, הסוכן עיוור. אנו מחברים כל מערכת (Bitrix24, AmoCRM, Salesforce) ואוספים אנליטיקת שיחות מלאה.
הפחתת עלויות לעיבוד שיחות היא 35-50% בהשוואה למוקד טלפוני מסורתי, כפי שמאושר בפרויקטים שלנו.
כיצד אנו משיגים זמן השהיה נמוך
המרכיב המרכזי הוא WebSocket דו-כיווני בין התשתית של Retell לשרת ה-LLM שלנו. בניגוד למתחרים, שבהם הבקשה עוברת דרך מתווך, Retell מעביר קול ישירות, עם תמלול טקסט שזורם בזמן אמת. לפי תיעוד Retell AI, זמן ההשהיה הוא 500-800 אלפיות השנייה. להלן דוגמה לשרת Python מותאם אישית שמעבד דיאלוג דרך OpenAI gpt-4o:
import asyncio
import json
import websockets
from typing import AsyncGenerator
class RetellAgentServer:
""" Кастомный LLM сервер для Retell AI.
Retell подключается по WebSocket и ожидает streaming ответы.
"""
def __init__(self, openai_client, system_prompt: str):
self.openai = openai_client
self.system_prompt = system_prompt
async def handle_connection(self, websocket, path):
"""Обработка WebSocket сессии от Retell"""
async for message in websocket:
data = json.loads(message)
if data.get("interaction_type") == "call_details":
# Начало звонка — получаем метаданные
call_info = data.get("call", {})
print(f"New call: {call_info.get('call_id')}")
continue
if data.get("interaction_type") in ("response_required", "reminder_required"):
# Пользователь что-то сказал или наступил таймаут
transcript = data.get("transcript", [])
# Генерируем ответ через OpenAI streaming
async for chunk in self._generate_response(transcript):
response_message = {
"response_id": data.get("response_id"),
"content": chunk,
"content_complete": False,
"end_call": False,
}
await websocket.send(json.dumps(response_message))
# Финальный чанк
await websocket.send(json.dumps({
"response_id": data.get("response_id"),
"content": "",
"content_complete": True,
"end_call": False,
}))
async def _generate_response(self, transcript: list) -> AsyncGenerator[str, None]:
"""Стриминг ответа через OpenAI"""
messages = [{"role": "system", "content": self.system_prompt}]
for turn in transcript:
role = "assistant" if turn["role"] == "agent" else "user"
messages.append({"role": role, "content": turn["content"]})
stream = await self.openai.chat.completions.create(
model="gpt-4o",
messages=messages,
stream=True,
temperature=0.7,
)
async for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
yield delta
class RetellAPIClient:
"""Управление агентами через Retell REST API"""
def __init__(self, api_key: str):
import requests
self.api_key = api_key
self.base_url = "https://api.retellai.com"
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
})
def create_agent(self, agent_name: str, llm_websocket_url: str, voice_id: str = "11labs-Adrian", language: str = "russian") -> dict:
"""
Создание агента с кастомным LLM бэкендом.
llm_websocket_url: ваш сервер для обработки диалога
"""
payload = {
"agent_name": agent_name,
"llm_websocket_url": llm_websocket_url,
"voice_id": voice_id,
"language": language,
"response_engine": {
"type": "retell-llm", # Или "custom-llm"
},
"responsiveness": 1.0, # 0-1, насколько быстро реагирует
"interruption_sensitivity": 1.0,
"enable_backchannel": True, # "угу", "да" во время пауз
"backchannel_frequency": 0.9,
"end_call_after_silence_ms": 600000,
"max_call_duration_ms": 3600000,
}
return self.session.post(
f"{self.base_url}/create-agent",
json=payload
).json()
def create_phone_call(self, from_number: str, to_number: str, agent_id: str, retell_llm_dynamic_variables: dict = None) -> dict:
"""Инициирование исходящего звонка"""
payload = {
"from_number": from_number,
"to_number": to_number,
"agent_id": agent_id,
}
if retell_llm_dynamic_variables:
payload["retell_llm_dynamic_variables"] = retell_llm_dynamic_variables
return self.session.post(
f"{self.base_url}/create-phone-call",
json=payload
).json()
השוואה עם חלופות
השווה עם Twilio Autopilot או Dialogflow CX טיפוסיים: יש להם זמן השהיה של 1.5–3 שניות, ללא הפרעה מובנית, דיאלוגים עם מצב בנויים דרך הקשר — איטיים ומוגבלים. Retell AI מספק רווח של פי 3–5 במהירות התגובה ופי 10 בגמישות התרחישים. לדוגמה, בפרויקט לוגיסטיקה, פרסנו סוכן שבודק סטטוס הזמנה דרך API בזמן אמת — זמן התגובה לשאילתת לקוח ירד מ-4 שניות ל-700 אלפיות השנייה.
כיצד פועל ניהול ההפרעות
מנגנון רגישות ההפרעות ב-Retell ניתן להגדרה מ-0 עד 1. בערך 1.0, הסוכן מפסיק לדבר מיידית ברגע שהמשתמש מתחיל לדבר. זה קריטי לתרחישים שבהם הלקוח רוצה לתקן תשובה או לשאול שאלת הבהרה. בפרויקטים שלנו, אנו מגדירים בנוסף ערוצי תגובה — "אה-הא" ו"כן" קצרים במהלך הפסקות — כדי לגרום לדיאלוג להישמע טבעי. ללא זה, הסוכן נראה כמו רובוט שמחכה לשקט מוחלט לפני תגובה.
מהו דיאלוג עם מצב (Stateful) ב-Retell?
זוהי היכולת לאחסן היסטוריית שיחה על השרת שלך במקום להעביר את כל ההקשר עם כל בקשה ל-LLM. לדוגמה, בתרחיש הסמכת לידים, הסוכן יכול לזכור שהלקוח כבר ציין את התקציב ואת לוח הזמנים, ולא לשאול שוב. להלן יישום פשוט של מנהל מצב:
class ConversationStateManager:
"""Управление состоянием разговора для Retell"""
def __init__(self, call_id: str, customer_id: str):
self.call_id = call_id
self.customer_id = customer_id
self.state = "greeting"
self.collected_data = {}
self.escalation_triggers = ["оператор", "жалоба", "претензия", "руководитель"]
def should_escalate(self, user_message: str) -> bool:
"""Определяем нужна ли передача живому оператору"""
msg_lower = user_message.lower()
return any(trigger in msg_lower for trigger in self.escalation_triggers)
def get_context_prompt(self) -> str:
"""Динамический промпт на основе текущего состояния"""
base = f"Текущий шаг: {self.state}. Уже собрано: {self.collected_data}."
if self.state == "qualification":
base += " Узнай: есть ли бюджет, сроки принятия решения, лицо принимающее решение."
elif self.state == "scheduling":
base += " Предложи 3 слота для встречи на следующей неделе."
return base
דוגמה להגדרת סוכן לטיפול בהזמנות
מקרה: עבור חנות מסחר אלקטרוני, הגדרנו סוכן שבודק סטטוס הזמנה דרך API, מבהיר כתובת משלוח, ומציע מוצרים משלימים. השתמשנו במודל GPT-4o עם prompt מותאם אישית ומכונת מצבים עם 10 מצבים. החיסכון בעלויות תפעול הסתכם ב-40%.כיצד אנו מיישמים את Retell AI: שלב אחר שלב
- אנליטיקה ועיצוב: ניתוח תרחישים, כתיבת עצי החלטה, זיהוי נקודות הסלמה.
- הקמת תשתית: פריסת שרת WebSocket, חיבור המודל (GPT-4o, Claude, YaGPT), הגדרת MLOps (MLflow, Weights & Biases).
- פיתוח לוגיקה: כתיבת מכונות מצבים, אינטגרציות CRM, prompts דינמיים.
- בדיקות: סימולציית שיחות, מדידת זמן השהיה, בדיקות A/B לתגובות.
- פריסה וניטור: עלייה ל-production, הגדרת התראות לזמן השהיה p99 ומגבלות קצב.
מה כלול בעבודה
- תיעוד: דיאגרמת ארכיטקטורה, תיאורי webhook, מדריך תחזוקת סוכן.
- אינטגרציה: חיבור CRM, מאגרי ידע, APIs חיצוניים דרך webhooks ו-REST.
- הדרכה: העברת סקריפטים ונהלים לתמיכת סוכן.
- תמיכה: אחריות ל-30 יום לאחר היישום, ולאחר מכן SLA.
הפלטפורמה אידיאלית לתרחישים מורכבים: הסמכת לידים עם ניקוד דינמי, הזמנת פגישות עם אינטגרציית יומן, טיפול בהזמנות עם בדיקת סטטוס דרך API. אב טיפוס — 3-4 ימים, production עם אינטגרציות — 4-6 שבועות.
מדדי Retell AI
| פרמטר | ערך |
|---|---|
| זמן השהיה מקצה לקצה | 500-800 אלפיות השנייה |
| שיחות במקביל | ניתן להרחבה אופקית |
| חיבור מחדש של WebSocket | אוטומטי |
| אירועי Webhook | call_started, call_ended, call_analyzed |
| TTS ברוסית (ElevenLabs) | איכות טובה |
השוואה עם חלופות
| קריטריון | Retell AI | Twilio Autopilot/ Dialogflow CX |
|---|---|---|
| זמן השהיה (p99) | <1.2 שניות | 2-4 שניות |
| תמיכה בהפרעות | מובנית (רגישות להפרעות) | אין |
| שרת LLM מותאם אישית | סטרימינג WebSocket | REST עם pipelines |
| דיאלוגים עם מצב | על השרת שלך | דרך הקשר (מוגבל) |
| ערוצי תגובה | ניתנים להגדרה | לא קיימים |
הזמינו אינטגרציה של Retell AI לתשתית שלכם. קבלו ייעוץ על הפרויקט שלכם — נעריך כדאיות ולוחות זמנים. צרו קשר לדיון מפורט בפרויקט שלכם. אנו מבטיחים שהסוכן המיושם יפעל עם זמן השהיה < 1 שנייה ויטפל בעד 1000 שיחות במקביל.







