بدءًا من الإصدار التجريبي 12.10.283300 بتاريخ 8 أكتوبر، يتضمن عميل Telegram لنظام macOS وحدة HTMLBubbles: وهي رسائل مصممة باستخدام HTML وCSS، مع تضمين JavaScript، وتظهر مباشرة في فقاعة الدردشة دون الحاجة إلى نافذة تطبيق مصغر. في 11 أكتوبر، ومع الإصدار 13.0.283309، أُضيفت إليه مكتبة three.js وثلاث ألعاب ثلاثية الأبعاد يمكن التحكم بها باستخدام الأسهم. حتى الآن، هذا يخص فقط المستخدمين المشتركين في قناة بيتا لنظام macOS: تعمل الوحدة على محادثات تجريبية مدمجة في الإصدار نفسه، ولا يوجد نوع رسالة خاص بها على مستوى الخادم في مخطط API.

The post on Telegram — @gramnews
رسائل HTML في نسخة بيتا من Telegram لنظام macOS

ماذا يوجد في الإصدار

يُوزع إصدار بيتا من macOS عبر موجز التحديثات mac-updates.telegram.org، وكل إصدار هو ملف zip عادي يحتوي على التطبيق. في الإصدار 12.10.283299، لا توجد الوحدة، بينما في الإصدار 12.10.283300، يظهر بجانب الموارد حزمة HTMLBubbles_HTMLBubbles.bundle. وقد فُككت الحزمة في اليوم نفسه.

داخل الحزمة، توجد اثنا عشر ملفًا بصيغة .chat. هذه ليست بيانات من الخادم، بل هي سيناريوهات لمحادثات تجريبية: عنوان، قائمة بالمشاركين مع ألوان صورهم الرمزية، ورسائل، كل منها عبارة عن جزء من HTML مع <style> و<script> خاصين بها. تشير الأسماء إلى الغرض منها بوضوح: «Design Crew»، «Deploy Bot»، «Stress Test»، «Playground»، «Long Reads»، «Trip to Lisbon»، «Shop Assistant»، «Analytics»، «Live Scripts»، «Code Review»، «Game Night»، «Motion Lab». ويذكر التعليق التوضيحي لـ «Stress Test» المحرك مباشرة: «ما يمكن لـ litehtml التعامل معه وما لا يمكنه».

تحتوي سلاسل الملف التنفيذي على كتالوج من الرسائل التجريبية، حوالي خمسين بطاقة: بطاقة صعود مع علامات تبويب للأيام، صفحة منتج مع خيارات الحجم واللون، مسار تحويل، الاحتفاظ بالمستخدمين حسب الفئة، طلب سحب مع زر Approve، بناء CI مع أزرار Promote وRoll back، لعبة إكس أو ضد بوت، مكعبات «تتدحرج حقًا»، مشغل موسيقى مع معادل صوت حي، وإجابة «تكتب نفسها بنفسها، مثل الذكاء الاصطناعي».

يقدم بوت محادثة منفصل، وهو HTML Bot، نفسه كالتالي: كل إجابة هي HTML وCSS، ولا يوجد اتصال بالشبكة؛ اكتب / لاختيار رسالة. هناك أيضًا قاعدة للتعليمات البرمجية الخاصة بك: أي HTML مع أنماط وسكريبت يُعرض بعرض كامل بدون فقاعة، بينما إذا كان ملفوفًا في <div class="widget">، فإنه يظهر داخل الفقاعة.

ما الذي أضافه إصدار 11 أكتوبر

في الإصدار 13.0.283309، ظهر شيئان في الحزمة. الأول هو lib/three.js بحجم 1.27 ميجابايت: مكتبة three.js من المراجعة r160 بترخيص MIT، أعيد تجميعها، وفقًا لتعليق في السطر الأول من الملف، «لرسائل HTML» — تُنفذ الوحدة كسكريبت واحد وتضع نفسها في الكائن العام THREE. لا تقوم الرسالة بربطها بعنوان شبكة، بل برابط داخلي app:three.

والثاني هو المحادثة الثالثة عشرة، «3D Lab»، مع تعليق «مشاهد three.js، مرسومة بواسطة محرك عرض Metal الخاص بالتطبيق». تحتوي على ثلاث رسائل: لعبة Chicken Cross حيث تعبر دجاجة الطرق، مشهد تجريبي «three.js on Metal»، ولعبة شطرنج ضد بوت. التحكم في Chicken Cross يتم بالأسهم أو WASD بعد النقر على الحقل، و Esc يحرر التركيز؛ توجد أزرار مكررة للفأرة أسفل الحقل.

The post on Telegram — @gramnews
three.js وألعاب ثلاثية الأبعاد في رسائل بيتا Telegram لنظام macOS

ظهرت هناك أيضًا مجلد ported يحتوي على أكثر من مائة ملف HTML منفصل — وهي نفس الرسائل التجريبية، موزعة على المحادثات. تشير العبارة «twidget has no port of this card» في الملف الثنائي إلى الغرض: يتم نقل البطاقات إلى محرك عرض ثانٍ ويتم التحقق من أي منها تم نقله.

ماذا يعني هذا للمستخدمين ومطوري البوتات

لا يعرض Telegram المستقر لنظام macOS، وTelegram Desktop، وiOS، وAndroid مثل هذه الرسائل. في نسخة بيتا، تعمل الوحدة على محادثات تجريبية خاصة بها: لا يوجد ما يرسل رسالة HTML مع سكريبت إلى محاور عبر الخادم — فمخطط API (الطبقة 230) لا يحتوي على نوع رسالة يوصل الترميز الأصلي مع الأنماط والسكريبت إلى المستلم.

الأقرب إلى ذلك علنًا هو Rich Messages، التي ظهرت في Bot API 10.1 بتاريخ 11 يونيو 2026. يمكن للبوت إرسال رسالة بتنسيق HTML أو Markdown عبر sendRichMessage، لكن الوثائق تصف HTML فقط كوسيلة للكتابة: يتم تحويل كل وسم إلى كتلة من مجموعة ثابتة — فقرة، عنوان، قائمة، جدول، اقتباس، كتلة قابلة للطي، صيغة، صورة، فيديو. في مخطط API، يتضح هذا من خلال الأنواع: يتم قبول inputRichMessageHTML مع سلسلة الترميز كمدخل، ويرى المستلم richMessage مع قائمة من الكتل — وهي نفس الكتل التي تُبنى منها صفحات Instant View. لا يدرج Bot API أي وسم <script> أو <style> ضمن الوسوم المدعومة.

لا يظهر الإصدار أي ارتباط بين HTMLBubbles وRich Messages: تُحمّل المحادثات التجريبية من الحزمة داخل التطبيق، وليس من رسائل الخادم. نصوص العروض التوضيحية مدمجة في الملف الثنائي باللغة الإنجليزية، ولا توجد على منصة ترجمة macOS.

كيف تُعرض الرسالة في الفقاعة

المسار الرئيسي لا يتطلب متصفحًا. يتم تحليل الترميز بواسطة litehtml — وهو محرك مفتوح المصدر لتخطيط HTML وCSS بترخيص BSD، والذي لا يرسم شيئًا بنفسه: بل يرتب العناصر حسب الإحداثيات، ويسلم عملية العرض إلى التطبيق. يقرأ HTML باستخدام محلل Gumbo، وقد دخلت سلاسل تصحيح الأخطاء الخاصة بـ Gumbo («Entering adoption agency algorithm»، «Noah's ark clause») إلى الملف الثنائي معه. يقوم التطبيق بعملية العرض بنفسه، ويحتوي HTML Bot في سلاسله على ثلاثة أوضاع مقارنة: litehtml، litehtml-gpu — نفس التخطيط مع الإخراج عبر Metal — و twidget (WebKit).

لا يقوم السكريبت في مثل هذه الرسالة بتعديل الترميز مباشرة. بل يعلن عن دالة render() التي تُرجع سلسلة HTML للحالة الحالية، ومعالجات الأحداث: onAction(name, value) — للنقر على عنصر يحمل السمة data-action، و onKey، و onPointer، و onFocus — للألعاب. بعد كل حدث، يستدعي العميل render() ويعيد رسم الفقاعة في مكانها. وفوق ذلك، توجد مجموعة من المساعدين للرسوم المتحركة: tween()، animate()، منحنيات ease.*، transition('pop') لتغيير المحتوى الأصلي. يعمل HTML الثابت حول <script> كعرض احتياطي إذا لم يتم تشغيل السكريبت.

وفقًا لنص العرض التوضيحي «Live Scripts»، يتم تنفيذ كل سكريبت في بيئة تشغيل JavaScriptCore الخاصة به — وهو محرك JavaScript ضمن macOS. بالنقر بزر الفأرة الأيمن على البطاقة، تفتح «Script Log…» مع وحدة التحكم الخاصة بها، ويقوم الأمر /stats في الدردشة مع HTML Bot بتشغيل وقت عرض الإطار، ومعدل الإطارات، ووحدة المعالجة المركزية، والذاكرة فوق كل رسالة — وهي أداة للقياسات، وليست للمستخدم.

بيئة التشغيل والشبكة

يُظهر العرض التوضيحي «Runaway scripts the sandbox stops» الحدود مباشرة في البطاقات: حلقة لا نهائية عند التحميل، وفقًا لنصها، يقطعها JavaScriptCore بعد 50 مللي ثانية ويترك HTML ثابتًا؛ بطاقة بزر Hang تشغل حلقة مماثلة داخل onAction؛ مؤقت يشغل المعالج لمدة 40 مللي ثانية كل 100 مللي ثانية يتجاوز ميزانية 200 مللي ثانية من وقت المعالج في الثانية.

يعمل وضع WebKit في وحدة WidgetSandbox منفصلة ومحمي من الشبكة بثلاث طبقات في آن واحد. تتلقى الصفحة سياسة أمان المحتوى مع connect-src 'none' وسكريبتات فقط بمفتاح استخدام لمرة واحدة؛ يتم توصيل قائمة قواعد بـ WebView تحظر جميع عناوين http وhttps وws وwss وftp؛ قبل رمز الرسالة، تُزال fetch وXMLHttpRequest وWebSocket وEventSource وRTCPeerConnection والعاملين وwindow.open من النافذة. يُسمح بالصور والوسائط فقط من data: وblob:، وتُسلم الملفات مثل three.js بواسطة معالج المخطط الداخلي.

كيف تُبنى المشاهد ثلاثية الأبعاد

تُكتب الألعاب من «3D Lab» باستخدام رمز three.js العادي: مشهد، كاميرا متعامدة، إضاءة مع ظلال، هندسة من المكعبات. يُنشأ محرك العرض كـ THREE.WebGLRenderer، ولكن مع معلمة cornerRadius، التي لا توجد في three.js، — يفهمها فقط غلاف التطبيق. يوجد في الملف الثنائي غلاف لوضع الصفحة في WebKit: يستبدل WebGLRenderer بوراث، ويدرج قماشه في عنصر يحمل السمة data-3d، ويراقب الحجم، ويمرر الأسهم، وWASD، والمسافة، وEnter إلى onKey اللعبة — مع Cmd أو Ctrl أو Alt، تنتقل المفاتيح إلى التطبيق.

في الفقاعة، وفقًا لتعليق المحادثة، يرسم محرك عرض Metal الخاص بالتطبيق نفس المشهد؛ تحتوي الوحدة على فئات HTMLBubbleGPU، وHTMLBubbleGPUPool، ومخازن مؤقتة لموارد Metal. على أجهزة Mac التي لا تحتوي على Metal، تعرض اللعبة رسالة «3D needs a Mac with Metal».

Telegram Serverless وtgcloud.ai

لا توجد في حزمة HTMLBubbles، ولا في سلاسل الملف الثنائي، ولا في مخطط API أي روابط إلى Telegram Serverless، أو tgcloud.ai، أو أي منفذ خادم آخر: فالرسائل التجريبية موجودة محليًا، وبوت HTML Bot لا يمتلك اتصالًا بالشبكة بحكم تصميمه. لا يوجد حتى الآن ما يؤكد وجود صلة بينهما سوى التزامن الزمني.