Үргэлж үнэгүй.

API гарын авлага

Стриминг ба WebSocket

Бага хоцрогдолтой яриа үүсгэх, шууд бичвэр, дуут агенттай ярих.

Яриа стримлэх (NDJSON)#

POST /tts/stream өгүүлбэр бүрийг бэлэн болмогц илгээнэ. Мөр бүр нэг үйл явдал:

ТөрөлТалбарууд
startgenerationId, sentences, sampleRate, variant
chunkindex, variant, text, audio (base64 PCM16 mono, sampleRate-аар), durationMs, processingMs
skippedindex, variant, text, reason: уншиж чадаагүй өгүүлбэр
donegenerationId, variant, audioUrl (бүтэн WAV), durationMs, processingMs
errorcode, message

variants (1–3) нь нэг текстийн өөр өөр хувилбар үүсгэнэ; үйл явдал бүр variant дугаартай. Бичвэр бүр 5000 тэмдэгт хүртэл.

Мөр бүрийг ирмэгц уншиж, өгүүлбэр бүрийг бэлэн болмогц тоглуулна:

# -N: буфергүй тул мөр бүр ирмэгц хэвлэгдэнэ; jq аудиог нууж үйл явдлыг харуулнаcurl -N https://voxy.mn/v1/tts/stream \  -H "Authorization: Bearer $VOXY_API_KEY" \  -H "Content-Type: application/json" \  -d '{"text":"Сайн байна уу?","voiceId":"VOICE_ID"}' \  | jq -c 'del(.audio)'

WebSocket нэвтрэлт#

Сервер талын клиент upgrade хүсэлтэд Authorization: Bearer … толгой илгээнэ. Хөтөч WebSocket-д толгой нэмж чаддаггүй тул таны сервер POST /realtime/tickets-ийг дуудаж нэг удаагийн тасалбар авна (60 секунд хүчинтэй), хөтөч ?ticket=… параметртэй холбогдоно.

// 1. Таны сервер (түлхүүр зөвхөн энд): нэг удаагийн тасалбар олгоноapp.post("/voice-ticket", async (req, res) => {  const r = await fetch("https://voxy.mn/v1/realtime/tickets", {    method: "POST",    headers: { Authorization: `Bearer ${process.env.VOXY_API_KEY}` },  });  res.status(r.status).json(await r.json()); // { ticket, expiresIn }});// 2. Хөтөч: тасалбар авч 60 секундын дотор холбогдоноconst { ticket } = await fetch("/voice-ticket", { method: "POST" }).then((r) => r.json());const ws = new WebSocket(`wss://voxy.mn/v1/stt/live?source=live&ticket=${ticket}`);ws.onopen = () => ws.send(JSON.stringify({ type: "config", language: "mn", partials: true }));ws.onmessage = (e) => console.log(JSON.parse(e.data)); // ready, partial, utterance…

Тасалбарыг серверээс

Хөтөч зөвхөн тасалбарыг харна, түлхүүрийг хэзээ ч үгүй. Тасалбар бүрийг нэг удаа, нэг холболтод ашиглана.

Шууд бичвэр#

GET /stt/live (WebSocket, хүрээ stt). ?source=dictation нь «Яриагаар бичих»-ийн хязгаарт тооцогдоно. Эхний текст фрейм заавал тохиргоо байна, дараа нь тоон аудио илгээнэ.

Клиент → сервер
{"type":"config","language":"mn","partials":true,"lookahead":"la0","save":true}<бинари PCM16 16 kHz mono фрейм, тус бүр ~100 ms>{"type":"flush"}   // одоогийн өгүүлбэрийг дуусгах{"type":"close"}   // сессийг хаах
Сервер → клиент
{"type":"ready","sessionId":"…","model":"…","sampleRate":16000}{"type":"partial","utteranceId":"u1","seq":3,"text":"сайн бай"}{"type":"utterance","utteranceId":"u1","seq":4,"start":0.42,"end":1.9,"text":"Сайн байна уу.","words":[…]}{"type":"end","sessionId":"…","totalUtterances":12,"totalAudioSeconds":63.2,"reason":"…"}{"type":"saved","transcriptId":"tr_…"}   // зөвхөн "save": true үед{"type":"error","code":"…","detail":"…","fatal":false}

Аудиог заавал PCM16, 16 kHz, mono-гоор илгээнэ. lookahead: la0 хамгийн хурдан, la3 арай удаан ч илүү нарийвчлалтай. save: true бол холболт дуусахад бичвэр хадгалагдана. Нэг холболт 2 цаг хүртэл аудио бичнэ. Хэрэглээг холболт хаагдахад секундээр тооцно.

Дуут агенттай ярих#

GET /agents/{id}/talk?conversationId=… (WebSocket, хүрээ agents). conversationId-гүй бол шинэ яриа эхэлнэ. Хэрэглэгчийн дуу PCM16 16 kHz mono, агентын дуу PCM16 (audio_start-д заасан давтамжаар), ~100 ms фреймээр ирнэ.

Клиент → сервер
{"type":"start","sampleRate":16000}   // 0 = зөвхөн текст, микрофонгүй<бинари PCM16 16 kHz mono>{"type":"text","text":"Маргааш цаг агаар ямар байх вэ?"}{"type":"flush"}       // хэрэглэгчийн ээлж дууслаа (дарж ярих){"type":"interrupt"}   // агентыг ярихыг нь зогсоох{"type":"stop"}
Сервер → клиент
{"type":"ready","conversationId":"conv_…","sampleRate":24000}{"type":"partial","text":"маргааш цаг"}{"type":"user","text":"Маргааш цаг агаар ямар байх вэ?","messageId":"msg_…"}{"type":"agent_delta","text":"Маргааш ","messageId":"msg_…"}{"type":"audio_start","messageId":"msg_…","sentence":0,"sampleRate":24000}<бинари PCM16 фреймүүд>{"type":"agent_done","text":"…","messageId":"msg_…","timings":{"sttMs":180,"llmFirstTokenMs":240,"ttsFirstAudioMs":310}}{"type":"interrupted"}{"type":"error","code":"…","detail":"…"}

Хэлний дүрэм

Тайлбар нь монгол хэлээр. Код, талбарын нэр, API-н алдааны мессеж англи хэлээр, яг API-д байгаагаар.