Разработка голосовых и чат-агентов на Voiceflow
Voiceflow — визуальная платформа для создания conversational AI агентов, работающих как в голосовом, так и в текстовом режиме. Ключевое преимущество: один и тот же диалоговый флоу разворачивается на телефонии (Twilio), веб-чате, мессенджерах и голосовых ассистентах (Alexa, Google Assistant) без дублирования логики.
Архитектура мультиканального агента
Voiceflow Canvas (визуальный редактор)
↓
Agent Runtime
/ | \
Voice Chat API
(Twilio) (Web) (Custom)
Типы блоков в Voiceflow:
- Speak / Text — ответ агента
- Choice — кнопки или ключевые фразы для выбора
- Capture — захват пользовательского ввода (entity extraction)
- API Block — HTTP-запрос к внешнему сервису
- Code Block — JavaScript-логика для сложных вычислений
- AI Response — генеративный ответ через GPT с контекстом
Интеграция через Voiceflow Dialog Manager API
import requests
class VoiceflowDMClient:
"""Взаимодействие с агентом через Dialog Manager API"""
def __init__(self, api_key: str, version_id: str):
self.api_key = api_key
self.version_id = version_id
self.base_url = "https://general-runtime.voiceflow.com"
self.headers = {
"Authorization": api_key,
"versionID": version_id,
"Content-Type": "application/json"
}
def send_message(self, user_id: str,
message: str,
variables: dict = None) -> list[dict]:
"""
Отправка сообщения и получение ответов агента.
user_id: уникальный идентификатор сессии/пользователя
Returns: список ответных трейсов (текст, кнопки, аудио)
"""
payload = {
"action": {
"type": "text",
"payload": message
},
"config": {
"tts": False,
"stripSSML": True
}
}
if variables:
payload["variables"] = variables
response = requests.post(
f"{self.base_url}/state/user/{user_id}/interact",
json=payload,
headers=self.headers
)
traces = response.json()
# Парсим ответы
responses = []
for trace in traces:
if trace["type"] == "text":
responses.append({
"type": "text",
"content": trace["payload"]["message"]
})
elif trace["type"] == "choice":
responses.append({
"type": "buttons",
"buttons": [b["name"] for b in trace["payload"]["buttons"]]
})
elif trace["type"] == "end":
responses.append({"type": "end"})
return responses
def launch_session(self, user_id: str,
variables: dict = None) -> list[dict]:
"""Запуск новой сессии (начало диалога)"""
payload = {"action": {"type": "launch"}}
if variables:
payload["variables"] = variables
response = requests.post(
f"{self.base_url}/state/user/{user_id}/interact",
json=payload,
headers=self.headers
)
return response.json()
Voiceflow оптимален для команд, которые хотят единую базу диалогов для разных каналов. Особенно эффективен для customer support агентов с базой знаний: Knowledge Base блок подключает векторный поиск по документам прямо в canvas. Разработка типового support-агента: 1-2 недели, мультиканальный агент с интеграциями — 3-4 недели.







