SONA НАЛАШТУВАННЯ Голоси Telegram-бот EN
Довідник SONA

Налаштування

Усе, що потрібно для бота та API: від ключа і вибору голосу до наголосів, субтитрів і завантаження файлу.

Ключ і швидкий старт

Бот і API працюють з одного балансу символів.

Отримати API-ключ

  1. Відкрий @sonapro_bot.
  2. Обери 🔌 APIСтворити ключ.
  3. Додавай sk_user_… у заголовок кожного запиту.
X-API-Key: sk_user_…

Важливо: не вставляй ключ у frontend-код, публічний GitHub або переписку. Створення нового ключа в боті відразу вимикає попередній.

Перша озвучка

Процес асинхронний: створи job_id, перевіряй статус і після done забери аудіо.

API="https://api.sonapro.app"
KEY="sk_user_…"

# 1. Створити задачу
curl -X POST "$API/v1/tts" \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Привіт, світе!","voice":"vc_xxxxxxxxxx","language":"uk","model":"sona-pro"}'

# 2. Перевірити статус
curl "$API/v1/tts/JOB_ID" -H "X-API-Key: $KEY"

# 3. Забрати файл
curl "$API/v1/tts/JOB_ID/audio" -H "X-API-Key: $KEY" -o out.mp3

Ендпоінти

Базова адреса: https://api.sonapro.app.

МетодШляхОпис
POST/v1/ttsСтворити озвучку → job_id
GET/v1/tts/{job_id}Статус задачі
GET/v1/tts/{job_id}/audioЗавантажити аудіо
GET/v1/tts/{job_id}/linkКоротке публічне посилання
GET/v1/tts/{job_id}/subtitles?format=srt|vtt|ass|json|zipСубтитри; потрібно subtitles:true
GET/v1/voices?language=uk&collection=sona_v1Каталог; collection: library або sona_v1
POST/v1/voices/cloneКлонувати голос → tmpl:N
GET/POST/v1/voices/templatesСписок або створення шаблону
PATCH/DEL/v1/voices/templates/{num}Змінити або видалити шаблон
GET/v1/emotionsАктуальний список емоцій
GET/POST/v1/pronunciationСписок або збереження правила вимови
DEL/v1/pronunciation/{term}Видалити правило
GET/v1/meАкаунт, тариф і баланс
POST/v1/imagesЗгенерувати зображення
POST/v1/images/editЗгенерувати з фото-референсом
GET/v1/images/{image_id}/fileЗавантажити PNG/JPEG

Голоси й шаблони

Параметри зберігаються для кожного шаблону окремо.

Формати ID і тариф

vc_…Бібліотечний голос1 кредит / символ
sona_…SONA Voice v11,5 кредита / символ
tmpl:NОсобистий шаблон/клон1,5 кредита / символ

Щоб побудувати окремий список наших голосів, запитай GET /v1/voices?collection=sona_v1. У загальному каталозі кожен елемент має поле collection: sona_v1 або library. Фільтри поєднуються, наприклад ?collection=sona_v1&language=uk.

Один голос — різні шаблони

Шаблон зберігає власні speed, volume і emotion. Тому один голос може мати «Нейтральний», «Злий» і «Спокійний» варіанти. Бот запитує ці поля під час створення; у картці шаблону їх можна змінити.

POST /v1/voices/templates
{
  "engine": "sona",
  "voice": "sona_xxxxxxxxxxxx",
  "name": "Taras · angry",
  "speed": 1.05,
  "volume": 1.0,
  "emotion": "angry"
}

# Змінити пресет пізніше
PATCH /v1/voices/templates/7
{"emotion":"neutral","speed":1.0}

Якщо під час генерації передати параметр явно, він перекриє значення шаблону лише для цієї озвучки.

Клонування

POST /v1/voices/clone — multipart з полями clip, name, language і необов’язковими speed, volume, emotion. Рекомендований зразок — 3–10 секунд чистої мови без фонової музики.

Параметри озвучення

Поля POST /v1/tts. Зірочкою позначені обов’язкові.

ПолеТип / межіОпис
text *stringТекст для озвучення
voice *vc_…, sona_…, tmpl:NГолос або шаблон
languageauto, uk, en, plauto бере мову голосу; явний код дозволяє іншу мову
modelsona-fast / sona-pro / sona-hdМодель синтезу
formatmp3Формат файлу
bitrate32000–192000Бітрейт MP3; типово 96000
sample_rate8000–48000Частота дискретизації; типово 44100
speed0.6–1.5Швидкість SONA/клону
volume0.5–2.0Гучність SONA/клону
emotionstringОдна вокальна манера на весь запит
auto_stressbool, типово trueВелика голосна всередині кириличного слова → U+0301
subtitlesboolSRT/VTT/ASS і JSON-таймкоди
namestringНазва файлу без розширення

Емоція шаблону і емоція запиту

Якщо використовуєш tmpl:N без emotion, SONA бере збережену емоцію шаблону. Якщо передати emotion:"angry" в цьому запиті, вона перекриє preset лише один раз.

Наголоси, вимова й емоції

Клон передає тембр, а читає текст модель. Тому наголос і вимова налаштовуються через текст.

Три рівні роботи з наголосом

РівеньПрикладКоли застосовувати
1. Знак U+0301за́мок / замо́кПерша підказка для неоднозначного слова
2. Велика голосназАмок / замОкЛише зручний запис: SONA перетворить його на той самий U+0301
3. Фонетична замінаТарас → та-РАСТільки якщо модель проігнорувала обидві підказки і заміну перевірено на слух

U+0301 і велика літера — не два різні методи. Велика голосна всередині кириличного слова лише конвертується в U+0301. Якщо модель ігнорує знак, вона може ігнорувати обидва варіанти.

Персональний словник SONA: як він працює з кирилицею

Це не готовий орфоепічний словник усієї мови й не автоматичний пошук наголосів. Це список власних винятків акаунта: перед озвученням SONA знаходить term у тексті й буквально підставляє replacement. Ідентифікатор словника в POST /v1/tts передавати не потрібно — збережені правила застосовуються автоматично.

ВластивістьПоведінка SONA
КирилицяПідтримується і в term, і в replacement. Фонетичну підказку можна записати звичайними українськими/російськими літерами.
РегістрТарас знаходить Тарас, тарас і ТАРАС.
МежіЗбіг лише за цілим словом або цілою фразою. Правило Тарас не змінює Тараса чи Тарасові.
ВідмінкиКожну потрібну словоформу зберігай окремо: Тараса → та-РА-са, Тарасові → та-РА-со-ві. Це приклади формату — кожну заміну перевір на слух.
Область діїПравила належать акаунту, а не одному голосу: вони діють у боті та API для всіх його голосів і шаблонів.
ПорядокДовші фрази застосовуються раніше за коротші слова. Ліміт — 50 правил; term до 60, replacement до 160 символів.

Для слова зі словника пиши в сценарії звичайне написання. Не додавай одночасно U+0301 або велику голосну: словник застосовується після нормалізації наголосу, тому змінене написання вже не дорівнюватиме збереженому term. Після підміни саме фінальний текст іде в озвучення, субтитри та підрахунок символів.

# додати або оновити одне правило
curl -X POST https://api.sonapro.app/v1/pronunciation \
  -H "X-API-Key: $SONA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"term":"Тарас","replacement":"та-РАС"}'

# окремі правила для відмінюваних форм
curl -X POST https://api.sonapro.app/v1/pronunciation \
  -H "X-API-Key: $SONA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"term":"Тараса","replacement":"та-РА-са"}'

# переглянути всі правила акаунта
curl https://api.sonapro.app/v1/pronunciation \
  -H "X-API-Key: $SONA_API_KEY"

# видалити правило; кирилицю в URL треба percent-encode
curl -X DELETE https://api.sonapro.app/v1/pronunciation/%D0%A2%D0%B0%D1%80%D0%B0%D1%81 \
  -H "X-API-Key: $SONA_API_KEY"

Коли використовувати: для імен, брендів, абревіатур і термінів, які стабільно читаються неправильно. Якщо проблема лише в наголосі й U+0301 спрацьовує, словник не потрібен. Фонетична підміна — sounds-like підказка, а не гарантія, тому тестуй короткою озвучкою на потрібній мові.

Перевірене правило: Тарас

Для українського голосу Taras модель читала ТАрас і ігнорувала знак наголосу. Прослухана заміна та-РАС дала правильне ТарАс.

curl -X POST https://api.sonapro.app/v1/pronunciation \
  -H "X-API-Key: $SONA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"term":"Тарас","replacement":"та-РАС"}'

Правило діє лише на ціле слово, незалежно від регістру, і автоматично застосовується до всіх озвучок цього API-акаунта. Не розбивай весь текст на склади і не вигадуй IPA: кожну фонетичну заміну спочатку треба прослухати.

Промпт для Claude / ChatGPT

Встав промпт перед сценарієм. AI проаналізує весь текст, а не лише слово «Тарас», і поверне готовий варіант для SONA.

Ти — редактор тексту для озвучення SONA.

Проаналізуй увесь текст у контексті та підготуй його до природної машинної озвучки.

Правила:
1. Не змінюй зміст, стиль, факти та мову.
2. Збережи природну пунктуацію і абзаци — вони керують паузами.
3. Знайди слова, які TTS може прочитати неправильно. Особливо перевір:
   - імена та прізвища;
   - географічні назви;
   - бренди, назви продуктів і компаній;
   - абревіатури;
   - іншомовні вставки й запозичення;
   - рідкісні терміни та омографи.
4. Якщо неоднозначний лише наголос, постав U+0301 після наголошеної голосної:
   за́мок / замо́к, му́ка / мука́.
5. Якщо знака наголосу може бути недостатньо і правильна вимова тобі достовірно
   відома, перепиши ЛИШЕ проблемне слово фонетично:
   - розділи його на зручні для читання частини дефісами;
   - наголошений склад напиши ВЕЛИКИМИ літерами;
   - збережи відмінкове закінчення конкретної форми слова.
6. Не обмежуйся словом «Тарас». Самостійно знаходь інші проблемні слова за
   контекстом, але не вигадуй вимову, якщо не впевнений.
7. Орієнтири формату:
   - Тарас → та-РАС
   - OpenAI → оупен-ей-АЙ
   - ChatGPT → чат-джі-пі-ТІ
   - Renault → ре-НО
8. Не розбивай звичайні слова на склади, не вставляй IPA і не переписуй увесь текст
   фонетично. Уже наявні теги <emotion value="..."/> збережи без змін.
9. Поверни лише готовий текст для озвучення без пояснень, списків і коментарів.

Мій текст:
"""
[ВСТАВ ТЕКСТ]
"""

Емоції в тексті

emotion задає одну манеру на всю озвучку. Інлайн-теги — beta-спосіб змінити її всередині тексту.

<emotion value="excited"/> Не повіриш, що я дізнався!
<emotion value="sad"/> Але потім усе пішло не так…
<emotion value="determined"/> І все ж ми не здамося.
Повний список · 58 емоцій

neutral, happy, excited, enthusiastic, elated, euphoric, triumphant, amazed, surprised, flirtatious, curious, content, peaceful, serene, calm, grateful, affectionate, trust, sympathetic, anticipation, mysterious, angry, mad, outraged, frustrated, agitated, threatened, disgusted, contempt, envious, sarcastic, ironic, sad, dejected, melancholic, disappointed, hurt, guilty, bored, tired, rejected, nostalgic, wistful, apologetic, hesitant, insecure, confused, resigned, anxious, panicked, alarmed, scared, proud, confident, distant, skeptical, contemplative, determined

Генерація зображень

Генерація з тексту та з фото-референсом.

POST /v1/imagesJSON: prompt, model, size, qualityimage_id
POST /v1/images/editmultipart: prompt, model і 1–3 файли image
GET /v1/images/{image_id}Статус задачі
GET /v1/images/{image_id}/fileЗавантажити файл
GET /v1/images?limit=20Історія акаунта

Приклад

curl -X POST https://api.sonapro.app/v1/images \
  -H "X-API-Key: $SONA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Cinematic portrait in soft blue light","model":"sona-image","size":"1024x1024"}'

Результат і помилки

Статуси задачі, файли, субтитри і HTTP-коди.

Життєвий цикл

queuedprocessingdone

Також можливі error і canceled. Аудіо зберігається обмежений час; після видалення endpoint поверне 410.

Субтитри

Передай subtitles:true під час створення. Потім забери srt, vtt, ass, json або zip; ZIP містить аудіо і всі формати разом.

HTTP-коди

400Некоректний формат запиту
401Відсутній або невірний API-ключ
402Недостатньо кредитів
404Ресурс не знайдено
410Файл уже видалено за строком зберігання
422Невірне поле, ID голосу або межа параметра
429Забагато запитів або активних задач
503Сервіс/голос тимчасово недоступний; враховуй Retry-After