الصوت والمذكرات الصوتية
ما الذي يعمل
- فهم الوسائط (الصوت): إذا كان فهم الصوت مفعلاً (أو تم اكتشافه تلقائياً)، فإن 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؛ يقوم بتنزيل النماذج تلقائياً)
- Gemini CLI (
gemini) باستخدامread_many_files - مفاتيح المزود (OpenAI → Groq → Deepgram → Google)
لتعطيل الكشف التلقائي، اضبط 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" }],
},
},
},
}
صدى النص المحول إلى الدردشة (اختياري)
{
tools: {
media: {
audio: {
enabled: true,
echoTranscript: true, // الافتراضي هو false
echoFormat: '📝 "{transcript}"', // اختياري، يدعم {transcript}
models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
},
},
},
}
ملاحظات وقيود
- مصادقة المزود تتبع ترتيب مصادقة النموذج القياسي (ملفات تعريف المصادقة، متغيرات البيئة،
models.providers.*.apiKey). - Deepgram يلتقط
DEEPGRAM_API_KEYعند استخدامprovider: "deepgram". - تفاصيل إعداد Deepgram: Deepgram (تحويل الصوت إلى نص).
- تفاصيل إعداد Mistral: Mistral.
- يمكن لمزودي الصوت تجاوز
baseUrlوheadersوproviderOptionsعبرtools.media.audio. - الحد الأقصى الافتراضي للحجم هو 20 ميجابايت (
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 محدودة (5 ميجابايت)؛ حافظ على إخراج CLI موجزاً.
دعم بيئة الوكيل
يحترم التحويل إلى نص المستند إلى مزود متغيرات بيئة الوكيل الصادرة القياسية:
HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_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(الاستباقية مفعلة عندما تتطابق شروط بوابة الإشارة).
مثال: يرسل مستخدم مذكرة صوتية تقول "مرحباً @Claude، ما هي حالة الطقس؟" في مجموعة 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، الافتراضي 60 ثانية) لتجنب حظر قائمة انتظار الرد. - التحويل إلى نص الاستباقي يعالج فقط أول مرفق صوتي لكشف الإشارات. يتم معالجة الصوت الإضافي خلال مرحلة فهم الوسائط الرئيسية.