تحويل النص إلى كلام (TTS)
يمكن لـ OpenClaw تحويل الردود الصادرة إلى صوت باستخدام ElevenLabs أو Microsoft أو MiniMax أو OpenAI. وهو يعمل في أي مكان يستطيع OpenClaw فيه إرسال صوت.الخدمات المدعومة
- ElevenLabs (موفّر أساسي أو احتياطي)
- Microsoft (موفّر أساسي أو احتياطي؛ يستخدم التنفيذ المضمّن الحالي
node-edge-tts) - MiniMax (موفّر أساسي أو احتياطي؛ يستخدم API T2A v2)
- OpenAI (موفّر أساسي أو احتياطي؛ ويُستخدم أيضًا للملخصات)
ملاحظات حول Microsoft speech
يستخدم موفّر Microsoft speech المضمّن حاليًا خدمة TTS العصبية عبر الإنترنت الخاصة بـ Microsoft Edge من خلال مكتبةnode-edge-tts. وهي خدمة مستضافة (وليست
محلية)، وتستخدم نقاط نهاية Microsoft، ولا تتطلب مفتاح API.
يعرض node-edge-tts خيارات تهيئة الكلام وتنسيقات الإخراج، لكن
ليست كل الخيارات مدعومة من الخدمة. وما زالت تهيئة الإدخال القديمة وتوجيهات
الاستخدام التي تعتمد على edge تعمل ويجري تطبيعها إلى microsoft.
وبما أن هذا المسار خدمة ويب عامة من دون SLA أو حصة منشورة،
فتعامل معه على أنه أفضل جهد. وإذا كنت تحتاج إلى حدود ودعم مضمونين، فاستخدم OpenAI
أو ElevenLabs.
المفاتيح الاختيارية
إذا كنت تريد OpenAI أو ElevenLabs أو MiniMax:ELEVENLABS_API_KEY(أوXI_API_KEY)MINIMAX_API_KEYOPENAI_API_KEY
summaryModel المُهيأ (أو agents.defaults.model.primary)،
لذلك يجب أيضًا أن يكون ذلك الموفّر موثّق المصادقة إذا فعّلت الملخصات.
روابط الخدمات
- دليل OpenAI لتحويل النص إلى كلام
- مرجع OpenAI Audio API
- تحويل النص إلى كلام في ElevenLabs
- المصادقة في ElevenLabs
- MiniMax T2A v2 API
- node-edge-tts
- تنسيقات إخراج Microsoft Speech
هل هو مفعّل افتراضيًا؟
لا. يكون Auto‑TTS معطّلًا افتراضيًا. فعّله في التكوين باستخدامmessages.tts.auto أو لكل جلسة باستخدام /tts always (الاسم المستعار: /tts on).
عندما لا يكون messages.tts.provider مضبوطًا، يختار OpenClaw أول
موفّر speech مُهيأ وفق ترتيب الاختيار التلقائي في السجل.
التكوين
يوجد تكوين TTS ضمنmessages.tts في openclaw.json.
المخطط الكامل موجود في تهيئة Gateway.
الحد الأدنى من التكوين (تفعيل + موفّر)
OpenAI أساسي مع ElevenLabs احتياطي
Microsoft أساسي (من دون مفتاح API)
MiniMax أساسي
تعطيل Microsoft speech
حدود مخصصة + مسار التفضيلات
الرد بالصوت فقط بعد رسالة صوتية واردة
تعطيل التلخيص التلقائي للردود الطويلة
ملاحظات حول الحقول
auto: وضع Auto‑TTS (offأوalwaysأوinboundأوtagged).inboundيرسل الصوت فقط بعد رسالة صوتية واردة.taggedيرسل الصوت فقط عندما يتضمن الرد وسوم[[tts]].
enabled: مفتاح قديم (ينقلdoctorهذا إلىauto).mode:"final"(الافتراضي) أو"all"(يتضمن ردود الأدوات/الكتل).provider: معرّف موفّر speech مثل"elevenlabs"أو"microsoft"أو"minimax"أو"openai"(والاحتياطي تلقائي).- إذا كان
providerغير مضبوط، يستخدم OpenClaw أول موفّر speech مُهيأ وفق ترتيب الاختيار التلقائي في السجل. - ما زال
provider: "edge"القديم يعمل ويُطبَّع إلىmicrosoft. summaryModel: نموذج منخفض الكلفة اختياري للتلخيص التلقائي؛ والإعداد الافتراضي هوagents.defaults.model.primary.- يقبل
provider/modelأو اسمًا مستعارًا لنموذج مُهيأ.
- يقبل
modelOverrides: السماح للنموذج بإصدار توجيهات TTS (مفعّل افتراضيًا).- تكون القيمة الافتراضية لـ
allowProviderهيfalse(تبديل الموفّر يتطلب تفعيلًا صريحًا).
- تكون القيمة الافتراضية لـ
providers.<id>: إعدادات مملوكة للموفّر ومفهرسة حسب معرّف موفّر speech.- تُرحَّل تلقائيًا كتل الموفّرين المباشرة القديمة (
messages.tts.openaiوmessages.tts.elevenlabsوmessages.tts.microsoftوmessages.tts.edge) إلىmessages.tts.providers.<id>عند التحميل. maxTextLength: حد صارم لإدخال TTS (عدد الأحرف). يفشل/tts audioإذا جرى تجاوزه.timeoutMs: مهلة الطلب (مللي ثانية).prefsPath: تجاوز لمسار JSON المحلي للتفضيلات (الموفّر/الحد/التلخيص).- ترجع قيم
apiKeyإلى متغيرات البيئة (ELEVENLABS_API_KEY/XI_API_KEYوMINIMAX_API_KEYوOPENAI_API_KEY). providers.elevenlabs.baseUrl: تجاوز عنوان URL الأساسي لـ API الخاص بـ ElevenLabs.providers.openai.baseUrl: تجاوز نقطة نهاية OpenAI TTS.- ترتيب التحليل:
messages.tts.providers.openai.baseUrl->OPENAI_TTS_BASE_URL->https://api.openai.com/v1 - تُعامَل القيم غير الافتراضية على أنها نقاط نهاية TTS متوافقة مع OpenAI، لذلك تُقبل أسماء النماذج والأصوات المخصصة.
- ترتيب التحليل:
providers.elevenlabs.voiceSettings:stabilityوsimilarityBoostوstyle:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = عادي)
providers.elevenlabs.applyTextNormalization: auto|on|offproviders.elevenlabs.languageCode: رمز ISO 639-1 من حرفين (مثلenوde)providers.elevenlabs.seed: عدد صحيح0..4294967295(حتمية بأفضل جهد)providers.minimax.baseUrl: تجاوز عنوان URL الأساسي لـ MiniMax API (الافتراضيhttps://api.minimax.io، ومتغير البيئة:MINIMAX_API_HOST).providers.minimax.model: نموذج TTS (الافتراضيspeech-2.8-hd، ومتغير البيئة:MINIMAX_TTS_MODEL).providers.minimax.voiceId: معرّف الصوت (الافتراضيEnglish_expressive_narrator، ومتغير البيئة:MINIMAX_TTS_VOICE_ID).providers.minimax.speed: سرعة التشغيل0.5..2.0(الافتراضي 1.0).providers.minimax.vol: مستوى الصوت(0, 10](الافتراضي 1.0؛ ويجب أن يكون أكبر من 0).providers.minimax.pitch: إزاحة الطبقة الصوتية-12..12(الافتراضي 0).providers.microsoft.enabled: السماح باستخدام Microsoft speech (الافتراضيtrue؛ من دون مفتاح API).providers.microsoft.voice: اسم الصوت العصبي من Microsoft (مثلen-US-MichelleNeural).providers.microsoft.lang: رمز اللغة (مثلen-US).providers.microsoft.outputFormat: تنسيق إخراج Microsoft (مثلaudio-24khz-48kbitrate-mono-mp3).- راجع تنسيقات إخراج Microsoft Speech لمعرفة القيم الصالحة؛ ليست كل التنسيقات مدعومة بواسطة وسيلة النقل المضمّنة المعتمدة على Edge.
providers.microsoft.rate/providers.microsoft.pitch/providers.microsoft.volume: سلاسل نسب مئوية (مثل+10%و-5%).providers.microsoft.saveSubtitles: كتابة ترجمات JSON إلى جانب الملف الصوتي.providers.microsoft.proxy: عنوان URL للبروكسي لطلبات Microsoft speech.providers.microsoft.timeoutMs: تجاوز مهلة الطلب (مللي ثانية).edge.*: اسم مستعار قديم لإعدادات Microsoft نفسها.
التجاوزات المدفوعة بالنموذج (مفعّلة افتراضيًا)
افتراضيًا، يمكن للنموذج إصدار توجيهات TTS لرد واحد. عندما تكونmessages.tts.auto مضبوطة على tagged، تصبح هذه التوجيهات مطلوبة لتشغيل الصوت.
عند التفعيل، يمكن للنموذج إصدار توجيهات [[tts:...]] لتجاوز الصوت
لرد واحد، بالإضافة إلى كتلة اختيارية [[tts:text]]...[[/tts:text]]
لتوفير وسوم تعبيرية (ضحك، وإشارات غناء، وما إلى ذلك) يجب أن تظهر في
الصوت فقط.
تُتجاهل توجيهات provider=... ما لم تكن modelOverrides.allowProvider: true.
مثال على حمولة رد:
provider(معرّف موفّر speech مُسجّل، مثلopenaiأوelevenlabsأوminimaxأوmicrosoft؛ ويتطلبallowProvider: true)voice(صوت OpenAI) أوvoiceId(ElevenLabs / MiniMax)model(نموذج OpenAI TTS، أو معرّف نموذج ElevenLabs، أو نموذج MiniMax)stabilityوsimilarityBoostوstyleوspeedوuseSpeakerBoostvol/volume(مستوى صوت MiniMax، من 0 إلى 10)pitch(طبقة MiniMax، من -12 إلى 12)applyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
التفضيلات لكل مستخدم
تكتب أوامر Slash تجاوزات محلية إلىprefsPath (الافتراضي:
~/.openclaw/settings/tts.json، مع إمكانية التجاوز بواسطة OPENCLAW_TTS_PREFS أو
messages.tts.prefsPath).
الحقول المخزنة:
enabledprovidermaxLength(عتبة التلخيص؛ الافتراضي 1500 حرفًا)summarize(الافتراضيtrue)
messages.tts.* لذلك المضيف.
تنسيقات الإخراج (ثابتة)
- Feishu / Matrix / Telegram / WhatsApp: رسالة صوتية Opus (
opus_48000_64من ElevenLabs، وopusمن OpenAI).- يُعد 48kHz / 64kbps توازنًا جيدًا للرسائل الصوتية.
- القنوات الأخرى: MP3 (
mp3_44100_128من ElevenLabs، وmp3من OpenAI).- يُعد 44.1kHz / 128kbps التوازن الافتراضي لوضوح الكلام.
- MiniMax: MP3 (نموذج
speech-2.8-hd، ومعدل عينة 32kHz). لا يُدعَم تنسيق الملاحظات الصوتية أصلاً؛ استخدم OpenAI أو ElevenLabs إذا كنت تحتاج إلى رسائل صوتية Opus مضمونة. - Microsoft: يستخدم
microsoft.outputFormat(الافتراضيaudio-24khz-48kbitrate-mono-mp3).- تقبل وسيلة النقل المضمّنة قيمة
outputFormat، لكن ليست كل التنسيقات متاحة من الخدمة. - تتبع قيم تنسيق الإخراج تنسيقات إخراج Microsoft Speech (بما في ذلك Ogg/WebM Opus).
- يقبل
sendVoiceفي Telegram ملفات OGG/MP3/M4A؛ استخدم OpenAI/ElevenLabs إذا كنت تحتاج إلى رسائل صوتية Opus مضمونة. - إذا فشل تنسيق إخراج Microsoft المُهيأ، يعيد OpenClaw المحاولة باستخدام MP3.
- تقبل وسيلة النقل المضمّنة قيمة
سلوك Auto-TTS
عند التفعيل، يقوم OpenClaw بما يلي:- يتخطى TTS إذا كان الرد يحتوي بالفعل على وسائط أو توجيه
MEDIA:. - يتخطى الردود القصيرة جدًا (أقل من 10 أحرف).
- يلخّص الردود الطويلة عند التفعيل باستخدام
agents.defaults.model.primary(أوsummaryModel). - يرفق الصوت المُولَّد بالرد.
maxLength وكان التلخيص معطّلًا (أو لم يوجد مفتاح API
لنموذج التلخيص)،
فسيُتخطى الصوت ويُرسل الرد النصي العادي.
مخطط التدفق
استخدام أوامر Slash
يوجد أمر واحد فقط:/tts.
راجع أوامر Slash لمعرفة تفاصيل التفعيل.
ملاحظة Discord: الأمر /tts هو أمر مضمّن في Discord، لذلك يسجّل OpenClaw
الأمر /voice بوصفه الأمر الأصلي هناك. وما زال النص /tts ... يعمل.
- تتطلب الأوامر مرسلًا مصرّحًا له (وما زالت قواعد allowlist/المالك سارية).
- يجب أن يكون
commands.textأو تسجيل الأوامر الأصلية مفعّلًا. off|always|inbound|taggedهي مفاتيح تبديل لكل جلسة (/tts onاسم مستعار لـ/tts always).- يُخزَّن
limitوsummaryفي التفضيلات المحلية، وليس في التكوين الرئيسي. - يولّد
/tts audioردًا صوتيًا لمرة واحدة (ولا يفعّل TTS). - يتضمن
/tts statusإظهارًا للاحتياطي لآخر محاولة:- احتياطي ناجح:
Fallback: <primary> -> <used>بالإضافة إلىAttempts: ... - فشل:
Error: ...بالإضافة إلىAttempts: ... - تشخيصات مفصلة:
Attempt details: provider:outcome(reasonCode) latency
- احتياطي ناجح:
- تتضمن إخفاقات API الخاصة بـ OpenAI وElevenLabs الآن تفاصيل الخطأ التي جرى تحليلها ومعرّف الطلب (عند إرجاعه من الموفّر)، ويجري إظهار ذلك في أخطاء/سجلات TTS.
أداة الوكيل
تحوّل أداةtts النص إلى كلام وتعيد مرفقًا صوتيًا من أجل
تسليم الرد. وعندما تكون القناة هي Feishu أو Matrix أو Telegram أو WhatsApp،
يُسلَّم الصوت بوصفه رسالة صوتية بدلًا من مرفق ملف.
Gateway RPC
طرائق Gateway:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers