Nodes and media
الصوت والملاحظات الصوتية
ما يعمل
- فهم الوسائط (الصوت): إذا كان فهم الصوت مفعلا (أو مكتشفا تلقائيا)، فإن 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أو النموذج الصغير المضمن)whisper(Python CLI؛ ينزل النماذج تلقائيا)
- مصادقة المزود
- تتم تجربة إدخالات
models.providers.*المضبوطة التي تدعم الصوت أولا - ترتيب الرجوع إلى المزودين: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- تتم تجربة إدخالات
اعتبارا من 2026-05-22، لم يعد الاكتشاف التلقائي لـ Gemini CLI مدعوما لفهم الوسائط. تنقل Google مستخدمي Gemini CLI إلى Antigravity CLI؛ يجب أن يستخدم الصوت النسخ المحلي أو نسخ المزود، بينما يجب نقل رجوع CLI للصور/الفيديو إلى Antigravity CLI (agy).
لتعطيل الاكتشاف التلقائي، اضبط tools.media.audio.enabled: false.
للتخصيص، اضبط tools.media.audio.models.
ملاحظة: اكتشاف الملفات الثنائية هو أفضل محاولة عبر macOS/Linux/Windows؛ تأكد من أن CLI موجود في PATH (نوسع ~)، أو اضبط نموذج CLI صريحا بمسار أمر كامل.
أمثلة الإعداد
مزود + رجوع CLI (OpenAI + Whisper CLI)
{ tools: { media: { audio: { enabled: true, maxBytes: 20971520, models: [ { provider: "openai", model: "gpt-4o-mini-transcribe" }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"], timeoutSeconds: 45, }, ], }, }, },}مزود فقط مع تقييد النطاق
{ tools: { media: { audio: { enabled: true, scope: { default: "allow", rules: [{ action: "deny", match: { chatType: "group" } }], }, models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }], }, }, },}مزود فقط (Deepgram)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3" }], }, }, },}مزود فقط (Mistral Voxtral)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "mistral", model: "voxtral-mini-latest" }], }, }, },}مزود فقط (SenseAudio)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319" }], }, }, },}تكرار النص المنسوخ إلى الدردشة (اشتراك اختياري)
{ tools: { media: { audio: { enabled: true, echoTranscript: true, // default is false echoFormat: '📝 "{transcript}"', // optional, supports {transcript} models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }], }, }, },}ملاحظات وحدود
- تتبع مصادقة المزود ترتيب مصادقة النماذج القياسي (ملفات المصادقة، متغيرات البيئة،
models.providers.*.apiKey). - تفاصيل إعداد Groq: Groq.
- يلتقط Deepgram قيمة
DEEPGRAM_API_KEYعند استخدامprovider: "deepgram". - تفاصيل إعداد Deepgram: Deepgram (نسخ الصوت).
- تفاصيل إعداد Mistral: Mistral.
- يلتقط SenseAudio قيمة
SENSEAUDIO_API_KEYعند استخدامprovider: "senseaudio". - تفاصيل إعداد SenseAudio: SenseAudio.
- يمكن لمزودي الصوت تجاوز
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نص التكرار (العنصر النائب:{transcript}). - مخرجات stdout الخاصة بـ CLI محددة (5MB)؛ أبق مخرجات CLI موجزة.
- يجب أن تستخدم
argsالخاصة بـ CLI القيمة{{MediaPath}}لمسار ملف الصوت المحلي. شغلopenclaw doctor --fixلترحيل عناصر{input}النائبة المهملة من إعداداتaudio.transcription.commandالأقدم.
دعم بيئة الوكيل
يحترم نسخ الصوت المستند إلى المزود متغيرات بيئة الوكيل الصادر القياسية:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
إذا لم يتم ضبط أي متغيرات بيئة للوكيل، يتم استخدام الخروج المباشر. إذا كان إعداد الوكيل مشوها، يسجل OpenClaw تحذيرا ويرجع إلى الجلب المباشر.
اكتشاف الإشارات في المجموعات
عند ضبط requireMention: true لدردشة جماعية، ينسخ OpenClaw الصوت الآن قبل التحقق من الإشارات. يتيح ذلك معالجة الملاحظات الصوتية حتى عندما تحتوي على إشارات.
كيف يعمل:
- إذا لم تكن للرسالة الصوتية متن نصي وكانت المجموعة تتطلب إشارات، يجري OpenClaw نسخا "تمهيديا".
- يتم فحص النص المنسوخ بحثا عن أنماط الإشارة (مثل
@BotNameومشغلات الرموز التعبيرية). - إذا عثر على إشارة، تتابع الرسالة مسار الرد الكامل.
- يستخدم النص المنسوخ لاكتشاف الإشارات كي تتمكن الملاحظات الصوتية من اجتياز بوابة الإشارة.
سلوك الرجوع:
- إذا فشل النسخ أثناء التمهيد (مهلة، خطأ API، وما إلى ذلك)، تتم معالجة الرسالة بناء على اكتشاف الإشارات النصية فقط.
- يضمن هذا ألا يتم إسقاط الرسائل المختلطة (نص + صوت) بشكل غير صحيح أبدا.
إلغاء الاشتراك لكل مجموعة/موضوع Telegram:
- اضبط
channels.telegram.groups.<chatId>.disableAudioPreflight: trueلتخطي فحوصات إشارة النص المنسوخ التمهيدية لتلك المجموعة. - اضبط
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightللتجاوز لكل موضوع (trueللتخطي، وfalseلفرض التفعيل). - القيمة الافتراضية هي
false(التمهيد مفعل عندما تتطابق شروط بوابة الإشارة).
مثال: يرسل مستخدم ملاحظة صوتية تقول "Hey @Claude, what's the weather?" في مجموعة Telegram مع 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، الافتراضي 60s) لتجنب حظر طابور الرد. - يعالج النسخ التمهيدي أول مرفق صوتي فقط لاكتشاف الإشارات. تتم معالجة الصوت الإضافي أثناء مرحلة فهم الوسائط الرئيسية.