الصوت / الرسائل الصوتية (2026-01-17)
ما الذي يعمل
- فهم الوسائط (الصوت): إذا كان فهم الصوت مفعّلًا (أو تم اكتشافه تلقائيًا)، فإن OpenClaw:
- يحدّد أول مرفق صوتي (مسار محلي أو URL) ويقوم بتنزيله إذا لزم الأمر.
- يفرض
maxBytesقبل الإرسال إلى كل إدخال نموذج. - يشغّل أول إدخال نموذج مؤهل بالترتيب (مزوّد أو CLI).
- إذا فشل أو تم تخطيه (بسبب الحجم/المهلة)، فإنه يجرّب الإدخال التالي.
- عند النجاح، يستبدل
Bodyبكتلة[Audio]ويضبط{{Transcript}}.
- تحليل الأوامر: عندما ينجح النسخ، يتم تعيين
CommandBody/RawBodyإلى النص المنسوخ حتى تستمر أوامر الشرطة المائلة في العمل. - السجلات التفصيلية: في
--verbose، نسجل وقت تشغيل النسخ ووقت استبداله للنص.
الاكتشاف التلقائي (الافتراضي)
إذا لم تضبط نماذج ولم يتم ضبطtools.media.audio.enabled على false،
فإن OpenClaw يكتشف تلقائيًا بهذا الترتيب ويتوقف عند أول خيار يعمل:
- نموذج الرد النشط عندما يدعم مزوّده فهم الصوت.
- CLI المحلية (إذا كانت مثبتة)
sherpa-onnx-offline(يتطلبSHERPA_ONNX_MODEL_DIRمع encoder/decoder/joiner/tokens)whisper-cli(منwhisper-cpp; يستخدمWHISPER_CPP_MODELأو النموذج tiny المضمّن)whisper(Python CLI؛ ينزّل النماذج تلقائيًا)
- Gemini CLI (
gemini) باستخدامread_many_files - مصادقة المزوّد
- تُجرَّب أولًا الإدخالات المكوّنة في
models.providers.*التي تدعم الصوت - ترتيب fallback المضمّن: OpenAI → Groq → Deepgram → Google → Mistral
- تُجرَّب أولًا الإدخالات المكوّنة في
tools.media.audio.enabled: false.
وللتخصيص، اضبط tools.media.audio.models.
ملاحظة: اكتشاف الثنائيات يتم بأفضل جهد عبر macOS/Linux/Windows؛ تأكد من أن CLI موجودة على PATH (نحن نوسّع ~)، أو اضبط نموذج CLI صريحًا مع مسار أمر كامل.
أمثلة على التكوين
مزوّد + رجوع احتياطي إلى CLI (OpenAI + Whisper CLI)
مزوّد فقط مع تقييد بالنطاق
مزوّد فقط (Deepgram)
مزوّد فقط (Mistral Voxtral)
إعادة إرسال النص المنسوخ إلى الدردشة (اشتراك اختياري)
ملاحظات وحدود
- تتبع مصادقة المزوّد ترتيب مصادقة النماذج القياسي (ملفات تعريف المصادقة، ومتغيرات env، و
models.providers.*.apiKey). - تفاصيل إعداد Groq: Groq.
- يلتقط Deepgram القيمة
DEEPGRAM_API_KEYعند استخدامprovider: "deepgram". - تفاصيل إعداد Deepgram: Deepgram (audio transcription).
- تفاصيل إعداد Mistral: Mistral.
- يمكن لمزوّدي الصوت تجاوز
baseUrlوheadersوproviderOptionsعبرtools.media.audio. - حد الحجم الافتراضي هو 20MB (
tools.media.audio.maxBytes). يتم تخطي الصوت الأكبر من اللازم لذلك النموذج وتجربة الإدخال التالي. - يتم تخطي ملفات الصوت الصغيرة جدًا/الفارغة التي تقل عن 1024 بايت قبل نسخها بواسطة المزوّد/CLI.
- تكون القيمة الافتراضية
maxCharsللصوت غير مضبوطة (النص الكامل). اضبطtools.media.audio.maxCharsأوmaxCharsلكل إدخال لتقليم الإخراج. - القيمة الافتراضية التلقائية لـ OpenAI هي
gpt-4o-mini-transcribe؛ اضبطmodel: "gpt-4o-transcribe"للحصول على دقة أعلى. - استخدم
tools.media.audio.attachmentsلمعالجة عدة رسائل صوتية (mode: "all"+maxAttachments). - يكون النص المنسوخ متاحًا للقوالب باسم
{{Transcript}}. - تكون
tools.media.audio.echoTranscriptمعطلة افتراضيًا؛ فعّلها لإرسال تأكيد النص المنسوخ مرة أخرى إلى الدردشة الأصلية قبل معالجة الوكيل. - تخصص
tools.media.audio.echoFormatنص echo (العنصر النائب:{transcript}). - يتم وضع حد أقصى على stdout الخاصة بـ CLI (5MB)؛ لذا اجعل إخراج CLI موجزًا.
دعم بيئة proxy
تحترم عملية نسخ الصوت المعتمدة على المزوّد متغيرات بيئة proxy القياسية الخاصة بالخروج:HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
اكتشاف الإشارات في المجموعات
عند تعيينrequireMention: true لدردشة جماعية، يقوم OpenClaw الآن بنسخ الصوت قبل التحقق من الإشارات. وهذا يسمح بمعالجة الرسائل الصوتية حتى عندما تتضمن إشارات.
كيف يعمل:
- إذا لم تكن للرسالة الصوتية body نصية وكانت المجموعة تتطلب إشارات، يجري OpenClaw نسخ “preflight”.
- يتم التحقق من النص المنسوخ مقابل أنماط الإشارة (مثل
@BotNameأو محفزات emoji). - إذا تم العثور على إشارة، تنتقل الرسالة عبر مسار الرد الكامل.
- يُستخدم النص المنسوخ لاكتشاف الإشارات بحيث يمكن للرسائل الصوتية تجاوز بوابة الإشارة.
- إذا فشل النسخ أثناء preflight (مهلة، خطأ API، إلخ)، تُعالج الرسالة بناءً على اكتشاف الإشارة النصية فقط.
- وهذا يضمن ألا يتم إسقاط الرسائل المختلطة (نص + صوت) بشكل غير صحيح أبدًا.
- اضبط
channels.telegram.groups.<chatId>.disableAudioPreflight: trueلتخطي فحوصات الإشارة في النص المنسوخ في preflight لتلك المجموعة. - اضبط
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightللتجاوز لكل موضوع (trueللتخطي،falseللفرض). - تكون القيمة الافتراضية
false(preflight مفعلة عندما تتطابق شروط تقييد الإشارة).
requireMention: true. يتم نسخ الرسالة الصوتية، واكتشاف الإشارة، ثم يرد الوكيل.
مشكلات يجب الانتباه لها
- تستخدم قواعد النطاق مبدأ أول تطابق يفوز. ويتم تطبيع
chatTypeإلىdirectأوgroupأوroom. - تأكد من أن CLI تنهي التنفيذ بالرمز 0 وتطبع نصًا عاديًا؛ أما JSON فتحتاج إلى معالجتها عبر
jq -r .text. - بالنسبة إلى
parakeet-mlx، إذا مررت--output-dir، يقرأ OpenClaw الملف<output-dir>/<media-basename>.txtعندما تكون--output-formatهيtxt(أو عند حذفها)؛ أما تنسيقات الإخراج غيرtxtفتعود إلى تحليل stdout. - اجعل المهلات معقولة (
timeoutSeconds، والافتراضي 60 ثانية) لتجنب حظر طابور الردود. - يعالج نسخ preflight أول مرفق صوتي فقط لاكتشاف الإشارة. أما الصوتيات الإضافية فتُعالج أثناء مرحلة فهم الوسائط الرئيسية.