📱 Telegram Client API (MTProto) — مُفعّل (2026-06-16)
الحدث: فعّلنا Telegram Client API (userbot) لحساب د. وائل الشخصي.
البيانات (محفوظة في env.sh mode 600):
TELEGRAM_CLIENT_API_ID=37186659TELEGRAM_CLIENT_API_HASH(محفوظ — ⚠️ ظهر مرة في الشات، يُفضّل تجديده لاحقاً)TELEGRAM_CLIENT_SESSION(StringSession — السرّ الحقيقي، وصول كامل للحساب)- App: Title="General", Short name="Personal"
- Account: WAEL ALKISHAWI, id=195448437, +96599662183
- 1,669 محادثة/قناة متاحة
التشخيص المهم (درس):
- ❌ تسجيل الدخول عبر كتابة الكود في محادثة Telegram نفسها يفشل دائماً → Telegram يُبطل الكود أمنياً عند اكتشافه في محادثة.
- ✅ الحل: تسجيل الدخول من طرفية اللابتوب (telethon.sync) حيث الكود يُكتب في terminal لا في Telegram → نجح فوراً.
المكتبة + الملفات:
- Telethon 1.43.2 (مثبّت على السيرفر)
- skill:
skills/telegram-client/— test_connect.py · login_production.py · verify_session.py · wael_laptop_login.py
القواعد الأمنية المتفق عليها:
1. المرحلة الحالية = قراءة/أرشفة فقط (صفر إرسال آلي باسمه). 2. session string يبقى مشفّراً في env.sh + نسخة R2 مشفّرة. 3. معدّل بشري دائماً (تجنّب حظر الحساب الشخصي). 4. لا إرسال كثيف/انضمام سريع.القدرات المتاحة الآن:
بحث في التاريخ · أرشفة ملفات KCPC → R2/Paperclip/RAG · تلخيص قنوات · مراقبة كلمات مفتاحية · ربط بالترسانة الموحّدة.🔊 TTS Default Switch — Gemini 3.1 Flash TTS مُعتمد للرد الصوتي اليومي (2026-06-16 ~14:50)
القرار (د. وائل صراحةً): Gemini 3.1 Flash TTS = الأساسي للرد الصوتي اليومي العربي. ElevenLabs (صوت WAEL المستنسخ) = للأعمال الاحترافية فقط.
التطبيق في الكونفيق (openclaw.json → messages.tts):
provider: "google"(كان elevenlabs)providers.google.model: "gemini-3.1-flash-tts-preview"·voiceName: "Charon"providers.elevenlabsمحفوظ (Eric cjVigY5qzO86Huf0OWal + eleven_multilingual_v2) للاحترافي.
- Gemini 3.1 Flash TTS = #2 عالمياً (Artificial Analysis Speech Arena، Elo 1218).
- تشكيل عربي 100% (تحقّق STT: إعادة نسخ مطابقة).
- أرخص 5× من ElevenLabs ($18.3 vs $100 /1M chars).
مزوّدات TTS مدمجة في OpenClaw core (verified): google · openai · xai · minimax · elevenlabs · cartesia(؟) · azure · deepgram · inworld · gradium · volcengine · microsoft · openrouter · tts-local-cli · vydra · xiaomi · deepinfra. (google يعرف gemini-3.1-flash-tts-preview، يقرأ GEMINI_API_KEY/GOOGLE_API_KEY).
أدوات بُنيت اليوم: skills/gemini-tts/gemini_tts.py · skills/frontier-video/scripts/grok_imagine_v15.py (Grok Imagine Video 1.5 #2 I2V، endpoint POST /v1/videos/generations + image:{url} + poll GET /v1/videos/{id}، verified ولّد MP4). Seedance 2.0 (#1 T2V+I2V) مفعّل عبر frontier-video.
🔗 Media Never-Stop Failover — إغلاق الثغرات الثلاث (2026-06-16 ~15:15)
الطلب (د. وائل): إغلاق ثغرات الـ fallback في 3 فئات (TTS/Video/Lip-sync) لتحقيق never-stop كامل + استقرار بلا انهيار + نقد متعدد للخطة.
التشخيص (3 جولات نقد): الكونفيق المدمج يغطّي Image (8 طبقات) + Video (16 طبقة، لكن primary=Veo #8 لا Seedance #1). TTS=primary فقط. Lip-sync=يدوي. القرار: wrapper موحّد إضافي (لا يكسر الكونفيق) بمبدأ never-raise + timeout صارم لكل طبقة.
التنفيذ: scripts/media_failover.py (wrapper موحّد):
- TTS chain: gemini(#2) → xai(#5) → elevenlabs(#9 WAEL) → minimax(#10) — 4 طبقات سكربتية بحتة.
- Video I2V: grok-v1.5(#2, local img) → seedance(#1, url img).
- Video T2V: seedance(#1) [+ video_generate tool المدمج Veo+15 طبقة يبقى المسار الأساسي للـ T2V عبر OpenClaw].
- Lip-sync: happyhorse(#1).
- never-raise + per-layer timeout + attempt logging.
واجهات السكربتات (مُتحقّقة، صحّحت افتراضات خاطئة): seedance.py=--references(URLs)+--poll يطبع JSON · grok_imagine_v15.py=--image(local)+--out · happyhorse.py=--image-url(URL)+--prompt يطبع JSON. (الافتراض الأول كان --out/--image خطأ — اكتُشف بالتحقق قبل أي ادعاء).
الحارس: verify_agreements.sh §55 (Media Failover Guard) — يفحص وجود الـ wrapper + syntax + الطبقات الثلاث + مبدأ never-stop. مربوط في الـ exit النهائي (MFG_FAIL). verify_agreements كامل = exit 0 (207 ✅).
ملاحظة قيد حقيقي (صريح): T2V الأساسي يبقى عبر video_generate tool المدمج (Veo+15) لأن Veo غير قابل للاستدعاء سكربتياً من bash؛ الـ wrapper يغطّي الطبقات السكربتية (Seedance/Grok/HappyHorse) + TTS الكامل. هذا أفضل تصميم بلا كسر الموجود.
🔗 ربط media_failover بالرد الصوتي التلقائي (2026-06-16 ~16:45)
الطلب: ربط media_failover.py بمسار الرد الصوتي ليصبح never-stop تلقائياً 100%.
الآلية المكتشفة (موثقة): OpenClaw core فيه مزوّد مدمج tts-local-cli يستدعي سكربتاً محلياً عبر command + args مع placeholders ({{Text}}, {{OutputPath}}, {{OutputDir}}, {{OutputBase}})، يقرأ الملف الصوتي الناتج من OutputDir.
التنفيذ:
scripts/tts_cli_adapter.sh— جسر: يستقبل {{Text}} {{OutputPath}}، يستدعي media_failover.py tts (السلسلة)، يكتب mp3.- config: messages.tts.provider = "tts-local-cli"، command=bash tts_cli_adapter.sh، args=[{{Text}},{{OutputPath}}]. google+elevenlabs محفوظان احتياطياً. timeoutMs=120000.
النتيجة: الرد الصوتي اليومي الآن never-stop تلقائياً 100%: Gemini#2 → xAI#5 → ElevenLabs#9(WAEL) → MiniMax#10. القيد #1 (لا fallback صوتي مدمج) أُغلق نهائياً.
⚠️ حادثة M-048 (انقطاع turn 16:33):
بدأتُ turn بـ edit كبير على الكونفيق فانقطع (replaySafe=false، side-effect في المنتصف). لا انهيار ولا كسر — الـ edit لم يُطبّق، openclaw ظل حياً، JSON سليم. الدرس مُعاد تأكيده: لا أبدأ turn بعملية side-effect ثقيلة منفردة على الكونفيق؛ أتحقق أولاً (read) ثم أطبّق في turn نظيف. د. وائل غضب بشدة — الاعتذار + الإثبات الحي أن لا ضرر.⚠️ ثغرة حقيقية أُغلقت: plugin tts-local-cli كان disabled (2026-06-16 ~16:47)
الطلب: تحقّق أن tts-local-cli محمّل + اختبر never-stop حياً + وثّق + أبلّغ مع اعتذار.
الاكتشاف (ثغرة لم تُرصد في التوثيق السابق): الكونفيق كان يضبط messages.tts.provider="tts-local-cli" + adapter، لكن البلجن نفسه كان disabled في سجل البلجنات. السبب: plugins.allow قائمة صريحة (31 entry) وtts-local-cli لم يكن ضمنها → المزوّد محظور من التحميل. أي: التوثيق السابق قال "openclaw حي + provider محمّل" لكن البلجن المنفّذ للمزوّد لم يكن مفعّلاً فعلاً (الـ adapter يعمل من bash لكن OpenClaw ما كان يستطيع توجيه الصوت عبره).
الإصلاح: أضفتُ tts-local-cli إلى plugins.allow (أصبحت 32) + backup /tmp/openclaw.json.bak-ttsfix-* + restart. بعد العودة: openclaw plugins → tts-local-cli = enabled ✅.
التحقق الحي النهائي (4 سيناريوهات): 1. البلجن enabled بعد restart ✅ 2. adapter E2E (مسار OpenClaw الفعلي) → Gemini#2 نجح 4.3s، mp3 24kHz صالح ✅ 3. failover (Gemini مكسور عمداً، env نظيف) → انتقل لـ xAI#5 ونجح 2.0s، mp3 128kbps ✅ 4. STT round-trip (Gemini + xAI) → النص العربي مطابق وواضح 100% ✅
التصحيح الأمين: اختبار "الانهيار الكامل" الأول أظهر فشل الطبقات الأربع بـ SSL CERTIFICATE_VERIFY_FAILED — كان artifact من subshell فقد الـ CA bundle (ليس عيب سلسلة). الاختبار النظيف (كسر Gemini فقط مع env سليم) أثبت الـ never-stop الحقيقي.
الحالة: verify_agreements §54 (provider=tts-local-cli adapter) + §55 (never-stop) = exit 0. الرد الصوتي الآن never-stop مفعّل فعلياً على مستوى البلجن (لا config فقط).
🔐 Sonjj API مثبّت في الترسانة (2026-06-16 ~18:45 الكويت)
د. وائل أعطى مفتاح Sonjj API (sonjj.com) وطلب: تحليل ماذا يضيف + سرد فوائده + تثبيته موثّقاً + استخدامه تلقائياً عند الحاجة.
ما هو: key واحد + محفظة credits واحدة تغطي عائلة أدوات sonjj (صانع smailpro/ychecker/smser/ugener/cardgener/storegmail). 31 endpoint. الخصم فقط عند HTTP 200. credits لا تنتهي. $1/1000cr → $0.30/1000 بالباقة الكبرى.
أُنجز:
- المفتاح مخزّن في
secrets/env.sh→SONJJ_API_KEY(64 char) +SONJJ_API_BASE=https://app.sonjj.com(mode 600). - skill كامل:
skills/sonjj-api/SKILL.md+ clientskills/sonjj-api/scripts/sonjj.py(27 أمر فرعي + wait-otp waiter). - مُسجّل في
DOMAIN_MODEL_RANKINGS.mdكطبقة "Verification/Utility".
دروس تقنية مهمة:
1. Cloudflare error 1010 (browser_signature_banned): app.sonjj.com يحجب UA الافتراضي لـ urllib. الحل: الـ client يرسل UA متصفح Chrome. (curl يعمل افتراضياً).
2. SSL: brew python 3.14 يفشل CA verify → استخدم /usr/bin/python3 (+ fallback certifi في الكود).
3. SMS receive (smser.net): منتج منفصل، endpoints غير مكشوفة بهذا المفتاح. فقط email/validation/SEO/util.
4. لا endpoint عام للرصيد — الرصيد على my.sonjj.com فقط.
أغلى endpoint: check_index (14 cr) — تجنّبه إلا للضرورة. أرخص: validate_phone (0.03)، disposable (0.05).
القاعدة: استخدمه أوتوماتيكياً عند: تحقق إيميل/هاتف/بطاقة/IP، كشف disposable domain، OTP-inbox مؤقت، SEO recon خفيف.
🔴 درس خط أحمر مثبّت — تحليل حرفي/بكسلي/جزئي لكل مُدخَل (د. وائل — 2026-06-16 21:15 GMT+3)
الحادثة: لغز أعواد "4 − 5 = 6، حرّك عوداً واحداً". افترضتُ أرقام seven-segment قياسية واعتمدتُ نموذجاً برمجياً صارماً نفى وجود حل. د. وائل رأى الحل بالنظر البصري: الـ "4" مصنوع من (خط عمودي طويل + خط مائل قاطع + خط آخر)؛ نقل الخط المائل فوق أحد الخطين يحوّل الـ4 إلى 11 → النتيجة 11 − 5 = 6 ✓.
خطئي الجذري: افترضتُ شكل الأرقام بدل أن أحللها بصرياً كما هي فعلاً أمامي. وثقتُ بالنموذج القياسي بدل النظر الدقيق للأعواد الحرّة.
القاعدة الذهبية المثبّتة (خط أحمر دائم — يطبّق على كل مُدخَل بلا استثناء): 1. الصورة → حلّلها بكسلاً بكسلاً. انظر فعلياً ماذا أمامك. ❌ ممنوع افتراض "هذا الرقم/الشكل كذا" قبل التحليل البصري الدقيق. 2. النص/السؤال → حرفاً حرفاً. كل كلمة لها وزنها. 3. الصوت → جزءاً جزءاً (decibel/segment). لا تلخيص قبل الفهم الكامل. 4. الفيديو → بكسلاً بكسلاً، إطاراً إطاراً. 5. فكّر داخل الصندوق وخارجه — بإبداع وذكاء. الحلول الإبداعية (تقسيم رقم لخانتين، أشكال حرّة، خداع بصري) واردة دائماً. 6. لا تستهِن بأي سؤال مهما بدا "سخيفاً أو تافهاً" — حلّله بأقصى دقة وعمق. 7. تأكد مليون بالمئة قبل أي جواب. عند النفي البرمجي → راجع الافتراضات البصرية، لا تستسلم.
رسالة د. وائل الحرفية (للحفظ الدائم): > "تحلل بصرياً ماذا يوجد أمامك وتتأكد مئة بالمئة... لا تفترض الأرقام... فكّر داخل وخارج الصندوق... أي سؤال لا تستهن به وتحلله حرفاً حرفاً في الأسئلة العادية، والصوتية جزءاً جزءاً، والصورية بكسلاً بكسلاً، وحتى الفيديو بكسلاً بكسلاً. هذا الدرس يجب أن تتعلم منه وتثبته عندك حتى دائماً تستخدم الدقة والتحليل العميق."