Розробка голосових та чат-агентів на 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 B Response** — генеративна відповідь через GPT з контекстом ### Інтеграція через Voiceflow Dialog Manager APIpython
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()







