Text-to-speech (TTS)
Mayros dapat mengonversi balasan keluar menjadi audio menggunakan ElevenLabs, OpenAI, atau Edge TTS. Ini berfungsi di mana pun Mayros dapat mengirim audio; Telegram mendapatkan bubble voice-note bulat.
Layanan yang didukung
- ElevenLabs (provider utama atau fallback)
- OpenAI (provider utama atau fallback; juga digunakan untuk ringkasan)
- Edge TTS (provider utama atau fallback; menggunakan
node-edge-tts, default ketika tidak ada API key)
Catatan Edge TTS
Edge TTS menggunakan layanan TTS neural online Microsoft Edge melalui library node-edge-tts. Ini adalah layanan yang dihosting (bukan lokal), menggunakan endpoint Microsoft, dan tidak memerlukan API key. node-edge-tts mengekspos opsi konfigurasi ucapan dan format output, tetapi tidak semua opsi didukung oleh layanan Edge.
Karena Edge TTS adalah layanan web publik tanpa SLA atau kuota yang dipublikasikan, perlakukan ini sebagai best-effort. Jika Anda memerlukan batas dan dukungan yang terjamin, gunakan OpenAI atau ElevenLabs. REST API Speech Microsoft mendokumentasikan batas audio 10 menit per permintaan; Edge TTS tidak mempublikasikan batas, jadi asumsikan batas yang sama atau lebih rendah.
Key opsional
Jika Anda ingin OpenAI atau ElevenLabs:
ELEVENLABS_API_KEY(atauXI_API_KEY)OPENAI_API_KEY
Edge TTS tidak memerlukan API key. Jika tidak ada API key yang ditemukan, Mayros default
ke Edge TTS (kecuali dinonaktifkan melalui messages.tts.edge.enabled=false).
Jika beberapa provider dikonfigurasi, provider yang dipilih digunakan terlebih dahulu dan yang lain adalah opsi fallback.
Ringkasan otomatis menggunakan summaryModel yang dikonfigurasi (atau agents.defaults.model.primary),
jadi provider itu juga harus diautentikasi jika Anda mengaktifkan ringkasan.
Link layanan
- Panduan OpenAI Text-to-Speech
- Referensi API Audio OpenAI
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- node-edge-tts
- Format output Microsoft Speech
Apakah diaktifkan secara default?
Tidak. Auto-TTS off secara default. Aktifkan di konfigurasi dengan
messages.tts.auto atau per sesi dengan /tts always (alias: /tts on).
Edge TTS diaktifkan secara default setelah TTS on, dan digunakan secara otomatis ketika tidak ada API key OpenAI atau ElevenLabs yang tersedia.
Konfigurasi
Konfigurasi TTS berada di bawah messages.tts di mayros.json.
Skema lengkap ada di Konfigurasi Gateway.
Konfigurasi minimal (aktifkan + provider)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
OpenAI utama dengan fallback ElevenLabs
json5{ messages: { tts: { auto: "always", provider: "openai", summaryModel: "openai/gpt-4.1-mini", modelOverrides: { enabled: true, }, openai: { apiKey: "openai_api_key", model: "gpt-4o-mini-tts", voice: "alloy", }, elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", voiceId: "voice_id", modelId: "eleven_multilingual_v2", seed: 42, applyTextNormalization: "auto", languageCode: "en", voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0, }, }, }, }, }
Edge TTS utama (tanpa API key)
json5{ messages: { tts: { auto: "always", provider: "edge", edge: { enabled: true, voice: "en-US-MichelleNeural", lang: "en-US", outputFormat: "audio-24khz-48kbitrate-mono-mp3", rate: "+10%", pitch: "-5%", }, }, }, }
Nonaktifkan Edge TTS
json5{ messages: { tts: { edge: { enabled: false, }, }, }, }
Batas kustom + path preferensi
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
Hanya balas dengan audio setelah voice note masuk
json5{ messages: { tts: { auto: "inbound", }, }, }
Nonaktifkan ringkasan otomatis untuk balasan panjang
json5{ messages: { tts: { auto: "always", }, }, }
Kemudian jalankan:
/tts summary off
Catatan tentang field
auto: mode auto-TTS (off,always,inbound,tagged).inboundhanya mengirim audio setelah voice note masuk.taggedhanya mengirim audio ketika balasan menyertakan tag[[tts]].
enabled: toggle warisan (doctor memigrasikan ini keauto).mode:"final"(default) atau"all"(termasuk balasan tool/blok).provider:"elevenlabs","openai", atau"edge"(fallback otomatis).- Jika
providertidak diset, Mayros lebih sukaopenai(jika key), laluelevenlabs(jika key), jika tidakedge. summaryModel: model murah opsional untuk ringkasan otomatis; default keagents.defaults.model.primary.- Menerima
provider/modelatau alias model yang dikonfigurasi.
- Menerima
modelOverrides: izinkan model mengeluarkan direktif TTS (on secara default).allowProviderdefault kefalse(peralihan provider adalah opt-in).
maxTextLength: batas keras untuk input TTS (karakter)./tts audiogagal jika terlampaui.timeoutMs: timeout permintaan (ms).prefsPath: ganti path JSON preferensi lokal (provider/limit/summary).- Nilai
apiKeyfallback ke var env (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY). elevenlabs.baseUrl: ganti base URL API ElevenLabs.elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normal)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: ISO 639-1 2 huruf (misalnyaen,de)elevenlabs.seed: integer0..4294967295(determinisme best-effort)edge.enabled: izinkan penggunaan Edge TTS (defaulttrue; tidak ada API key).edge.voice: nama voice neural Edge (misalnyaen-US-MichelleNeural).edge.lang: kode bahasa (misalnyaen-US).edge.outputFormat: format output Edge (misalnyaaudio-24khz-48kbitrate-mono-mp3).- Lihat format output Microsoft Speech untuk nilai yang valid; tidak semua format didukung oleh Edge.
edge.rate/edge.pitch/edge.volume: string persen (misalnya+10%,-5%).edge.saveSubtitles: tulis subtitle JSON di samping file audio.edge.proxy: URL proxy untuk permintaan Edge TTS.edge.timeoutMs: override timeout permintaan (ms).
Override yang didorong model (default on)
Secara default, model dapat mengeluarkan direktif TTS untuk satu balasan.
Ketika messages.tts.auto adalah tagged, direktif ini diperlukan untuk memicu audio.
Ketika diaktifkan, model dapat mengeluarkan direktif [[tts:...]] untuk mengganti voice
untuk satu balasan, plus blok [[tts:text]]...[[/tts:text]] opsional untuk
menyediakan tag ekspresif (tawa, isyarat menyanyi, dll.) yang hanya muncul di
audio.
Direktif provider=... diabaikan kecuali modelOverrides.allowProvider: true.
Contoh payload balasan:
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
Key direktif yang tersedia (ketika diaktifkan):
provider(openai|elevenlabs|edge, memerlukanallowProvider: true)voice(voice OpenAI) atauvoiceId(ElevenLabs)model(model TTS OpenAI atau id model ElevenLabs)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Nonaktifkan semua override model:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
Allowlist opsional (aktifkan peralihan provider sambil menjaga tombol lain dapat dikonfigurasi):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
Preferensi per-pengguna
Slash command menulis override lokal ke prefsPath (default:
~/.mayros/settings/tts.json, ganti dengan MAYROS_TTS_PREFS atau
messages.tts.prefsPath).
Field yang disimpan:
enabledprovidermaxLength(threshold ringkasan; default 1500 karakter)summarize(defaulttrue)
Ini mengganti messages.tts.* untuk host itu.
Format output (tetap)
- Telegram: Voice note Opus (
opus_48000_64dari ElevenLabs,opusdari OpenAI).- 48kHz / 64kbps adalah tradeoff voice-note yang baik dan diperlukan untuk bubble bulat.
- Channel lain: MP3 (
mp3_44100_128dari ElevenLabs,mp3dari OpenAI).- 44.1kHz / 128kbps adalah keseimbangan default untuk kejelasan ucapan.
- Edge TTS: menggunakan
edge.outputFormat(defaultaudio-24khz-48kbitrate-mono-mp3).node-edge-ttsmenerimaoutputFormat, tetapi tidak semua format tersedia dari layanan Edge.- Nilai format output mengikuti format output Microsoft Speech (termasuk Ogg/WebM Opus).
sendVoiceTelegram menerima OGG/MP3/M4A; gunakan OpenAI/ElevenLabs jika Anda memerlukan voice note Opus yang terjamin.- Jika format output Edge yang dikonfigurasi gagal, Mayros mencoba ulang dengan MP3.
Format OpenAI/ElevenLabs tetap; Telegram mengharapkan Opus untuk UX voice-note.
Perilaku auto-TTS
Ketika diaktifkan, Mayros:
- melewati TTS jika balasan sudah berisi media atau direktif
MEDIA:. - melewati balasan yang sangat pendek (< 10 karakter).
- meringkas balasan panjang ketika diaktifkan menggunakan
agents.defaults.model.primary(atausummaryModel). - melampirkan audio yang dihasilkan ke balasan.
Jika balasan melebihi maxLength dan ringkasan off (atau tidak ada API key untuk
model ringkasan), audio
dilewati dan balasan teks normal dikirim.
Diagram alur
Reply -> TTS enabled?
no -> send text
yes -> has media / MEDIA: / short?
yes -> send text
no -> length > limit?
no -> TTS -> attach audio
yes -> summary enabled?
no -> send text
yes -> summarize (summaryModel or agents.defaults.model.primary)
-> TTS -> attach audio
Penggunaan slash command
Ada satu command: /tts.
Lihat Slash command untuk detail pengaktifan.
Catatan Discord: /tts adalah command Discord bawaan, jadi Mayros mendaftarkan
/voice sebagai command native di sana. Teks /tts ... masih berfungsi.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from Mayros
Catatan:
- Command memerlukan pengirim yang diotorisasi (aturan allowlist/owner masih berlaku).
commands.textatau pendaftaran command native harus diaktifkan.off|always|inbound|taggedadalah toggle per-sesi (/tts onadalah alias untuk/tts always).limitdansummarydisimpan di preferensi lokal, bukan konfigurasi utama./tts audiomenghasilkan balasan audio satu kali (tidak mengaktifkan TTS).
Tool agen
Tool tts mengonversi teks ke ucapan dan mengembalikan path MEDIA:. Ketika
hasilnya kompatibel dengan Telegram, tool menyertakan [[audio_as_voice]] sehingga
Telegram mengirim bubble voice.
RPC Gateway
Metode gateway:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers