Tools
การแปลงข้อความเป็นเสียงพูด
OpenClaw สามารถแปลงการตอบกลับขาออกเป็นเสียงผ่านผู้ให้บริการเสียงพูด 14 ราย และส่งข้อความเสียงแบบเนทีฟบน Feishu, Matrix, Telegram และ WhatsApp, ไฟล์แนบเสียงในช่องทางอื่นทั้งหมด และสตรีม PCM/Ulaw สำหรับโทรศัพท์และ Talk
TTS คือครึ่งหนึ่งของโหมด stt-tts ของ Talk ที่ใช้ส่งออกเสียง เซสชัน Talk แบบ
realtime ที่เป็นเนทีฟของผู้ให้บริการจะสังเคราะห์เสียงภายในผู้ให้บริการ realtime
แทนการเรียกเส้นทาง TTS นี้ ส่วนเซสชัน transcription จะไม่สังเคราะห์
เสียงตอบกลับของผู้ช่วย
เริ่มต้นอย่างรวดเร็ว
เลือกผู้ให้บริการ
OpenAI และ ElevenLabs เป็นตัวเลือกแบบโฮสต์ที่เชื่อถือได้มากที่สุด Microsoft และ Local CLI ใช้งานได้โดยไม่ต้องมีคีย์ API ดูตารางผู้ให้บริการ สำหรับรายการทั้งหมด
ตั้งค่าคีย์ API
ส่งออกตัวแปรสภาพแวดล้อมสำหรับผู้ให้บริการของคุณ (เช่น OPENAI_API_KEY,
ELEVENLABS_API_KEY) Microsoft และ Local CLI ไม่ต้องใช้คีย์
เปิดใช้ในการกำหนดค่า
ตั้งค่า messages.tts.auto: "always" และ messages.tts.provider:
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
},
},
}
ลองใช้ในแชต
/tts status แสดงสถานะปัจจุบัน /tts audio Hello from OpenClaw
ส่งการตอบกลับเสียงแบบครั้งเดียว
ผู้ให้บริการที่รองรับ
| ผู้ให้บริการ | การยืนยันตัวตน | หมายเหตุ |
|---|---|---|
| Azure Speech | AZURE_SPEECH_KEY + AZURE_SPEECH_REGION (รวมถึง AZURE_SPEECH_API_KEY, SPEECH_KEY, SPEECH_REGION) |
เอาต์พุตบันทึกเสียง Ogg/Opus แบบเนทีฟและโทรศัพท์ |
| DeepInfra | DEEPINFRA_API_KEY |
TTS ที่เข้ากันได้กับ OpenAI ค่าเริ่มต้นคือ hexgrad/Kokoro-82M |
| ElevenLabs | ELEVENLABS_API_KEY หรือ XI_API_KEY |
การโคลนเสียง หลายภาษา และกำหนดผลลัพธ์ซ้ำได้ผ่าน seed |
| Google Gemini | GEMINI_API_KEY หรือ GOOGLE_API_KEY |
Gemini API TTS; รับรู้บุคลิกผ่าน promptTemplate: "audio-profile-v1" |
| Gradium | GRADIUM_API_KEY |
เอาต์พุตบันทึกเสียงและโทรศัพท์ |
| Inworld | INWORLD_API_KEY |
API TTS แบบสตรีม บันทึกเสียง Opus แบบเนทีฟและโทรศัพท์ PCM |
| Local CLI | ไม่มี | เรียกใช้คำสั่ง TTS ภายในเครื่องที่กำหนดค่าไว้ |
| Microsoft | ไม่มี | Edge neural TTS สาธารณะผ่าน node-edge-tts แบบพยายามให้ดีที่สุด ไม่มี SLA |
| MiniMax | MINIMAX_API_KEY (หรือ Token Plan: MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY, MINIMAX_CODING_API_KEY) |
T2A v2 API ค่าเริ่มต้นคือ speech-2.8-hd |
| OpenAI | OPENAI_API_KEY |
ใช้สำหรับสรุปอัตโนมัติด้วย; รองรับบุคลิก instructions |
| OpenRouter | OPENROUTER_API_KEY (สามารถใช้ models.providers.openrouter.apiKey ซ้ำได้) |
โมเดลเริ่มต้น hexgrad/kokoro-82m |
| Volcengine | VOLCENGINE_TTS_API_KEY หรือ BYTEPLUS_SEED_SPEECH_API_KEY (AppID/token เดิม: VOLCENGINE_TTS_APPID/_TOKEN) |
BytePlus Seed Speech HTTP API |
| Vydra | VYDRA_API_KEY |
ผู้ให้บริการรูปภาพ วิดีโอ และเสียงพูดร่วมกัน |
| xAI | XAI_API_KEY |
xAI batch TTS ไม่รองรับบันทึกเสียง Opus แบบเนทีฟไม่รองรับ |
| Xiaomi MiMo | XIAOMI_API_KEY |
MiMo TTS ผ่านการตอบกลับแชตของ Xiaomi |
หากกำหนดค่าผู้ให้บริการหลายราย ระบบจะใช้รายที่เลือกก่อน และรายอื่นจะเป็นตัวเลือกสำรอง
สรุปอัตโนมัติใช้ summaryModel (หรือ
agents.defaults.model.primary) ดังนั้นผู้ให้บริการนั้นต้องยืนยันตัวตนไว้ด้วย
หากคุณยังเปิดใช้สรุปอยู่
การกำหนดค่า
การกำหนดค่า TTS อยู่ใต้ messages.tts ใน ~/.openclaw/openclaw.json เลือก
พรีเซ็ตและปรับบล็อกผู้ให้บริการ:
Azure Speech
{
messages: {
tts: {
auto: "always",
provider: "azure-speech",
providers: {
"azure-speech": {
apiKey: "${AZURE_SPEECH_KEY}",
region: "eastus",
voice: "en-US-JennyNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
voiceNoteOutputFormat: "ogg-24khz-16bit-mono-opus",
},
},
},
},
}
ElevenLabs
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
providers: {
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
model: "eleven_multilingual_v2",
voiceId: "EXAVITQu4vr4xnSDxMaL",
},
},
},
},
}
Google Gemini
{
messages: {
tts: {
auto: "always",
provider: "google",
providers: {
google: {
apiKey: "${GEMINI_API_KEY}",
model: "gemini-3.1-flash-tts-preview",
voiceName: "Kore",
// Optional natural-language style prompts:
// audioProfile: "Speak in a calm, podcast-host tone.",
// speakerName: "Alex",
},
},
},
},
}
Gradium
{
messages: {
tts: {
auto: "always",
provider: "gradium",
providers: {
gradium: {
apiKey: "${GRADIUM_API_KEY}",
voiceId: "YTpq7expH9539ERJ",
},
},
},
},
}
Inworld
{
messages: {
tts: {
auto: "always",
provider: "inworld",
providers: {
inworld: {
apiKey: "${INWORLD_API_KEY}",
modelId: "inworld-tts-1.5-max",
voiceId: "Sarah",
temperature: 0.7,
},
},
},
},
}
Local CLI
{
messages: {
tts: {
auto: "always",
provider: "tts-local-cli",
providers: {
"tts-local-cli": {
command: "say",
args: ["-o", "{{OutputPath}}", "{{Text}}"],
outputFormat: "wav",
timeoutMs: 120000,
},
},
},
},
}
Microsoft (ไม่ต้องใช้คีย์)
{
messages: {
tts: {
auto: "always",
provider: "microsoft",
providers: {
microsoft: {
enabled: true,
voice: "en-US-MichelleNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
rate: "+0%",
pitch: "+0%",
},
},
},
},
}
MiniMax
{
messages: {
tts: {
auto: "always",
provider: "minimax",
providers: {
minimax: {
apiKey: "${MINIMAX_API_KEY}",
model: "speech-2.8-hd",
voiceId: "English_expressive_narrator",
speed: 1.0,
vol: 1.0,
pitch: 0,
},
},
},
},
}
OpenAI + ElevenLabs
{
messages: {
tts: {
auto: "always",
provider: "openai",
summaryModel: "openai/gpt-4.1-mini",
modelOverrides: { enabled: true },
providers: {
openai: {
apiKey: "${OPENAI_API_KEY}",
model: "gpt-4o-mini-tts",
voice: "alloy",
},
elevenlabs: {
apiKey: "${ELEVENLABS_API_KEY}",
model: "eleven_multilingual_v2",
voiceId: "EXAVITQu4vr4xnSDxMaL",
voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0 },
applyTextNormalization: "auto",
languageCode: "en",
},
},
},
},
}
OpenRouter
{
messages: {
tts: {
auto: "always",
provider: "openrouter",
providers: {
openrouter: {
apiKey: "${OPENROUTER_API_KEY}",
model: "hexgrad/kokoro-82m",
voice: "af_alloy",
responseFormat: "mp3",
},
},
},
},
}
Volcengine
{
messages: {
tts: {
auto: "always",
provider: "volcengine",
providers: {
volcengine: {
apiKey: "${VOLCENGINE_TTS_API_KEY}",
resourceId: "seed-tts-1.0",
voice: "en_female_anna_mars_bigtts",
},
},
},
},
}
xAI
{
messages: {
tts: {
auto: "always",
provider: "xai",
providers: {
xai: {
apiKey: "${XAI_API_KEY}",
voiceId: "eve",
language: "en",
responseFormat: "mp3",
},
},
},
},
}
Xiaomi MiMo
{
messages: {
tts: {
auto: "always",
provider: "xiaomi",
providers: {
xiaomi: {
apiKey: "${XIAOMI_API_KEY}",
model: "mimo-v2.5-tts",
voice: "mimo_default",
format: "mp3",
},
},
},
},
}
การแทนที่เสียงราย agent
ใช้ agents.list[].tts เมื่อ agent หนึ่งควรพูดด้วยผู้ให้บริการ
เสียง โมเดล บุคลิก หรือโหมด Auto-TTS ที่ต่างออกไป บล็อก agent จะ deep-merge ทับ
messages.tts ดังนั้นข้อมูลรับรองของผู้ให้บริการสามารถอยู่ในการกำหนดค่าผู้ให้บริการส่วนกลางได้:
{
messages: {
tts: {
auto: "always",
provider: "elevenlabs",
providers: {
elevenlabs: { apiKey: "${ELEVENLABS_API_KEY}", model: "eleven_multilingual_v2" },
},
},
},
agents: {
list: [
{
id: "reader",
tts: {
providers: {
elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
},
},
},
],
},
}
หากต้องการตรึงบุคลิกแบบราย agent ให้ตั้งค่า agents.list[].tts.persona ควบคู่กับการกำหนดค่า
ผู้ให้บริการ โดยค่านี้จะแทนที่ messages.tts.persona ส่วนกลางสำหรับ agent นั้นเท่านั้น
ลำดับความสำคัญสำหรับการตอบกลับอัตโนมัติ, /tts audio, /tts status และเครื่องมือเอเจนต์
tts:
messages.ttsagents.list[].ttsที่ใช้งานอยู่- การ override ระดับแชนเนล เมื่อแชนเนลรองรับ
channels.<channel>.tts - การ override ระดับบัญชี เมื่อแชนเนลส่งผ่าน
channels.<channel>.accounts.<id>.tts - ค่ากำหนด
/ttsภายในสำหรับโฮสต์นี้ - directive แบบอินไลน์
[[tts:...]]เมื่อเปิดใช้ model overrides
การ override ระดับแชนเนลและบัญชีใช้รูปแบบเดียวกับ messages.tts และ
deep-merge ทับเลเยอร์ก่อนหน้า ดังนั้น credential ของ provider ที่ใช้ร่วมกันจึงยังอยู่ใน
messages.tts ได้ ขณะที่แชนเนลหรือบัญชีบอทเปลี่ยนเฉพาะเสียง, โมเดล, persona,
หรือโหมดอัตโนมัติ:
{
messages: {
tts: {
provider: "openai",
providers: {
openai: { apiKey: "${OPENAI_API_KEY}", model: "gpt-4o-mini-tts" },
},
},
},
channels: {
feishu: {
accounts: {
english: {
tts: {
providers: {
openai: { voice: "shimmer" },
},
},
},
},
},
},
}
Persona
persona คืออัตลักษณ์การพูดที่คงที่ ซึ่งสามารถนำไปใช้แบบกำหนดผลได้แน่นอน ข้าม provider ต่าง ๆ โดยสามารถเลือกใช้ provider หนึ่งเป็นหลัก กำหนดเจตนาของ prompt ที่ไม่ผูกกับ provider และพก binding เฉพาะ provider สำหรับเสียง, โมเดล, เทมเพลต prompt, seed และการตั้งค่าเสียงได้
Persona ขั้นต่ำ
{
messages: {
tts: {
auto: "always",
persona: "narrator",
personas: {
narrator: {
label: "Narrator",
provider: "elevenlabs",
providers: {
elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL", modelId: "eleven_multilingual_v2" },
},
},
},
},
},
}
Persona แบบเต็ม (prompt ที่ไม่ผูกกับ provider)
{
messages: {
tts: {
auto: "always",
persona: "alfred",
personas: {
alfred: {
label: "Alfred",
description: "Dry, warm British butler narrator.",
provider: "google",
fallbackPolicy: "preserve-persona",
prompt: {
profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",
scene: "A quiet late-night study. Close-mic narration for a trusted operator.",
sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",
style: "Refined, understated, lightly amused.",
accent: "British English.",
pacing: "Measured, with short dramatic pauses.",
constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],
},
providers: {
google: {
model: "gemini-3.1-flash-tts-preview",
voiceName: "Algieba",
promptTemplate: "audio-profile-v1",
},
openai: { model: "gpt-4o-mini-tts", voice: "cedar" },
elevenlabs: {
voiceId: "voice_id",
modelId: "eleven_multilingual_v2",
seed: 42,
voiceSettings: {
stability: 0.65,
similarityBoost: 0.8,
style: 0.25,
useSpeakerBoost: true,
speed: 0.95,
},
},
},
},
},
},
},
}
การ resolve persona
persona ที่ใช้งานอยู่จะถูกเลือกแบบกำหนดผลได้แน่นอน:
- ค่ากำหนดภายใน
/tts persona <id>หากตั้งค่าไว้ messages.tts.personaหากตั้งค่าไว้- ไม่มี persona
การเลือก provider ใช้ลำดับแบบ explicit-first:
- การ override โดยตรง (CLI, Gateway, Talk, directive TTS ที่อนุญาต)
- ค่ากำหนดภายใน
/tts provider <id> providerของ persona ที่ใช้งานอยู่messages.tts.provider- เลือกอัตโนมัติจาก registry
สำหรับแต่ละครั้งที่พยายามใช้ provider OpenClaw จะ merge config ตามลำดับนี้:
messages.tts.providers.<id>messages.tts.personas.<persona>.providers.<id>- การ override จากคำขอที่เชื่อถือได้
- การ override จาก directive TTS ที่โมเดลปล่อยออกมาและได้รับอนุญาต
วิธีที่ provider ใช้ prompt ของ persona
ฟิลด์ prompt ของ persona (profile, scene, sampleContext, style, accent,
pacing, constraints) เป็นแบบ ไม่ผูกกับ provider provider แต่ละตัวจะตัดสินใจเองว่า
จะใช้อย่างไร:
Google Gemini
ห่อฟิลด์ prompt ของ persona ในโครงสร้าง prompt ของ Gemini TTS เฉพาะเมื่อ
config ของ Google provider ที่มีผลตั้งค่า promptTemplate: "audio-profile-v1"
หรือ personaPrompt เท่านั้น ฟิลด์รุ่นเก่าอย่าง audioProfile และ speakerName
จะยังถูกเติมนำหน้าเป็นข้อความ prompt เฉพาะของ Google แท็กเสียงแบบอินไลน์ เช่น
[whispers] หรือ [laughs] ภายในบล็อก [[tts:text]] จะถูกคงไว้
ภายใน transcript ของ Gemini; OpenClaw จะไม่สร้างแท็กเหล่านี้
OpenAI
แมปฟิลด์ prompt ของ persona ไปยังฟิลด์ instructions ของคำขอ เฉพาะเมื่อ
ไม่มีการกำหนด instructions ของ OpenAI อย่างชัดเจน instructions ที่กำหนดชัดเจน
จะมีสิทธิ์เหนือกว่าเสมอ
Provider อื่น ๆ
ใช้เฉพาะ binding persona เฉพาะ provider ภายใต้
personas.<id>.providers.<provider> ฟิลด์ prompt ของ persona จะถูกละเว้น
เว้นแต่ provider จะ implement การแมป persona-prompt ของตัวเอง
นโยบาย fallback
fallbackPolicy ควบคุมพฤติกรรมเมื่อ persona ไม่มี binding สำหรับ
provider ที่พยายามใช้:
| นโยบาย | พฤติกรรม |
|---|---|
preserve-persona |
ค่าเริ่มต้น ฟิลด์ prompt ที่ไม่ผูกกับ provider ยังคงพร้อมใช้งาน; provider อาจใช้หรือเพิกเฉยได้ |
provider-defaults |
persona จะถูกละเว้นจากการเตรียม prompt สำหรับความพยายามครั้งนั้น; provider ใช้ค่าเริ่มต้นแบบกลางของตัวเอง ขณะที่ยัง fallback ไปยัง provider อื่นต่อไป |
fail |
ข้ามความพยายามใช้ provider นั้นด้วย reasonCode: "not_configured" และ personaBinding: "missing" ยังมีการลอง fallback provider ต่อไป |
คำขอ TTS ทั้งหมดจะล้มเหลวก็ต่อเมื่อ provider ที่พยายามใช้ ทุกตัว ถูกข้าม หรือล้มเหลว
การเลือก provider ของเซสชัน Talk อยู่ในขอบเขตของเซสชัน ไคลเอนต์ Talk ควรเลือก
provider ids, model ids, voice ids และ locale จาก talk.catalog แล้วส่งต่อ
ผ่านเซสชัน Talk หรือคำขอ handoff การเปิดเซสชันเสียงไม่ควร mutate messages.tts
หรือค่าเริ่มต้นของ provider Talk แบบ global
Directive ที่ขับเคลื่อนด้วยโมเดล
โดยค่าเริ่มต้น ผู้ช่วย สามารถ ปล่อย directive [[tts:...]] เพื่อ override
เสียง, โมเดล หรือความเร็วสำหรับการตอบกลับครั้งเดียว พร้อมบล็อก
[[tts:text]]...[[/tts:text]] แบบไม่บังคับสำหรับ cue เชิง expressive ที่ควรปรากฏ
เฉพาะในเสียง:
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
เมื่อ messages.tts.auto เป็น "tagged" จะ ต้องมี directive เพื่อ trigger
เสียง การส่งบล็อกแบบ streaming จะตัด directive ออกจากข้อความที่มองเห็นได้ก่อนที่
แชนเนลจะเห็น แม้จะถูกแบ่งข้ามบล็อกที่อยู่ติดกันก็ตาม
provider=... จะถูกละเว้น เว้นแต่ modelOverrides.allowProvider: true เมื่อ
การตอบกลับประกาศ provider=... คีย์อื่นใน directive นั้นจะถูก parse
โดย provider นั้นเท่านั้น; คีย์ที่ไม่รองรับจะถูกตัดออกและรายงานเป็นคำเตือนของ
directive TTS
คีย์ directive ที่ใช้ได้:
provider(registered provider id; requiresallowProvider: true)voice/voiceName/voice_name/google_voice/voiceIdmodel/google_modelstability,similarityBoost,style,speed,useSpeakerBoostvol/volume(MiniMax volume, 0–10)pitch(MiniMax integer pitch, −12 to 12; fractional values are truncated)emotion(Volcengine emotion tag)applyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
ปิดใช้งาน model overrides ทั้งหมด:
{ messages: { tts: { modelOverrides: { enabled: false } } } }
อนุญาตให้สลับ provider ได้ ขณะยังคงปรับ knob อื่น ๆ ได้:
{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false } } } }
คำสั่ง Slash
คำสั่งเดียว /tts บน Discord OpenClaw จะลงทะเบียน /voice เพิ่มด้วย เพราะ
/tts เป็นคำสั่ง built-in ของ Discord — ข้อความ /tts ... ยังใช้งานได้
/tts off | on | status
/tts chat on | off | default
/tts latest
/tts provider <id>
/tts persona <id> | off
/tts limit <chars>
/tts summary off
/tts audio <text>
หมายเหตุพฤติกรรม:
/tts onเขียนค่ากำหนด TTS ภายในเป็นalways;/tts offเขียนเป็นoff/tts chat on|off|defaultเขียนการ override auto-TTS ในขอบเขตเซสชันสำหรับแชตปัจจุบัน/tts persona <id>เขียนค่ากำหนด persona ภายใน;/tts persona offจะล้างค่านั้น/tts latestอ่านการตอบกลับล่าสุดของผู้ช่วยจาก transcript ของเซสชันปัจจุบัน แล้วส่งเป็นเสียงหนึ่งครั้ง โดยจะเก็บเฉพาะ hash ของการตอบกลับนั้นในรายการเซสชันเพื่อป้องกันการส่งเสียงซ้ำ/tts audioสร้างการตอบกลับเสียงแบบครั้งเดียว (ไม่ เปิด TTS)limitและsummaryถูกจัดเก็บใน local prefs ไม่ใช่ config หลัก/tts statusรวมการวินิจฉัย fallback สำหรับความพยายามล่าสุด —Fallback: <primary> -> <used>,Attempts: ...และรายละเอียดรายครั้ง (provider:outcome(reasonCode) latency)/statusแสดงโหมด TTS ที่ใช้งานอยู่ พร้อม provider, โมเดล, เสียง และ metadata ของ endpoint แบบกำหนดเองที่ผ่านการ sanitize แล้วเมื่อเปิดใช้ TTS
ค่ากำหนดรายผู้ใช้
คำสั่ง Slash เขียนการ override ภายในลงใน prefsPath ค่าเริ่มต้นคือ
~/.openclaw/settings/tts.json; override ได้ด้วย env var OPENCLAW_TTS_PREFS
หรือ messages.tts.prefsPath
| ฟิลด์ที่จัดเก็บ | ผลลัพธ์ |
|---|---|
auto |
การ override auto-TTS ภายใน (always, off, …) |
provider |
การ override provider หลักภายใน |
persona |
การ override persona ภายใน |
maxLength |
threshold สำหรับสรุป (ค่าเริ่มต้น 1500 chars) |
summarize |
สวิตช์สรุป (ค่าเริ่มต้น true) |
ค่าเหล่านี้ override config ที่มีผลจาก messages.tts พร้อมบล็อก
agents.list[].tts ที่ใช้งานอยู่สำหรับโฮสต์นั้น
รูปแบบเอาต์พุต (คงที่)
การส่งเสียง TTS ขับเคลื่อนด้วยความสามารถของแชนเนล Plugin ของแชนเนลจะประกาศว่า
TTS แบบ voice-style ควรขอ provider ให้สร้างเป้าหมาย native voice-note หรือ
คงการสังเคราะห์แบบ audio-file ปกติไว้ และเพียง mark เอาต์พุตที่เข้ากันได้สำหรับ
การส่งเสียง
- ช่องทางที่รองรับข้อความเสียง: การตอบกลับแบบข้อความเสียงจะเลือกใช้ Opus เป็นหลัก (
opus_48000_64จาก ElevenLabs,opusจาก OpenAI)- 48kHz / 64kbps เป็นสมดุลที่ดีสำหรับข้อความเสียง
- Feishu / WhatsApp: เมื่อการตอบกลับแบบข้อความเสียงถูกสร้างเป็น MP3/WebM/WAV/M4A
หรือไฟล์อื่นที่น่าจะเป็นไฟล์เสียง Plugin ช่องทางจะแปลงรหัสเป็น Ogg/Opus 48kHz
ด้วย
ffmpegก่อนส่งข้อความเสียงแบบเนทีฟ WhatsApp ส่ง ผลลัพธ์ผ่านเพย์โหลดaudioของ Baileys พร้อมptt: trueและaudio/ogg; codecs=opusหากการแปลงล้มเหลว Feishu จะได้รับไฟล์ต้นฉบับ เป็นไฟล์แนบ ส่วนการส่งของ WhatsApp จะล้มเหลวแทนที่จะโพสต์เพย์โหลด PTT ที่ไม่เข้ากัน - BlueBubbles: คงการสังเคราะห์ของผู้ให้บริการไว้บนเส้นทางไฟล์เสียงปกติ; เอาต์พุต MP3 และ CAF จะถูกทำเครื่องหมายสำหรับการส่งเป็นวอยซ์เมโมของ iMessage
- ช่องทางอื่น: MP3 (
mp3_44100_128จาก ElevenLabs,mp3จาก OpenAI)- 44.1kHz / 128kbps เป็นสมดุลเริ่มต้นสำหรับความชัดเจนของเสียงพูด
- MiniMax: MP3 (โมเดล
speech-2.8-hd, อัตราสุ่มตัวอย่าง 32kHz) สำหรับไฟล์แนบเสียงปกติ สำหรับเป้าหมายข้อความเสียงที่ช่องทางประกาศไว้ OpenClaw จะแปลงรหัส MiniMax MP3 เป็น Opus 48kHz ด้วยffmpegก่อนส่ง เมื่อช่องทางประกาศว่ารองรับการแปลงรหัส - Xiaomi MiMo: ค่าเริ่มต้นเป็น MP3 หรือ WAV เมื่อกำหนดค่าไว้ สำหรับเป้าหมายข้อความเสียงที่ช่องทางประกาศไว้ OpenClaw จะแปลงรหัสเอาต์พุต Xiaomi เป็น Opus 48kHz ด้วย
ffmpegก่อนส่ง เมื่อช่องทางประกาศว่ารองรับการแปลงรหัส - Local CLI: ใช้
outputFormatที่กำหนดค่าไว้ เป้าหมายข้อความเสียงจะถูก แปลงเป็น Ogg/Opus และเอาต์พุตโทรศัพท์จะถูกแปลงเป็น PCM โมโน 16 kHz แบบดิบ ด้วยffmpeg - Google Gemini: Gemini API TTS ส่งคืน PCM 24kHz แบบดิบ OpenClaw ห่อหุ้มเป็น WAV สำหรับไฟล์แนบเสียง แปลงรหัสเป็น Opus 48kHz สำหรับเป้าหมายข้อความเสียง และส่งคืน PCM โดยตรงสำหรับ Talk/โทรศัพท์
- Gradium: WAV สำหรับไฟล์แนบเสียง, Opus สำหรับเป้าหมายข้อความเสียง และ
ulaw_8000ที่ 8 kHz สำหรับโทรศัพท์ - Inworld: MP3 สำหรับไฟล์แนบเสียงปกติ,
OGG_OPUSแบบเนทีฟสำหรับเป้าหมายข้อความเสียง และPCMแบบดิบที่ 22050 Hz สำหรับ Talk/โทรศัพท์ - xAI: ค่าเริ่มต้นเป็น MP3;
responseFormatอาจเป็นmp3,wav,pcm,mulawหรือalawOpenClaw ใช้ปลายทาง TTS แบบ batch REST ของ xAI และส่งคืนไฟล์แนบเสียงที่สมบูรณ์; เส้นทางผู้ให้บริการนี้ไม่ได้ใช้ TTS WebSocket แบบสตรีมของ xAI เส้นทางนี้ไม่รองรับรูปแบบข้อความเสียง Opus แบบเนทีฟ - Microsoft: ใช้
microsoft.outputFormat(ค่าเริ่มต้นaudio-24khz-48kbitrate-mono-mp3)- ทรานสปอร์ตที่บันเดิลมารองรับ
outputFormatแต่บริการไม่ได้มีครบทุกฟอร์แมต - ค่าเอาต์พุตฟอร์แมตเป็นไปตามฟอร์แมตเอาต์พุตของ Microsoft Speech (รวมถึง Ogg/WebM Opus)
- Telegram
sendVoiceรองรับ OGG/MP3/M4A; ใช้ OpenAI/ElevenLabs หากคุณต้องการ ข้อความเสียง Opus ที่รับประกันได้ - หากฟอร์แมตเอาต์พุต Microsoft ที่กำหนดค่าไว้ล้มเหลว OpenClaw จะลองใหม่ด้วย MP3
- ทรานสปอร์ตที่บันเดิลมารองรับ
ฟอร์แมตเอาต์พุตของ OpenAI/ElevenLabs ถูกกำหนดไว้ตายตัวตามช่องทาง (ดูด้านบน)
พฤติกรรม Auto-TTS
เมื่อเปิดใช้ messages.tts.auto OpenClaw จะ:
- ข้าม TTS หากการตอบกลับมีสื่ออยู่แล้วหรือมีคำสั่ง
MEDIA: - ข้ามการตอบกลับที่สั้นมาก (ต่ำกว่า 10 อักขระ)
- สรุปการตอบกลับที่ยาวเมื่อเปิดใช้การสรุป โดยใช้
summaryModel(หรือagents.defaults.model.primary) - แนบเสียงที่สร้างขึ้นไปกับการตอบกลับ
- ใน
mode: "final"ยังคงส่ง TTS แบบเสียงเท่านั้นสำหรับการตอบกลับสุดท้ายที่สตรีม หลังจากสตรีมข้อความเสร็จสิ้นแล้ว; สื่อที่สร้างขึ้นจะผ่านการปรับรูปแบบสื่อของช่องทางเดียวกัน กับไฟล์แนบการตอบกลับปกติ
หากการตอบกลับเกิน maxLength และปิดการสรุปอยู่ (หรือไม่มี API key สำหรับ
โมเดลสรุป) เสียงจะถูกข้ามและส่งการตอบกลับข้อความปกติ
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 -> TTS -> attach audio
ฟอร์แมตเอาต์พุตตามช่องทาง
| เป้าหมาย | ฟอร์แมต |
|---|---|
| Feishu / Matrix / Telegram / WhatsApp | การตอบกลับแบบข้อความเสียงจะเลือกใช้ Opus เป็นหลัก (opus_48000_64 จาก ElevenLabs, opus จาก OpenAI) 48 kHz / 64 kbps สร้างสมดุลระหว่างความชัดเจนและขนาด |
| ช่องทางอื่น | MP3 (mp3_44100_128 จาก ElevenLabs, mp3 จาก OpenAI) ค่าเริ่มต้น 44.1 kHz / 128 kbps สำหรับเสียงพูด |
| Talk / โทรศัพท์ | PCM แบบเนทีฟของผู้ให้บริการ (Inworld 22050 Hz, Google 24 kHz) หรือ ulaw_8000 จาก Gradium สำหรับโทรศัพท์ |
หมายเหตุแยกตามผู้ให้บริการ:
- การแปลงรหัส Feishu / WhatsApp: เมื่อการตอบกลับแบบข้อความเสียงมาถึงเป็น MP3/WebM/WAV/M4A Plugin ช่องทางจะแปลงรหัสเป็น Ogg/Opus 48 kHz ด้วย
ffmpegWhatsApp ส่งผ่าน Baileys พร้อมptt: trueและaudio/ogg; codecs=opusหากการแปลงล้มเหลว: Feishu จะถอยกลับไปแนบไฟล์ต้นฉบับ; การส่งของ WhatsApp จะล้มเหลวแทนที่จะโพสต์เพย์โหลด PTT ที่ไม่เข้ากัน - MiniMax / Xiaomi MiMo: ค่าเริ่มต้นเป็น MP3 (32 kHz สำหรับ MiniMax
speech-2.8-hd); แปลงรหัสเป็น Opus 48 kHz สำหรับเป้าหมายข้อความเสียงผ่านffmpeg - Local CLI: ใช้
outputFormatที่กำหนดค่าไว้ เป้าหมายข้อความเสียงจะถูกแปลงเป็น Ogg/Opus และเอาต์พุตโทรศัพท์เป็น PCM โมโน 16 kHz แบบดิบ - Google Gemini: ส่งคืน PCM 24 kHz แบบดิบ OpenClaw ห่อหุ้มเป็น WAV สำหรับไฟล์แนบ แปลงรหัสเป็น Opus 48 kHz สำหรับเป้าหมายข้อความเสียง และส่งคืน PCM โดยตรงสำหรับ Talk/โทรศัพท์
- Inworld: ไฟล์แนบ MP3, ข้อความเสียง
OGG_OPUSแบบเนทีฟ,PCMแบบดิบ 22050 Hz สำหรับ Talk/โทรศัพท์ - xAI: ค่าเริ่มต้นเป็น MP3;
responseFormatอาจเป็นmp3|wav|pcm|mulaw|alawใช้ปลายทาง batch REST ของ xAI — ไม่ได้ใช้ TTS WebSocket แบบสตรีม ไม่ รองรับรูปแบบข้อความเสียง Opus แบบเนทีฟ - Microsoft: ใช้
microsoft.outputFormat(ค่าเริ่มต้นaudio-24khz-48kbitrate-mono-mp3) TelegramsendVoiceรองรับ OGG/MP3/M4A; ใช้ OpenAI/ElevenLabs หากคุณต้องการข้อความเสียง Opus ที่รับประกันได้ หากฟอร์แมต Microsoft ที่กำหนดค่าไว้ล้มเหลว OpenClaw จะลองใหม่ด้วย MP3
ฟอร์แมตเอาต์พุตของ OpenAI และ ElevenLabs ถูกกำหนดไว้ตายตัวตามช่องทางที่ระบุไว้ข้างต้น
อ้างอิงฟิลด์
messages.tts.* ระดับบนสุด
auto"off" | "always" | "inbound" | "tagged"โหมด Auto-TTS inbound จะส่งเสียงหลังจากข้อความเสียงขาเข้าเท่านั้น; tagged จะส่งเสียงเฉพาะเมื่อการตอบกลับมีคำสั่ง [[tts:...]] หรือบล็อก [[tts:text]]
enabledbooleanท็อกเกิลแบบเดิม openclaw doctor --fix จะย้ายค่านี้ไปที่ auto
mode"final" | "all""all" รวมการตอบกลับจากเครื่องมือ/บล็อกเพิ่มเติมจากการตอบกลับสุดท้าย
providerstringรหัสผู้ให้บริการเสียงพูด เมื่อไม่ได้ตั้งค่า OpenClaw จะใช้ผู้ให้บริการตัวแรกที่กำหนดค่าไว้ตามลำดับการเลือกอัตโนมัติของ registry provider: "edge" แบบเดิมจะถูกเขียนใหม่เป็น "microsoft" โดย openclaw doctor --fix
personastringรหัส persona ที่ใช้งานอยู่จาก personas ปรับรูปแบบเป็นตัวพิมพ์เล็ก
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBlcnNvbmFzLjxpZA
" type="object">
อัตลักษณ์เสียงพูดที่เสถียร ฟิลด์: label, description, provider, fallbackPolicy, prompt, providers.<provider> ดู Personas
summaryModelstringโมเดลราคาถูกสำหรับการสรุปอัตโนมัติ; ค่าเริ่มต้นเป็น agents.defaults.model.primary รองรับ provider/model หรือ alias โมเดลที่กำหนดค่าไว้
modelOverridesobjectอนุญาตให้โมเดลปล่อยคำสั่ง TTS ได้ enabled มีค่าเริ่มต้นเป็น true; allowProvider มีค่าเริ่มต้นเป็น false
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb3ZpZGVycy48aWQ
" type="object">
การตั้งค่าที่ผู้ให้บริการเป็นเจ้าของ โดยคีย์ด้วยรหัสผู้ให้บริการเสียงพูด บล็อกโดยตรงแบบเดิม (messages.tts.openai, .elevenlabs, .microsoft, .edge) จะถูกเขียนใหม่โดย openclaw doctor --fix; ให้คอมมิตเฉพาะ messages.tts.providers.<id>
maxTextLengthnumberเพดานบังคับสำหรับจำนวนอักขระอินพุต TTS /tts audio จะล้มเหลวหากเกินค่านี้
timeoutMsnumberหมดเวลาคำขอเป็นมิลลิวินาที
prefsPathstringแทนที่พาธ JSON ค่ากำหนดภายในเครื่อง (ผู้ให้บริการ/ขีดจำกัด/การสรุป) ค่าเริ่มต้น ~/.openclaw/settings/tts.json
Azure Speech
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
Env: AZURE_SPEECH_KEY, AZURE_SPEECH_API_KEY หรือ SPEECH_KEY
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlZ2lvbiIgdHlwZT0ic3RyaW5nIg
ภูมิภาค Azure Speech (เช่น eastus) Env: AZURE_SPEECH_REGION หรือ SPEECH_REGION
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVuZHBvaW50IiB0eXBlPSJzdHJpbmci
การแทนที่ปลายทาง Azure Speech แบบไม่บังคับ (alias baseUrl)
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ShortName ของเสียง Azure ค่าเริ่มต้น en-US-JennyNeural
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI
รหัสภาษา SSML ค่าเริ่มต้น en-US
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg
Azure X-Microsoft-OutputFormat สำหรับเสียงมาตรฐาน ค่าเริ่มต้น audio-24khz-48kbitrate-mono-mp3
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTm90ZU91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg
Azure X-Microsoft-OutputFormat สำหรับเอาต์พุตข้อความเสียง ค่าเริ่มต้น ogg-24khz-16bit-mono-opus
OPENCLAW_DOCS_MARKER:paramClose:
ElevenLabs
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ถอยกลับไปใช้ ELEVENLABS_API_KEY หรือ XI_API_KEY
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
รหัสโมเดล (เช่น eleven_multilingual_v2, eleven_v3)
OPENCLAW_DOCS_MARKER:paramClose:
voiceIdstringvoiceSettingsobjectstability, similarityBoost, style (แต่ละค่า 0..1), useSpeakerBoost (true|false), speed (0.5..2.0, 1.0 = ปกติ)
applyTextNormalization"auto" | "on" | "off"OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlQ29kZSIgdHlwZT0ic3RyaW5nIg
ISO 639-1 แบบ 2 ตัวอักษร (เช่น en, de)
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNlZWQiIHR5cGU9Im51bWJlciI
จำนวนเต็ม 0..4294967295 เพื่อความกำหนดซ้ำได้แบบ best-effort
OPENCLAW_DOCS_MARKER:paramClose:
baseUrlstringGoogle Gemini
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ถอยกลับไปใช้ GEMINI_API_KEY / GOOGLE_API_KEY หากละไว้ TTS สามารถใช้ models.providers.google.apiKey ซ้ำก่อนถอยกลับไปใช้ env ได้
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
โมเดล Gemini TTS ค่าเริ่มต้น gemini-3.1-flash-tts-preview
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlTmFtZSIgdHlwZT0ic3RyaW5nIg
ชื่อเสียงสำเร็จรูปของ Gemini ค่าเริ่มต้น Kore Alias: voice
OPENCLAW_DOCS_MARKER:paramClose:
audioProfilestringspeakerNamestringOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InByb21wdFRlbXBsYXRlIiB0eXBlPSciYXVkaW8tcHJvZmlsZS12MSIn
ตั้งเป็น audio-profile-v1 เพื่อห่อหุ้มฟิลด์พรอมป์ persona ที่ใช้งานอยู่ในโครงสร้างพรอมป์ Gemini TTS ที่กำหนดซ้ำได้
OPENCLAW_DOCS_MARKER:paramClose:
personaPromptstringOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ยอมรับเฉพาะ https://generativelanguage.googleapis.com
OPENCLAW_DOCS_MARKER:paramClose:
Gradium
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: GRADIUM_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://api.gradium.ai.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น Emma (YTpq7expH9539ERJ).
OPENCLAW_DOCS_MARKER:paramClose:
Inworld
Inworld หลัก
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: INWORLD_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://api.inworld.ai.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น inworld-tts-1.5-max ยังมี: inworld-tts-1.5-mini, inworld-tts-1-max, inworld-tts-1.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น Sarah.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRlbXBlcmF0dXJlIiB0eXBlPSJudW1iZXIi
อุณหภูมิการสุ่มตัวอย่าง 0..2.
OPENCLAW_DOCS_MARKER:paramClose:
Local CLI (tts-local-cli)
commandstringOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFyZ3MiIHR5cGU9InN0cmluZ1tdIg
อาร์กิวเมนต์ของคำสั่ง รองรับตัวยึดตำแหน่ง {{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}}.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0nIm1wMyIgfCAib3B1cyIgfCAid2F2Iic
รูปแบบเอาต์พุต CLI ที่คาดไว้ ค่าเริ่มต้น mp3 สำหรับไฟล์แนบเสียง.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIg
ระยะหมดเวลาของคำสั่งเป็นมิลลิวินาที ค่าเริ่มต้น 120000.
OPENCLAW_DOCS_MARKER:paramClose:
cwdstringenv"Record<string,Microsoft (no API key)
enabledbooleanOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ชื่อเสียง neural ของ Microsoft (เช่น en-US-MichelleNeural).
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImxhbmciIHR5cGU9InN0cmluZyI
รหัสภาษา (เช่น en-US).
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im91dHB1dEZvcm1hdCIgdHlwZT0ic3RyaW5nIg
รูปแบบเอาต์พุตของ Microsoft ค่าเริ่มต้น audio-24khz-48kbitrate-mono-mp3 ทรานสปอร์ตแบบ Edge-backed ที่รวมมาด้วยไม่รองรับทุกรูปแบบ.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJhdGUgLyBwaXRjaCAvIHZvbHVtZSIgdHlwZT0ic3RyaW5nIg
สตริงเปอร์เซ็นต์ (เช่น +10%, -5%).
OPENCLAW_DOCS_MARKER:paramClose:
saveSubtitlesbooleanproxystringtimeoutMsnumberOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImVkZ2UuKiIgdHlwZT0ib2JqZWN0IiBkZXByZWNhdGVk
นามแฝงเดิม เรียกใช้ openclaw doctor --fix เพื่อเขียน config ที่บันทึกไว้ใหม่เป็น providers.microsoft.
OPENCLAW_DOCS_MARKER:paramClose:
MiniMax
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ใช้ MINIMAX_API_KEY เป็นค่าทดแทน การยืนยันตัวตน Token Plan ผ่าน MINIMAX_OAUTH_TOKEN, MINIMAX_CODE_PLAN_KEY หรือ MINIMAX_CODING_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://api.minimax.io ตัวแปรสภาพแวดล้อม: MINIMAX_API_HOST.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
ค่าเริ่มต้น speech-2.8-hd ตัวแปรสภาพแวดล้อม: MINIMAX_TTS_MODEL.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น English_expressive_narrator ตัวแปรสภาพแวดล้อม: MINIMAX_TTS_VOICE_ID.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNwZWVkIiB0eXBlPSJudW1iZXIi
0.5..2.0 ค่าเริ่มต้น 1.0.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvbCIgdHlwZT0ibnVtYmVyIg
(0, 10] ค่าเริ่มต้น 1.0.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InBpdGNoIiB0eXBlPSJudW1iZXIi
จำนวนเต็ม -12..12 ค่าเริ่มต้น 0 ค่าที่เป็นเศษส่วนจะถูกตัดทิ้งก่อนคำขอ.
OPENCLAW_DOCS_MARKER:paramClose:
OpenAI
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ใช้ OPENAI_API_KEY เป็นค่าทดแทน.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
รหัสโมเดล OpenAI TTS (เช่น gpt-4o-mini-tts).
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ชื่อเสียง (เช่น alloy, cedar).
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imluc3RydWN0aW9ucyIgdHlwZT0ic3RyaW5nIg
ฟิลด์ OpenAI instructions ที่ระบุอย่างชัดเจน เมื่อตั้งค่าแล้ว ฟิลด์พรอมป์ตัวตนจะ ไม่ ถูกแมปโดยอัตโนมัติ.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImV4dHJhQm9keSAvIGV4dHJhX2JvZHkiIHR5cGU9IlJlY29yZDxzdHJpbmcsIHVua25vd24
">ฟิลด์ JSON เพิ่มเติมที่ผสานเข้าในเนื้อหาคำขอ /audio/speech หลังฟิลด์ OpenAI TTS ที่สร้างขึ้น ใช้สิ่งนี้สำหรับ endpoint ที่เข้ากันได้กับ OpenAI เช่น Kokoro ซึ่งต้องใช้คีย์เฉพาะผู้ให้บริการอย่าง lang; คีย์ prototype ที่ไม่ปลอดภัยจะถูกละเว้น.
OPENCLAW_DOCS_MARKER:paramClose:
baseUrlstringเขียนทับ endpoint OpenAI TTS ลำดับการแก้ค่า: config → OPENAI_TTS_BASE_URL → https://api.openai.com/v1 ค่าที่ไม่ใช่ค่าเริ่มต้นจะถือเป็น endpoint TTS ที่เข้ากันได้กับ OpenAI ดังนั้นจึงยอมรับชื่อโมเดลและชื่อเสียงแบบกำหนดเอง.
OpenRouter
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: OPENROUTER_API_KEY สามารถใช้ models.providers.openrouter.apiKey ซ้ำได้.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://openrouter.ai/api/v1 ค่าเดิม https://openrouter.ai/v1 จะถูกปรับให้เป็นรูปแบบปกติ.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
ค่าเริ่มต้น hexgrad/kokoro-82m นามแฝง: modelId.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ค่าเริ่มต้น af_alloy นามแฝง: voiceId.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJwY20iJw
ค่าเริ่มต้น mp3.
OPENCLAW_DOCS_MARKER:paramClose:
speednumberVolcengine (BytePlus Seed Speech)
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_API_KEY หรือ BYTEPLUS_SEED_SPEECH_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc291cmNlSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น seed-tts-1.0 ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_RESOURCE_ID ใช้ seed-tts-2.0 เมื่อโปรเจกต์ของคุณมีสิทธิ์ใช้งาน TTS 2.0.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcEtleSIgdHlwZT0ic3RyaW5nIg
ส่วนหัวคีย์แอป ค่าเริ่มต้น aGjiRDfUWi ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_APP_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
เขียนทับ endpoint HTTP ของ Seed Speech TTS ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_BASE_URL.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ประเภทเสียง ค่าเริ่มต้น en_female_anna_mars_bigtts ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_VOICE.
OPENCLAW_DOCS_MARKER:paramClose:
speedRationumberemotionstringOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwcElkIC8gdG9rZW4gLyBjbHVzdGVyIiB0eXBlPSJzdHJpbmciIGRlcHJlY2F0ZWQ
ฟิลด์ Volcengine Speech Console เดิม ตัวแปรสภาพแวดล้อม: VOLCENGINE_TTS_APPID, VOLCENGINE_TTS_TOKEN, VOLCENGINE_TTS_CLUSTER (ค่าเริ่มต้น volcano_tts).
OPENCLAW_DOCS_MARKER:paramClose:
xAI
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: XAI_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://api.x.ai/v1 ตัวแปรสภาพแวดล้อม: XAI_BASE_URL.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlSWQiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น eve เสียงที่ใช้งานจริง: ara, eve, leo, rex, sal, una.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Imxhbmd1YWdlIiB0eXBlPSJzdHJpbmci
รหัสภาษา BCP-47 หรือ auto ค่าเริ่มต้น en.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InJlc3BvbnNlRm9ybWF0IiB0eXBlPScibXAzIiB8ICJ3YXYiIHwgInBjbSIgfCAibXVsYXciIHwgImFsYXciJw
ค่าเริ่มต้น mp3.
OPENCLAW_DOCS_MARKER:paramClose:
speednumberXiaomi MiMo
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImFwaUtleSIgdHlwZT0ic3RyaW5nIg
ตัวแปรสภาพแวดล้อม: XIAOMI_API_KEY.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImJhc2VVcmwiIHR5cGU9InN0cmluZyI
ค่าเริ่มต้น https://api.xiaomimimo.com/v1 ตัวแปรสภาพแวดล้อม: XIAOMI_BASE_URL.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Im1vZGVsIiB0eXBlPSJzdHJpbmci
ค่าเริ่มต้น mimo-v2.5-tts ตัวแปรสภาพแวดล้อม: XIAOMI_TTS_MODEL รองรับ mimo-v2-tts ด้วย.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InZvaWNlIiB0eXBlPSJzdHJpbmci
ค่าเริ่มต้น mimo_default ตัวแปรสภาพแวดล้อม: XIAOMI_TTS_VOICE.
OPENCLAW_DOCS_MARKER:paramClose:
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9ImZvcm1hdCIgdHlwZT0nIm1wMyIgfCAid2F2Iic
ค่าเริ่มต้น mp3 ตัวแปรสภาพแวดล้อม: XIAOMI_TTS_FORMAT.
OPENCLAW_DOCS_MARKER:paramClose:
stylestringเครื่องมือของ Agent
เครื่องมือ tts แปลงข้อความเป็นเสียงพูดและส่งคืนไฟล์แนบเสียงสำหรับ
การส่งข้อความตอบกลับ บน Feishu, Matrix, Telegram และ WhatsApp เสียงจะถูก
ส่งเป็นข้อความเสียงแทนไฟล์แนบ Feishu และ
WhatsApp สามารถแปลงเอาต์พุต TTS ที่ไม่ใช่ Opus บนเส้นทางนี้เมื่อมี ffmpeg
พร้อมใช้งาน.
WhatsApp ส่งเสียงผ่าน Baileys เป็นบันทึกเสียง PTT (audio พร้อม
ptt: true) และส่งข้อความที่มองเห็นได้ แยกต่างหาก จากเสียง PTT เพราะ
ไคลเอนต์ไม่ได้แสดงคำบรรยายบนบันทึกเสียงอย่างสม่ำเสมอ.
เครื่องมือนี้ยอมรับฟิลด์ channel และ timeoutMs แบบไม่บังคับ; timeoutMs คือ
ระยะหมดเวลาคำขอผู้ให้บริการต่อการเรียกหนึ่งครั้งเป็นมิลลิวินาที.
Gateway RPC
| เมธอด | วัตถุประสงค์ |
|---|---|
tts.status |
อ่านสถานะ TTS ปัจจุบันและความพยายามล่าสุด. |
tts.enable |
ตั้งค่าการกำหนดลักษณะอัตโนมัติภายในเครื่องเป็น always. |
tts.disable |
ตั้งค่าการกำหนดลักษณะอัตโนมัติภายในเครื่องเป็น off. |
tts.convert |
แปลงข้อความเป็นเสียงแบบครั้งเดียว. |
tts.setProvider |
ตั้งค่าการกำหนดลักษณะผู้ให้บริการภายในเครื่อง. |
tts.setPersona |
ตั้งค่าการกำหนดลักษณะตัวตนภายในเครื่อง. |
tts.providers |
แสดงรายการผู้ให้บริการที่กำหนดค่าไว้และสถานะ. |
ลิงก์บริการ
- คู่มือ text-to-speech ของ OpenAI
- เอกสารอ้างอิง OpenAI Audio API
- Azure Speech REST text-to-speech
- ผู้ให้บริการ Azure Speech
- ElevenLabs Text to Speech
- การยืนยันตัวตน ElevenLabs
- Gradium
- Inworld TTS API
- MiniMax T2A v2 API
- Volcengine TTS HTTP API
- การสังเคราะห์เสียงพูด Xiaomi MiMo
- node-edge-tts
- รูปแบบเอาต์พุต Microsoft Speech
- xAI text to speech