تلگرام برای iOS نسخه 13.1.1، بر اساس کد منبع باز خود، ارسال رسید خوانده شدن (تیک دوم) را برای غریبه‌ای که ابتدا پیام داده است، متوقف کرده است. تا زمانی که پنل گزارش با دکمه‌های «گزارش اسپم» و «مسدود کردن» بالای چت نمایش داده می‌شود، کلاینت پیام‌های او را خوانده شده علامت نمی‌زند، دکمه‌های او را نشان نمی‌دهد، لینک‌های او را به عنوان متن عادی باز می‌کند و وضعیت ایموجی او را پنهان می‌سازد. این حالت زمانی که پنل را حذف می‌کنید، برداشته می‌شود و در صورت پاسخ دادن، به صورت محلی برداشته می‌شود؛ البته نویسندگان این تغییر خودشان اشاره کرده‌اند که سرور ممکن است آن را بازگرداند. این تغییر در مخزن Telegram-iOS با کامیت 007fb3f1 در 22 اکتبر اعمال شده است. این کامیت در تگ release-13.1.1 قرار گرفت و خود نسخه در همان شب در App Store منتشر شد. این موضوع همه کسانی را که از غریبه‌ها پیام دریافت می‌کنند و همچنین کسانی که ابتدا پیام می‌دهند، تحت تأثیر قرار می‌دهد: اگر به فردی با iPhone پیام دهید، دو تیک تنها پس از آن ظاهر می‌شوند که او تصمیم بگیرد با شما چه کند.

مخاطب مشکوک از نظر کلاینت چیست؟

هنگامی که فردی خارج از مخاطبین شما برای اولین بار پیام می‌دهد، سرور تنظیمات آن چت را، که در طرح API با عنوان peerSettings شناخته می‌شود، به کلاینت ارسال می‌کند. در میان پرچم‌های موجود در آن، report_spam و block_contact وجود دارند که نشان می‌دهند آیا دکمه‌های «گزارش اسپم» و «مسدود کردن» باید نمایش داده شوند یا خیر. در این طرح، پرچم جداگانه‌ای برای «مشکوک» وجود ندارد. در کد تلگرام برای iOS، یک چت تا زمانی که حداقل یکی از این دو پرچم فعال باشد، مشکوک تلقی می‌شود؛ این همان گزاره isSuspiciousPeer است. همین تنظیمات شامل کشور شماره تلفن، ماه ثبت‌نام و تاریخ تغییر نام و عکس نیز می‌شود که از مارس 2025 در کارت اطلاعات غریبه بالای اولین پیام نمایش داده می‌شوند.

پیش از نسخه 13.1.1، مشکوک بودن تغییرات کمی ایجاد می‌کرد: در متن چنین مخاطبی، لینک‌ها، منشن‌ها، هشتگ‌ها، آدرس‌های ایمیل، شماره کارت‌ها و آدرس‌های TON به صورت متن عادی نمایش داده می‌شدند، قابل کلیک نبودند و کلیک روی کارت پیش‌نمایش لینک نیز کاری انجام نمی‌داد. دکمه‌های زیر پیام‌ها، دکمه و لینک‌های موجود در متن پیش‌نمایش، لینک‌ها در پیام‌های HTML و وضعیت ایموجی آن مانند هر کاربر دیگری کار می‌کردند و پیام‌ها بلافاصله پس از باز کردن چت، خوانده شده علامت‌گذاری می‌شدند.

چه تغییراتی در نسخه 13.1.1 ایجاد شد؟

کامیت 007fb3f1 شانزده فایل را تغییر می‌دهد، 491 خط اضافه و 29 خط حذف شده است. تا زمانی که پنل گزارش در جای خود قرار دارد:

چه چیزیقبلبعد
رسید خوانده شدنبا باز شدن چت ارسال می‌شدارسال نمی‌شود
دکمه‌های زیر پیامنمایش داده می‌شدند و کار می‌کردندنمایش داده نمی‌شوند
لینک‌ها در متنمتن عادیمتن عادی، مانند قبل
پیش‌نمایش لینککارت باز نمی‌شد، اما دکمه زیر آن و لینک‌های درون متن آن کار می‌کردنددکمه‌ای وجود ندارد، لینک‌های درون متن پیش‌نمایش حذف شده‌اند، رسانه باز نمی‌شود
پیام‌های HTMLلینک‌ها و دکمه‌ها کار می‌کردندلینک‌ها به متن تبدیل شده‌اند، دکمه‌ها حذف شده‌اند
وضعیت ایموجی مخاطبدر سربرگ چت و پروفایل قابل مشاهده بودپنهان است، برای مشترکین Premium به جای آن ستاره نمایش داده می‌شود

خوانده شدن. رسید خوانده شدن در تلگرام و بازنشانی شمارنده پیام‌های خوانده نشده در یک چت، یک عمل واحد است: کلاینت شماره آخرین پیام خوانده شده را به سرور گزارش می‌دهد و سرور تیک دوم را به فرستنده نشان می‌دهد. اکنون کلاینت این عمل را تا زمانی که مخاطب مشکوک است، و همچنین در یک مورد دیگر، یعنی زمانی که چت با یک غیرمخاطب برای اولین بار باز می‌شود و تنظیمات هنوز از سرور نرسیده‌اند، به تعویق می‌اندازد. ارسال رسید خوانده شدن قابل لغو نیست، بنابراین کلاینت منتظر تصمیم‌گیری می‌ماند و «برای احتیاط» پیام‌ها را خوانده شده علامت نمی‌زند. در توضیحات مربوط به بررسی این تغییر آمده است که در شبیه‌ساز، تصمیمات مربوط به خوانده شدن به تعویق افتاده و پس از بستن پنل و ارسال پیام اعمال شده‌اند.

دکمه‌ها. ردیف دکمه‌های زیر پیام‌ها برای حباب‌های عادی، استیکرها و دایره‌ها (پیام‌های ویدیویی گرد) حذف شده‌اند. برای پیام‌های HTML یک تبدیل جداگانه اضافه شده است: لینک‌ها، آدرس‌های ایمیل، منشن‌ها، هشتگ‌ها، شماره کارت‌ها و آدرس‌های TON به متن تبدیل می‌شوند، دکمه‌های داخلی ناپدید می‌شوند، از دکمه‌ای که به عنوان لینک طراحی شده است فقط متن آن باقی می‌ماند و تصویر لینک خود را از دست می‌دهد. شماره تلفن‌ها، دستورات ربات‌ها، تاریخ‌ها، لنگرها و ایموجی‌های سفارشی دست‌نخورده باقی می‌مانند. هر بلوک شماره خود را حفظ می‌کند تا نقل قول‌ها از این پیام‌ها همچنان به همان مکان‌ها ارجاع دهند.

پیش‌نمایش لینک‌ها. کارت پیش‌نمایش چنین پیامی دیگر دکمه‌ای ندارد، رسانه از آن باز نمی‌شود و همان لینک‌هایی که از متن پیام حذف شده‌اند، از متن پیش‌نمایش نیز حذف شده‌اند.

وضعیت ایموجی. وضعیت ایموجی در سربرگ چت، در توضیحات پنل مربوط به Premium و در هدر پروفایل، از جمله کاور و رنگ‌های وضعیت کلکسیونی، نمایش داده نمی‌شود.

این قانون فقط در چت‌های خصوصی اعمال می‌شود. ردیف‌ها در لیست چت‌ها، جستجو، و همچنین گروه‌ها و کانال‌ها با پنل گزارش، تغییری نمی‌کنند.

چگونه از این حالت خارج شویم؟

چهار عمل پنل را حذف می‌کنند، اما همه آنها حالت را در کد کلاینت برنمی‌دارند:

  1. بستن پنل با علامت ضربدر. کلاینت messages.hidePeerSettingsBar را فراخوانی می‌کند و خود پرچم‌های چت را صفر می‌کند، بدون اینکه منتظر سرور بماند. گزارش اسپم نیز به همین صورت پرچم‌ها را به صورت محلی حذف می‌کند.
  2. مسدود کردن مخاطب یا افزودن او به مخاطبین. در این حالت، کلاینت فقط وضعیت مسدودیت یا مخاطب را تغییر می‌دهد و پرچم‌های report_spam و block_contact را دست نمی‌زند: این حالت زمانی به پایان می‌رسد که سرور تنظیمات جدید چت را ارسال کند.
  3. پاسخ دادن. هنگام ارسال هر پیامی، به جز پیام‌های زمان‌بندی شده، کلاینت خود این دو پرچم را از چت حذف می‌کند، اما پیشنهاد «افزودن به مخاطبین» باقی می‌ماند. پیام زمان‌بندی شده تا ساعت مقرر به کسی نمی‌رسد و حالت را برنمی‌دارد.

مسیر سوم در مخزن با این توضیح آمده است: پرچم‌ها هنگام پاسخ دادن فقط به صورت محلی حذف می‌شوند و users.getFullUser با هر به‌روزرسانی، تنظیمات چت را با آنچه سرور ارسال کرده است، بازنویسی می‌کند. اگر سرور پس از پاسخ شما پرچم‌ها را حذف نکند، این حالت با به‌روزرسانی بعدی بازخواهد گشت. تا 21 اکتبر، نویسندگان این تغییر را بررسی نکرده بودند، زیرا حساب کاربری دومی برای آزمایش نداشتند. گزینه جایگزینی که آنها ذکر می‌کنند، فراخوانی hidePeerSettingsBar هنگام ارسال است، اما در این صورت «افزودن به مخاطبین» نیز ناپدید می‌شود.

اطلاعاتی درباره بیلد

کامیت در 22 اکتبر ساعت 11:20 UTC وارد شاخه اصلی شد. 51 دقیقه بعد، در ساعت 12:11 UTC، شماره نسخه در versions.json به 13.1.1 تغییر یافت، تگ release-13.1.1 روی این کامیت با شماره قرار دارد و 007fb3f1 سه کامیت قبل از آن در آن گنجانده شده است. نسخه 13.1.1 در App Store در همان روز ساعت 18:45 UTC با توضیحات «Bug fixes, minor improvements, and more» منتشر شد. بیلد App Store با کد منبع باز مقایسه نشده است. همین نسخه رابط کاربری را برای iPhone Duo تاشو نیز بازطراحی می‌کند.

بررسی این تغییر در شبیه‌ساز با یک سوئیچ موقت انجام شد که به اجبار این حالت را فعال می‌کرد و در کامیت نهایی گنجانده نشد. کیبوردهای عادی و دکمه‌های لینک در شبیه‌ساز بررسی شدند، اما تبدیل پیام‌های HTML فقط با تست‌ها پوشش داده شده است و پیام HTML زنده‌ای از یک غریبه در بررسی وجود نداشت. امضای زیر کامیت بین یک انسان و Claude Opus 5.5 مشترک است.

کشور شماره و خط جدید CanadaVoIP

کارت اطلاعات غریبه، کشور شماره را نه از خود شماره، بلکه از فیلد phone_country در همان تنظیمات چت دریافت می‌کند: سرور یک کد دو حرفی ارسال می‌کند، کلاینت آن را در لیست کشورها help.getCountriesList جستجو می‌کند، نام را جایگزین می‌کند و پرچم را بر اساس کد ترسیم می‌کند. برای کد FT، iOS «آناونیموس» (این شماره‌های +888 هستند) و برای TS، «تست» می‌نویسد.

در 24 اکتبر، یک ورودی جدید در این لیست ظاهر شد: کد CP، نام CanadaVoIP، کد تلفن +1، بدون پیشوند و الگوهای شماره. ابتدا سرور آزمایشی آن را دریافت کرد (تا ساعت 09:33 UTC)، سپس سرور اصلی (تا ساعت 12:18 UTC). این ورودی به عنوان پنهان علامت‌گذاری شده است. پیش از آن، سه ورودی پنهان در لیست وجود داشت: XG «Global Mobile Satellite System» (+881)، XV «International Networks» (+882, +883) و YL «Y-land» (+42). در مجموع 236 ورودی در لیست وجود دارد.

ورودی‌های پنهان در iOS در انتخاب کشور هنگام ورود نمایش داده نمی‌شوند، اما ذخیره شده و بر اساس کد یافت می‌شوند. با شماره‌گیری نیز این ورودی با ایالات متحده تلاقی پیدا نمی‌کند، زیرا ایالات متحده با همان کد +1 در لیست بعدتر قرار دارد. تنها یک مکان باقی می‌ماند که کلاینت آن را می‌خواند — کد phone_country که از سرور آمده است. بر اساس این منطق، سرور قصد دارد شماره‌های اپراتورهای مجازی کانادایی را از سایر شماره‌ها با کد +1 متمایز کند و در کارت اطلاعات غریبه در iPhone به جای «کانادا»، کلمه CanadaVoIP ظاهر خواهد شد. این نتیجه‌گیری از لیست و کد کلاینت است و چت زنده‌ای با چنین کدی مشاهده نشده است.

Telegram Desktop ورودی‌های پنهان را هنگام بارگذاری لیست به طور کامل حذف می‌کند، بنابراین برای کد CP، پرچمی بدون نام ترسیم خواهد کرد. پرچم برای هر دو کلاینت یکسان است، بر اساس دو حرف: در ISO 3166-1، کد CP برای جزیره کلیپرتون، یک قلمرو فرانسوی غیرمسکونی در اقیانوس آرام، رزرو شده است.