شمارهٔ جهانی،شمارهٔ محلی و داخلیِ تلفن سه خانهٔ متفاوتاند؛آنها را با دستورِ شمارهگیریِ دستگاه یکی نکنید. درtel URI،علامتِ+صورتِ جهانی را مشخص میکند،شمارهٔ محلی بهphone-contextنیاز دارد وextداخلی را جدا نگه میدارد. تمرینِ این صفحه پنج نمونه را با parserمحدود میخواند و دوباره میسازد؛هیچ شمارهای گرفته یا استعلام نمیشود.
شناسه با روشِ شمارهگیری فرق دارد
ممکن است دستگاه برای خروج از مرکز تلفن،رقمِ دسترسی بخواهد یا کدِ بینالمللی را به شکلِ دیگری بگیرد. این دستورهای وابسته به محل را نباید خودکار داخلِ شمارهٔ شناسایی چسباند. RFC3966،telرا شناسهٔ منبعِ تلفنی تعریف میکند؛شیوهٔ برقراریِ تماس به محیط هم وابسته است.
مثالِ جهانیِtel:+1-201-555-0123از نمونهٔ استاندارد گرفته شده است. خطتیرههای نمایشی در خروجیِ محدود حذف میشوند وnumberبرابر+12015550123میشود؛این کار،صحتِ تخصیص،دسترسی از محلِ شما یا هویتِ صاحبِ شماره را آزمایش نمیکند.
داخلی را در خانهٔ خودش نگه داریم
در نمونهٔ دارای;ext=0042،رشتهٔ0042به همان صورت حفظ میشود. تبدیلِ آن به عدد۴۲یاچسباندنش به شمارهٔ اصلی،قرارداد را عوض میکند. extنشانیِ ایستگاهِ پشتِ مرکز تلفن است؛رقمِ دسترسی به خطِ بیرون یا دستورِ مکث وارسالِDTMFِدلخواه نیست.
| نمونهٔ آموزشی | خانهٔ مستقل | برداشتِ نادرست |
|---|---|---|
| شمارهٔ آغازشده با+ | numberجهانی | اثباتِ مالکیتِ فرد |
| ext=0042 | extensionمتنی | بخشِ خودکارِ شمارهٔ جهانی |
| phone-context=pbx.example.test | زمینهٔ شمارهٔ محلی | پیششمارهٔ قابلِچسباندن |
phone-context پیشوندِ شماره نیست
در مثالِ اصیلِtel:0042;phone-context=pbx.example.test،دامنه فقط زمینهٔ نامگذاریِ همین تمرین است و هیچDNSخوانده نمیشود.0042داخلِ آن زمینه شناسه دارد. parserهیچ کشور،صفرِ اول یا مسیرِ شمارهگیری را حدس نمیزند.
نمونهٔ استانداردِtel:911;phone-context=+1هم در دفتر میآید؛وجودِ+1مجوزِ تبدیلِ آن به+1911نیست. منبع صریحاً میگویدcontextلزومأ پیشوندی برای ساختِE.164نیست. این نمونه فقط متن است؛لینکِ فعالِtelیاعملیاتِ تماس روی صفحه ساخته نشده است.
زیرمجموعهٔ parser را روشن ببینیم
کد،ASCII،schemeکوچکِtel،رقمهای دهدهی و جداکنندههای اعلامی،extوphone-contextرا میپذیرد. برای نمونهٔ محلی،contextالزامی است. خروجیِ serializeدوباره parseمیشود و باید همان چهار خانهٔnumber،global،extensionوcontextرا بدهد. این برابریِ ساختاری،آزمونِ کاملِ همارزیِ همهٔtel URIها نیست.
RFCبرای بعضی شمارههای محلی حرفهای خاص یا نمادها وپارامترهای دیگر هم دارد؛این تمرین همه را پیاده نمیکند. مقدارِ unsupported_subsetیعنی ابزارِ محدودِ ما آن صورت را پشتیبانی نمیکند؛نباید همهٔ آنها را در کلِ استاندارد نامعتبر خواند. حتیschemeبزرگ در این parserپذیرفته نیست،درحالیکه قواعدِ همارزیِ استاندارد دامنهٔ بیشتری دارند.
تعارض را بیصدا کنار نگذاریم
نه حالتِ ردشده در خروجی ثبتاند:شمارهٔ محلیِ بدونِcontext،extتکراری،همزمانیِextوisub،ترتیبِ پارامترِ خارج از زیرمجموعه،پارامترهای ناشناخته،رقمِ فارسی،فاصلهٔ معمولی وschemeخارج از قرارداد. نامِ خطا مشخص میکند کدام قید یا حدِ پیادهسازی مطرح است.
ناشناختهبودنِ پارامتر با نادیدهگرفتنِ مجازِ آن یکی نیست. کد هیچ پارامتری را حذف و سپس تماس را اجرا نمیکند. ورودی تا۲۵۶نویسه محدود است؛این سقفِ تمرین است،نه حداکثرِ طولِ شماره در جهان. نسخهٔ اجراPython۳٫۱۲٫۱۴است و هیچ سرویسِ تطبیقِ شماره یا سامانهٔ تلفنی اجرا نشده است.
برای اتصالِ واقعی چه چیزی ثبت شود؟
فرهنگِ فیلدها بایدnumber،extension،contextودستورِ شمارهگیریِ مجاز را جدا تعریف کند. حفظِ صفرِ اول درCSV از رشته محافظت میکند؛این مقاله معنایِ خانهها را روشن میکند. راهنمایCTI نیز تطبیقِ پرونده را از احرازِ هویت جدا میکند.
برای نیازِ منشیِ تلفنیِ اپرا،قواعدِ خط و داخلی را با مسئولِ همان مرکز مطرح کنید. شناسهٔ درستقالب به معنیِ رضایتِ تماس،دسترسیِ مجاز یا پاسخگوییِ قطعی نیست؛این تمرین هیچ قابلیتی دربارهٔ تبدیلِ شماره یا انتقالِ تماسِ محصول را وعده نمیدهد.
فایل تمرین و منبع
کدِ کاملِ محلیِ تمرین و کنترلهایش · دادهٔ اصیل و نتیجهٔ اجرای واقعی؛ نویسههای کنترلی escape شدهاند
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.