تحويل النص إلى كلام (TTS)
يمكن لـ OpenClaw تحويل الردود الصادرة إلى صوت باستخدام ElevenLabs أو Microsoft أو MiniMax أو OpenAI. وهو يعمل في أي مكان يستطيع OpenClaw إرسال الصوت إليه.الخدمات المدعومة
- ElevenLabs (موفّر أساسي أو احتياطي)
- Microsoft (موفّر أساسي أو احتياطي؛ يستخدم التنفيذ المضمّن الحالي
node-edge-tts) - MiniMax (موفّر أساسي أو احتياطي؛ يستخدم واجهة T2A v2 API)
- 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
هل هو مفعّل افتراضيًا؟
لا. التحويل التلقائي إلى كلام معطّل افتراضيًا. فعّله في الإعدادات عبرmessages.tts.auto أو محليًا باستخدام /tts on.
عندما لا تكون messages.tts.provider معيّنة، يختار OpenClaw أول
موفّر كلام مُعدّ وفق ترتيب الاختيار التلقائي في السجل.
الإعدادات
توجد إعدادات TTS تحتmessages.tts في openclaw.json.
والمخطط الكامل موجود في إعدادات Gateway.
إعدادات دنيا (تمكين + موفّر)
OpenAI أساسي مع ElevenLabs احتياطي
Microsoft أساسي (من دون مفتاح API)
MiniMax أساسي
تعطيل Microsoft speech
حدود مخصصة + مسار التفضيلات
الرد بالصوت فقط بعد رسالة صوتية واردة
تعطيل التلخيص التلقائي للردود الطويلة
ملاحظات حول الحقول
auto: وضع التحويل التلقائي إلى كلام (off,always,inbound,tagged).- يرسل
inboundالصوت فقط بعد رسالة صوتية واردة. - يرسل
taggedالصوت فقط عندما يتضمن الرد وسوم[[tts]].
- يرسل
enabled: مفتاح تبديل قديم (يقوم doctor بترحيله إلىauto).mode:"final"(افتراضي) أو"all"(يشمل ردود الأدوات/الكتل).provider: معرّف موفّر الكلام مثل"elevenlabs"أو"microsoft"أو"minimax"أو"openai"(الاحتياطي تلقائي).- إذا كانت
providerغير معيّنة، يستخدم OpenClaw أول موفّر كلام مُعدّ وفق ترتيب الاختيار التلقائي في السجل. - لا يزال
provider: "edge"القديم يعمل ويجري تطبيعه إلىmicrosoft. summaryModel: نموذج منخفض التكلفة اختياري للتلخيص التلقائي؛ والافتراضي هوagents.defaults.model.primary.- يقبل
provider/modelأو اسمًا مستعارًا لنموذج مُعدّ.
- يقبل
modelOverrides: يسمح للنموذج بإخراج توجيهات TTS (مفعّل افتراضيًا).- تكون القيمة الافتراضية لـ
allowProviderهيfalse(تبديل الموفّر يتم بالاشتراك الاختياري).
- تكون القيمة الافتراضية لـ
providers.<id>: إعدادات يملكها الموفّر ومفاتيحها هي معرّفات موفّري الكلام.- كتل الموفّر المباشرة القديمة (
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 الأساسي لـ ElevenLabs API.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(معرّف موفّر كلام مسجّل، مثل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
تفضيلات لكل مستخدم
تكتب أوامر الشرطة المائلة التجاوزات المحلية إلى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.
- يقبل النقل المضمّن
سلوك التحويل التلقائي إلى كلام
عند التمكين، يقوم OpenClaw بما يلي:- يتجاوز TTS إذا كان الرد يحتوي بالفعل على وسائط أو توجيه
MEDIA:. - يتجاوز الردود القصيرة جدًا (< 10 أحرف).
- يلخّص الردود الطويلة عند التمكين باستخدام
agents.defaults.model.primary(أوsummaryModel). - يرفق الصوت المُنشأ بالرد.
maxLength وكان التلخيص معطّلًا (أو لم يوجد مفتاح API لـ
نموذج التلخيص)، فسيتم
تجاوز الصوت وإرسال الرد النصي العادي.
مخطط التدفق
استخدام أوامر الشرطة المائلة
يوجد أمر واحد فقط:/tts.
راجع أوامر الشرطة المائلة لمعرفة تفاصيل التمكين.
ملاحظة Discord: إن /tts هو أمر مضمّن في Discord، لذلك يسجّل OpenClaw
/voice هناك بوصفه الأمر الأصلي. ولا يزال النص /tts ... يعمل.
- تتطلب الأوامر مرسلًا مخولًا (ما تزال قواعد allowlist/owner تنطبق).
- يجب أن يكون
commands.textأو تسجيل الأمر الأصلي مفعّلًا. - تقبل الإعدادات
messages.tts.autoالقيمoff|always|inbound|tagged. - يكتب
/tts onتفضيل TTS المحلي إلىalways؛ ويكتب/tts offإلىoff. - استخدم الإعدادات عندما تريد قيمًا افتراضية من نوع
inboundأوtagged. - يتم تخزين
limitوsummaryفي التفضيلات المحلية، وليس في الإعدادات الرئيسية. - يولد
/tts audioردًا صوتيًا لمرة واحدة (ولا يفعّل TTS). - يتضمن
/tts statusرؤية للاحتياطي عند أحدث محاولة:- نجاح احتياطي:
Fallback: <primary> -> <used>بالإضافة إلىAttempts: ... - فشل:
Error: ...بالإضافة إلىAttempts: ... - تشخيصات مفصلة:
Attempt details: provider:outcome(reasonCode) latency
- نجاح احتياطي:
- تتضمن إخفاقات OpenAI وElevenLabs في API الآن تفاصيل الخطأ المحللة ومعرّف الطلب (عند إرجاعه من الموفّر)، ويظهر ذلك في أخطاء/سجلات TTS.
أداة الوكيل
تقوم أداةtts بتحويل النص إلى كلام وتعيد مرفقًا صوتيًا من أجل
تسليم الرد. وعندما تكون القناة هي Feishu أو Matrix أو Telegram أو WhatsApp،
يتم تسليم الصوت بوصفه رسالة صوتية بدلًا من مرفق ملف.
Gateway RPC
طرائق Gateway:tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers