Интеграция Vonage (Nexmo) для голосового AI
Vonage Voice API (бывший Nexmo) — альтернатива Twilio с WebSocket API для Real-Time аудио. Сильные стороны: поддержка SIP, хорошее покрытие европейских номеров, конкурентные тарифы на исходящие звонки.
Архитектура интеграции
Vonage использует NCCO (Nexmo Call Control Objects) — JSON-управление звонком:
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/answer")
async def answer_call(uuid: str, conversation_uuid: str):
"""NCCO для входящего звонка"""
return JSONResponse([
{
"action": "talk",
"text": "Здравствуйте! Я голосовой ассистент.",
"language": "ru-RU",
"style": 4
},
{
"action": "connect",
"endpoint": [{
"type": "websocket",
"uri": f"wss://api.yourapp.com/voice-stream/{uuid}",
"content-type": "audio/l16;rate=16000",
"headers": {"call_id": uuid}
}]
}
])
@app.post("/events")
async def call_events(request: Request):
data = await request.json()
status = data.get("status")
if status in ["completed", "failed"]:
await cleanup_session(data.get("uuid"))
return JSONResponse({"status": "ok"})
WebSocket обработчик
from fastapi import WebSocket
@app.websocket("/voice-stream/{call_id}")
async def voice_stream(websocket: WebSocket, call_id: str):
await websocket.accept()
session = VoiceSession(call_id)
try:
async for message in websocket.iter_bytes():
# Vonage отправляет PCM 16-bit 16kHz
pcm_audio = message
# Обрабатываем аудио через наш AI pipeline
response_text = await process_audio(pcm_audio, session)
if response_text:
audio_response = await synthesize(response_text)
await websocket.send_bytes(audio_response)
except Exception as e:
logger.error(f"WebSocket error: {e}")
finally:
await session.finalize()
Отправка событий и управление звонком
import vonage
client = vonage.Client(key=VONAGE_KEY, secret=VONAGE_SECRET)
voice = vonage.Voice(client)
def transfer_to_agent(call_uuid: str, agent_number: str):
"""Перевод на оператора"""
voice.update_call(call_uuid, {
"action": "transfer",
"destination": {
"type": "ncco",
"ncco": [{
"action": "connect",
"endpoint": [{"type": "phone", "number": agent_number}]
}]
}
})
Стоимость: входящий ~€0.0061/мин, исходящий зависит от страны назначения.
Сроки: базовая интеграция — 1–2 недели. Full production — 1.5–2 месяца.







