Remote Phone Book مبتنی بر XML با LDAP یک روش نیست. در Remote Phone Book تلفن معمولاً یک فایل XML را از Web Server دانلود و داخل Cache نگه میدارد؛ اما در LDAP تلفن هنگام جستوجو یا تطبیق تماس، Query را به LDAP Server میفرستد. بنابراین علت خرابی این دو نیز متفاوت است.
در این آموزش ابتدا URL، شبکه و Authentication را بررسی میکنیم؛ بعد ساختار XML، Cache و Refresh، نامهای فارسی و Encoding را تست میکنیم. سپس سراغ LDAP میرویم و Base DN، Bind User، Name Filter، Number Filter، Attributeها، TLS، LDAPS و تطبیق شماره تماسگیرنده را مرحلهبهمرحله بررسی میکنیم.
اول مشخص کنید از Remote Phone Book استفاده میکنید یا LDAP
| ویژگی | Remote Phone Book | LDAP |
|---|---|---|
| منبع اطلاعات | فایل XML روی Web Server | LDAP Directory Server |
| نوع دسترسی | HTTP/HTTPS Download | LDAP / StartTLS / LDAPS |
| روش بهروزرسانی | Cache و Refresh | Query هنگام Search/Lookup |
| احراز هویت | Username/Password برای URL | Bind DN و Password |
| ساختار داده | XML Schema مورد انتظار Yealink | DN، Attribute و LDAP Filter |
| خرابی رایج | URL، Auth، Cache، XML Format | Base DN، Filter، Attribute، TLS |
یک اشتباه رایج: Remote Phone Book قرار نیست لحظهای Sync شود
Yealink در مستندات فعلی صریحاً توضیح میدهد Remote Phone Book بهصورت Real-time با Server همگام نیست.
یعنی اگر فایل XML روی Server را تغییر دهید، ممکن است تلفن همچنان نسخه Cache شده قبلی را نمایش دهد.
پارامتر Refresh:
features.remote_phonebook.flash_time = 21600
مقدار 21600 ثانیه برابر ۶ ساعت است و در مستندات فعلی Yealink مقدار پیشفرض محسوب میشود.
برای تست، Refresh را کوتاهتر کنید
برای محیط آزمایشی میتوانید مثلاً Refresh را روی یک ساعت قرار دهید:
features.remote_phonebook.flash_time = 3600
اگر مقدار صفر باشد، Refresh خودکار Cache غیرفعال میشود.
Refresh هنگام بازکردن دفترچه تلفن
در مدلهای پشتیبانیشده Yealink پارامتر زیر نیز وجود دارد:
features.remote_phonebook.enter_update_enable = 1
این گزینه باعث میشود هنگام ورود کاربر به Remote Phone Book، تلفن Cache را Refresh کند.
در مدلهایی که این گزینه وجود ندارد، از دکمه Update، Web UI یا Restart برای تست استفاده کنید.
مرحله اول: URL دفترچه تلفن را از خود شبکه تست کنید
قبل از بررسی XML، مطمئن شوید URL واقعاً در دسترس است.
نمونه:
https://pbx.example.com/phonebook/Menu.xml
همین URL را از سیستمی داخل VLAN تلفنها باز کنید.
مهم است که تست از همان مسیر شبکهای باشد که Yealink استفاده میکند؛ سالمبودن URL روی لپتاپی در یک VLAN دیگر، سالمبودن Route و Firewall تلفن را ثابت نمیکند.
DNS را جداگانه بررسی کنید
اگر URL با Domain تعریف شده است، ابتدا Resolve شدن آن را تست کنید.
nslookup pbx.example.com
اگر با IP کار میکند ولی با Domain نه، Remote Phone Book یا LDAP مشکل اصلی نیست؛ DNS تلفن یا VLAN را بررسی کنید.
از خود Yealink Ping بگیرید
در بسیاری از مدلها از Web UI به بخش:
Network → Diagnostics
بروید و IP Server را Ping کنید.
اگر Ping نیز شکست میخورد، ابتدا Gateway، VLAN، DNS، ACL و Firewall را بررسی کنید.
مرحله دوم: Remote Phone Book را در Web UI بررسی کنید
در بسیاری از مدلهای فعلی مسیر:
Directory → Remote Phone Book
است.
پارامترهای اصلی عبارتاند از:
remote_phonebook.data.1.url
remote_phonebook.data.1.name
remote_phonebook.data.1.username
remote_phonebook.data.1.password
نمونه Configuration ساده Remote Phone Book
remote_phonebook.data.1.url = https://pbx.example.com/phonebook/Menu.xml
remote_phonebook.data.1.name = Company Directory
remote_phonebook.data.1.username = yealink-phonebook
remote_phonebook.data.1.password = StrongPassword
features.remote_phonebook.flash_time = 3600
نام کاربری و رمز بالا فقط نمونه هستند.
اگر Server احراز هویت میخواهد
Yealink Username و Password مجزایی برای Remote Phone Book دارد.
اگر این اطلاعات اشتباه باشند، در Diagnostic ممکن است خطای Authentication دیده شود.
کد خطای مستندشده Yealink:
0x0009000001060003
Auth Error
Credential را داخل URL بگذاریم؟
مستند Yealink امکان قراردادن Username و Password داخل URL را هم ذکر میکند:
http://user:password@server.example.com/RemotePhonebook.xml
اما برای محیط Production بهتر است در صورت پشتیبانی از فیلدهای اختصاصی Username و Password استفاده کنید؛ چون Credential داخل URL ممکن است در Log، History یا Configuration Export دیده شود.
اگر URL باز میشود ولی Yealink خطای Format میدهد
Yealink برای XML نامعتبر خطای مشخصی دارد:
0x0009000001060001
Download file format error
این یعنی HTTP ممکن است 200 OK باشد، اما محتوای فایل مطابق Schema مورد انتظار تلفن نیست.
یک XML ساده و سالم برای تست بسازید
برای اینکه Server و Phone را از فایل اصلی جدا کنید، ابتدا یک Phonebook بسیار کوچک بسازید:
<?xml version="1.0" encoding="UTF-8"?>
<YealinkIPPhoneDirectory>
<DirectoryEntry>
<Name>پشتیبانی ایرانیکاسرور</Name>
<Telephone>02191302467</Telephone>
</DirectoryEntry>
<DirectoryEntry>
<Name>فروش</Name>
<Telephone>200</Telephone>
</DirectoryEntry>
</YealinkIPPhoneDirectory>
اگر این فایل کوچک درست نمایش داده شد ولی فایل Production نه، مسیر شبکه و Authentication سالماند و باید ساختار یا حجم XML اصلی را بررسی کنید.
Remote Phone Book چند سطحی چگونه ساخته میشود؟
Yealink برای Remote Phone Book ساختار Menu.xml و Department.xml را مستند کرده است.
Menu.xml گروهها را تعریف میکند و Department.xml مخاطبان هر گروه را نگه میدارد.
نمونه Menu:
<MenuItem>
<Name>پشتیبانی</Name>
<URL>https://pbx.example.com/phonebook/support.xml</URL>
</MenuItem>
<MenuItem>
<Name>فروش</Name>
<URL>https://pbx.example.com/phonebook/sales.xml</URL>
</MenuItem>
نمونه Department.xml
<YealinkIPPhoneDirectory>
<DirectoryEntry>
<Name>واحد فنی</Name>
<Telephone label="داخلی">201</Telephone>
<Telephone label="موبایل">09120000000</Telephone>
</DirectoryEntry>
</YealinkIPPhoneDirectory>
اگر فقط بعضی مخاطبان نمایش داده نمیشوند
XML را برای Tag ناقص، کاراکتر رزروشده یا Closing Tag جاافتاده بررسی کنید.
برای مثال استفاده مستقیم از علامت ampersand داخل XML میتواند فایل را نامعتبر کند.
این اشتباه است:
<Name>فروش & پشتیبانی</Name>
در XML باید Escape شود:
<Name>فروش & پشتیبانی</Name>
نامهای فارسی خراب نمایش داده میشوند؛ مشکل کجاست؟
اگر حروف فارسی به شکل علامت سؤال، کاراکترهای عجیب یا متن خراب ظاهر میشوند، Encoding فایل و HTTP Response را بررسی کنید.
برای فایلهای فارسی، یک روش مطمئن این است که فایل واقعاً با UTF-8 ذخیره شود و Declaration نیز همان Encoding را اعلام کند:
<?xml version="1.0" encoding="UTF-8"?>
فقط نوشتن UTF-8 در Header کافی نیست؛ Byteهای خود فایل نیز باید UTF-8 باشند.
Content-Type سرور را هم بررسی کنید
برای جلوگیری از اختلاف تفسیر Encoding بهتر است Web Server پاسخ XML را با Charset هماهنگ برگرداند.
نمونه مناسب:
Content-Type: application/xml; charset=UTF-8
اگر فایل UTF-8 است ولی Web Server آن را با Charset دیگری معرفی میکند، نمایش فارسی میتواند غیرقابل پیشبینی شود.
حجم فایل Remote Phone Book را بررسی کنید
در مستندات فعلی Yealink برای بسیاری از تلفنهای رنگی، فایل Remote Phone Book باید کمتر از حدود 1.5MB باشد.
در بعضی تلفنهای قدیمی با نمایشگر سیاهوسفید محدودیت پایینتر و در حدود 768KB ذکر شده است.
Yealink همچنین توصیه میکند تعداد Remote Contactها را در حد معقول نگه دارید و در بسیاری از مستندات مقدار کمتر از 5000 مخاطب پیشنهاد شده است.
اگر Phonebook کوچک کار میکند ولی فایل بزرگ نه، حجم و تعداد مخاطب را بررسی کنید.
کد خطای حجم بیش از حد
0x0009000001060002
Download limit exceeded
اگر Yealink میگوید Network Unavailable
در Remote/XML Phonebook این پیام همیشه به معنی قطع کامل اینترنت نیست.
موارد زیر میتوانند همین علامت را ایجاد کنند:
| علت | بررسی |
|---|---|
| DNS | Domain Resolve نمیشود |
| Routing | Phone به Server Route ندارد |
| Firewall | HTTP/HTTPS مسدود است |
| Certificate | HTTPS Trust شکست میخورد |
| URL | Path یا Port اشتباه است |
| Authentication | Server درخواست دسترسی را رد میکند |
مرحله سوم: HTTP کار میکند ولی HTTPS نه
این تست محل مشکل را سریع محدود میکند.
اگر همان Phonebook با HTTP دانلود میشود اما HTTPS شکست میخورد، XML Schema و Credential تا حد زیادی از فهرست مظنونها خارج میشوند.
حالا Certificate، TLS Version، Cipher و Timeout را بررسی کنید.
Certificate را روی تلفن بررسی کنید
Yealink در راهنمای عیبیابی فعلی اعلام میکند برای HTTPS باید Certificate موردنیاز روی تلفن شناخته شود.
اگر Server از CA خصوصی استفاده میکند، CA Certificate مناسب را روی Yealink وارد کنید.
غیرفعالکردن Certificate Verification ممکن است برای تست موقت مفید باشد، اما راهحل دائمی امن نیست. پس از تشخیص، Trust صحیح را برقرار و Verification را دوباره فعال کنید.
TLS Version نیز ممکن است مشکل ایجاد کند
اگر HTTP سالم و HTTPS خراب است و Certificate نیز صحیح است، TLS Version و Encryption Algorithm را بررسی کنید.
Server بسیار قدیمی یا بسیار محدودشده ممکن است با Firmware تلفن روی نسخه یا Cipher مشترک توافق نکند.
بهجای پایینآوردن دائمی امنیت Server، Firmware تلفن و TLS Policy هر دو سمت را بررسی کنید.
مرحله چهارم: Auto Provisioning تنظیم Phonebook را بازنویسی نمیکند؟
اگر URL را در Web UI اصلاح میکنید و کار میکند اما بعد از Reboot دوباره خراب میشود، Configuration مرکزی را بررسی کنید.
ممکن است Common CFG یا MAC CFG دوباره URL قبلی را Push کند:
remote_phonebook.data.1.url = https://old.example.com/phonebook.xml
در این حالت Source of Truth را در Provisioning اصلاح کنید، نه فقط خود تلفن را.
اگر تنظیمات بعد از Reboot برمیگردند، راهنمای رفع مشکل Auto Provisioning در Yealink نیز برای ادامه بررسی مناسب است.
حالا برویم سراغ LDAP
LDAP برخلاف Remote Phone Book فایل XML را دانلود نمیکند. تلفن به LDAP Server وصل میشود و بر اساس Filter و Base DN جستوجو انجام میدهد.
پس اگر LDAP خالی است باید پنج چیز را جداگانه بررسی کنید:
اتصال شبکه،
Bind Authentication،
Base DN،
Search Filter،
و Attribute Mapping.
مسیر تنظیم LDAP در Yealink
در بسیاری از تلفنهای فعلی:
Directory → LDAP
را باز کنید و LDAP را Enable کنید.
پارامترهای اصلی:
ldap.enable
ldap.host
ldap.port
ldap.base
ldap.user
ldap.password
ldap.name_filter
ldap.number_filter
ldap.name_attr
ldap.numb_attr
ldap.display_name
ldap.version
نمونه LDAP برای OpenLDAP
ldap.enable = 1
ldap.host = ldap.example.local
ldap.port = 389
ldap.base = ou=People,dc=example,dc=local
ldap.user = cn=yealink-reader,ou=Service,dc=example,dc=local
ldap.password = StrongPassword
ldap.name_filter = (|(cn=%)(sn=%))
ldap.number_filter = (|(telephoneNumber=%)(mobile=%)(ipPhone=%))
ldap.name_attr = cn sn
ldap.numb_attr = mobile telephoneNumber ipPhone
ldap.display_name = %cn
ldap.version = 3
DNها و Attributeهای بالا نمونه هستند و باید با Schema واقعی LDAP شما تطبیق داده شوند.
Base DN چیست؟
Base DN نقطهای از Directory Tree است که Yealink جستوجو را از آنجا شروع میکند.
فرض کنید ساختار شما چنین است:
dc=example,dc=local
└── ou=People
├── cn=Ali
├── cn=Reza
└── cn=Support
Base مناسب میتواند این باشد:
ou=People,dc=example,dc=local
اگر Base اشتباه باشد، Bind ممکن است موفق شود اما Search هیچ Contactی برنگرداند.
Bind User را با Base DN اشتباه نگیرید
LDAP User برای Login است، در حالی که Base مشخص میکند Search از کجا شروع شود.
نمونه Bind User:
cn=yealink-reader,ou=Service,dc=example,dc=local
بهتر است برای تلفنها یک Account فقط خواندنی با دسترسی محدود به Attributeهای لازم بسازید و از Administrator اصلی LDAP استفاده نکنید.
مرحله پنجم: Filter اشتباه یکی از رایجترین علتهای LDAP خالی است
Yealink برای جستوجوی نام مثال زیر را مستند کرده است:
(|(cn=%)(sn=%))
در این Syntax علامت `%` عبارت واردشده توسط کاربر را نمایندگی میکند.
Number Filter
برای شماره:
(|(telephoneNumber=%)(mobile=%)(ipPhone=%))
اما اگر LDAP Server شما Attribute `ipPhone` ندارد، وجود آن الزاماً مشکل نیست؛ مهم این است که Attributeهایی که واقعاً استفاده میکنید درست نامگذاری شده باشند.
چرا Filter سالم به نظر میرسد ولی نتیجه صفر است؟
ممکن است در Directory شما شماره داخل `telephoneNumber` نباشد.
مثلاً سازمان از Attribute سفارشی زیر استفاده کند:
extensionNumber
در این حالت باید Filter و Number Attribute با Schema واقعی خودتان هماهنگ شوند.
Name Attribute و Display Name را بررسی کنید
فقط پیدا شدن Object کافی نیست؛ Yealink باید بداند کدام Attribute را بهعنوان نام نمایش دهد.
نمونه:
ldap.name_attr = cn sn
ldap.display_name = %cn
اگر Server فقط `displayName` دارد ولی شما `%cn` درخواست میکنید، نتیجه نمایش ممکن است ناقص یا خالی باشد.
LDAP روی Active Directory
در Active Directory معمولاً Base به شکل Domain DN تعریف میشود:
DC=corp,DC=example,DC=com
و اگر فقط کاربران یک OU باید دیده شوند:
OU=Users,DC=corp,DC=example,DC=com
ساختار واقعی را از Administrator همان Directory دریافت کنید؛ DN را از روی نام Domain حدس نزنید.
مرحله ششم: LDAP Lookup تماس ورودی و خروجی را فعال کنید
ممکن است Search دستی LDAP کاملاً کار کند اما هنگام تماس نام مخاطب نمایش داده نشود.
در این حالت دو پارامتر مهم هستند:
ldap.call_in_lookup = 1
ldap.call_out_lookup = 1
اولی Lookup تماس ورودی و دومی Lookup تماس خروجی را فعال میکند.
Search دستی کار میکند ولی تماس ورودی Match نمیشود
در این وضعیت معمولاً Connection و Bind سالماند.
حالا فرمت شماره را مقایسه کنید.
LDAP ممکن است این شماره را ذخیره کرده باشد:
09121234567
ولی PBX در تماس ورودی این را ارسال کند:
+989121234567
در این حالت LDAP سالم است اما Number Matching شکست میخورد.
Caller ID و LDAP به هم وابستهاند
اگر شماره ورودی روی Yealink اشتباه باشد، Directory Lookup نیز ممکن است مخاطب اشتباه یا هیچ مخاطبی را پیدا نکند.
پس اگر Search دستی با نام کار میکند ولی Incoming Lookup نه، SIP Caller ID و فرمت شماره را نیز بررسی کنید.
مرحله هفتم: LDAP روی 389 کار میکند ولی LDAPS نه
این یکی از تشخیصیترین تستهاست.
اگر Plain LDAP سالم است اما LDAPS شکست میخورد، Base DN و Filter احتمالاً مشکل اصلی نیستند.
حالا Certificate، TLS و Port را بررسی کنید.
حالتهای TLS در Yealink LDAP
| مقدار | حالت | پورت رایج |
|---|---|---|
| 0 | LDAP بدون رمزگذاری | 389 |
| 1 | LDAP StartTLS | 389 |
| 2 | LDAPS | 636 |
پارامتر:
ldap.tls_mode = 2
LDAPS و CA Certificate
Yealink برای خطاهای LDAPS صریحاً یکی از علتها را شناسایینشدن CA Certificate صحیح اعلام میکند.
اگر Server Certificate با CA خصوصی امضا شده، Root یا Intermediate CA موردنیاز باید در Trust Store تلفن وجود داشته باشد.
Certificate را روی همه تلفنها با Provisioning مرکزی Push کنید تا بعد از Factory Reset دوباره مشکل برنگردد.
Domain Name در LDAPS مهم است
اگر Certificate برای:
ldap.example.com
صادر شده اما تلفن با IP زیر وصل شود:
192.168.10.20
بسته به Validation ممکن است Name Match شکست بخورد. بهتر است DNS و Certificate Name مطابق طراحی صحیح استفاده شوند.
Yealink برای LDAPS خطاهای TLS جداگانه دارد
در مستندات فعلی، Failure در TLS Algorithm Negotiation و TLS Protocol Version بهعنوان خطاهای مستقل ذکر شدهاند.
پس اگر CA درست است ولی هنوز Handshake شکست میخورد، TLS Policy سرور و Firmware Phone را مقایسه کنید.
در Production بهجای پایینآوردن کورکورانه Security Level، علت عدم توافق را پیدا کنید.
تست LDAPS از یک سیستم مدیریتی
روی Linux میتوانید Certificate و Handshake را جداگانه مشاهده کنید:
openssl s_client -connect ldap.example.com:636 -servername ldap.example.com
این تست رفتار دقیق Yealink را شبیهسازی نمیکند، اما Certificate Chain، Expiry و TLS Handshake سرور را قابل مشاهده میکند.
LDAP را خارج از Yealink هم تست کنید
برای اینکه مشخص شود Filter و Credential واقعاً صحیحاند، همان Query را با ابزار LDAP اجرا کنید.
نمونه Linux:
ldapsearch \
-H ldap://ldap.example.local:389 \
-D "cn=yealink-reader,ou=Service,dc=example,dc=local" \
-W \
-b "ou=People,dc=example,dc=local" \
"(|(cn=Ali)(sn=Ali))" \
cn sn telephoneNumber mobile
اگر همین Query بیرون از Phone نیز نتیجه ندارد، تغییر Firmware تلفن کمکی نمیکند.
برای LDAPS
ldapsearch \
-H ldaps://ldap.example.com:636 \
-D "cn=yealink-reader,ou=Service,dc=example,dc=local" \
-W \
-b "ou=People,dc=example,dc=local" \
"(cn=Ali)"
نامهای فارسی در LDAP
اگر Search انگلیسی کار میکند اما نام فارسی نتیجه نمیدهد، ابتدا بررسی کنید خود LDAP Record واقعاً Unicode صحیح ذخیره کرده است.
مثلاً مقدار `cn` را با ldapsearch ببینید.
اگر خروجی Server صحیح است ولی Yealink نمایش خراب دارد، Firmware و Charset مسیر را بررسی کنید. در LDAP مدرن رشتهها بهصورت UTF-8 منتقل میشوند، بنابراین تبدیل دستی فارسی به ANSI یا Windows-1256 راهحل مناسبی نیست.
اگر فارسی فقط در Remote XML خراب است ولی LDAP سالم است
این نشانه بسیار خوبی است.
نمایش Font و خود Phone احتمالاً فارسی را پشتیبانی میکنند و مشکل بیشتر در Encoding فایل XML یا HTTP Response قرار دارد.
فایل را با UTF-8 واقعی دوباره ذخیره کنید و Declaration/Content-Type را هماهنگ کنید.
اگر فارسی در هر دو روش خراب است
Firmware، Language Pack و مدل Phone را بررسی کنید.
همچنین یک نام فارسی بسیار ساده بدون نیمفاصله، Emoji یا کاراکترهای خاص تست کنید تا مشخص شود مشکل مربوط به Unicode عمومی است یا فقط چند کاراکتر خاص.
مرحله هشتم: Timeout و تعداد Resultها
LDAP Server ممکن است سالم باشد اما Query بسیار سنگین باعث Timeout شود.
Base DN را تا جای ممکن محدود کنید و Filterهایی بنویسید که فقط Objectهای موردنیاز را جستوجو کنند.
همچنین Max Hits را بیدلیل بسیار بزرگ نکنید.
مقدار پیشفرض بسیاری از تنظیمات فعلی Yealink برای Max Hits برابر 50 است و برای دفترچه تلفن سازمانی معمولاً شروع مناسبی است.
Filter خیلی باز میتواند مشکلساز شود
این Query:
(objectClass=*)
میتواند هزاران Object بیربط شامل Computer، Group و Service Account را برگرداند.
برای Phonebook بهتر است Filter را مطابق Schema Directory محدود کنید.
نمونه Filter محدودتر برای Active Directory
(&(objectCategory=person)(objectClass=user)(|(cn=%)(displayName=%)))
این فقط یک نمونه است و باید با ساختار واقعی Active Directory شما تست شود.
مرحله نهم: چرا شمارهها با Label اشتباه نمایش داده میشوند؟
در LDAP ممکن است یک Contact چند شماره داشته باشد:
telephoneNumber: 201
mobile: 09121234567
homePhone: 02112345678
اگر `ldap.numb_attr` با ترتیب موردنظر شما هماهنگ نباشد، Yealink ممکن است شمارهای را زیر Label دیگری نشان دهد.
Attribute Mapping را بر اساس Server خود تنظیم کنید.
مرحله دهم: W70/W80/W90 را جداگانه بررسی کنید
در سیستمهای DECT، Phonebook فقط مسئله خود Handset نیست.
W70B و DECT Managerهای W80/W90 میتوانند Remote Phone Book و LDAP را از سطح Base/Manager مدیریت کنند.
در W70B حتی Remote Phone Book Assignment برای Handsetهای مختلف وجود دارد.
بنابراین ممکن است Phonebook روی Base تعریف شده باشد اما Handset موردنظر اجازه دسترسی به آن را نداشته باشد.
Remote Phonebook Assignment در W70B
در مدلهای پشتیبانیشده:
remote_phonebook.assignment.enable = 1
handset.1.remote_phonebook_access = 1,2
اگر Assignment فعال باشد ولی Handset به Phonebook موردنظر اختصاص داده نشده باشد، کاربر آن دفترچه را نمیبیند.
سناریوی اول: فایل XML روی کامپیوتر باز میشود ولی Yealink خالی است
Schema XML، Root Element و Tagها را بررسی کنید.
یک فایل دو Contactی ساده بسازید.
اگر فایل ساده کار کرد، Data اصلی یا حجم فایل مشکل دارد.
سناریوی دوم: Phonebook روی نسخه قدیمی مانده است
این احتمالاً Cache است.
Manual Update انجام دهید یا Flash Time را بررسی کنید.
اگر بعد از Update همچنان نسخه قبلی دیده میشود، HTTP Cache Header یا Reverse Proxy را نیز بررسی کنید.
سناریوی سوم: HTTP کار میکند ولی HTTPS نه
Certificate Chain، CA روی Yealink، TLS Version و Cipherها را بررسی کنید.
غیرفعالکردن Certificate Verification فقط برای تشخیص موقت انجام شود.
سناریوی چهارم: Remote Phone Book خطای Auth دارد
Username و Password را دوباره وارد کنید.
با همان Credential از Client دیگری URL را تست کنید.
اگر از Reverse Proxy استفاده میکنید، بررسی کنید Authentication Header به Backend منتقل میشود.
سناریوی پنجم: فقط نامهای فارسی خراباند
XML را UTF-8 واقعی ذخیره کنید.
Declaration را روی UTF-8 قرار دهید.
HTTP Charset را بررسی کنید.
یک فایل کوچک فقط با یک نام فارسی تست کنید.
سناریوی ششم: LDAP هیچ نتیجهای ندارد
اول Bind را خارج از Phone با ldapsearch تست کنید.
بعد Base DN و Name Filter را بررسی کنید.
اگر Bind موفق ولی Search صفر است، معمولاً Base یا Filter اشتباه است.
سناریوی هفتم: LDAP با IP کار میکند ولی Domain نه
DNS را بررسی کنید.
در LDAPS بهتر است مشکل DNS را حل کنید و به IP دائمی برنگردید؛ چون Certificate معمولاً برای Hostname صادر شده است.
سناریوی هشتم: LDAP روی 389 کار میکند ولی 636 نه
CA Certificate، Server Certificate، TLS Version و Algorithm Negotiation را بررسی کنید.
این نتیجه نشان میدهد Credential، Base و Filter احتمالاً صحیحاند.
سناریوی نهم: Search LDAP کار میکند ولی Caller Name نمایش داده نمیشود
`ldap.call_in_lookup` را بررسی کنید.
بعد فرمت شماره داخل SIP و LDAP را مقایسه کنید.
+98، 98 و 0 میتوانند Matching را خراب کنند.
سناریوی دهم: تنظیمات بعد از Reboot برمیگردند
Auto Provisioning یا PBX Device Template را بررسی کنید.
اگر Configuration مرکزی دارید، تمام اصلاحات Phonebook و LDAP باید در همان Source of Truth اعمال شوند.
چکلیست سریع Remote Phone Book
| مرحله | بررسی | نتیجه مطلوب |
|---|---|---|
| ۱ | DNS/IP | Server قابل دسترس |
| ۲ | URL | فایل با HTTP 200 باز شود |
| ۳ | Authentication | Credential پذیرفته شود |
| ۴ | XML Schema | YealinkIPPhoneDirectory معتبر |
| ۵ | Encoding | UTF-8 هماهنگ |
| ۶ | File Size | داخل محدودیت مدل |
| ۷ | HTTPS | Certificate مورد اعتماد |
| ۸ | Refresh | Cache بهروز شود |
| ۹ | Provisioning | URL بعد از Reboot ثابت بماند |
چکلیست سریع LDAP
| مرحله | بررسی | نتیجه مطلوب |
|---|---|---|
| ۱ | Host/DNS | Server Resolve و Reach شود |
| ۲ | Port | 389 یا 636 مطابق Mode |
| ۳ | Bind | Username/Password معتبر |
| ۴ | Base DN | Search از شاخه صحیح |
| ۵ | Name Filter | نتیجه با نام برگردد |
| ۶ | Number Filter | شماره پیدا شود |
| ۷ | Attributes | Name/Number صحیح نمایش داده شود |
| ۸ | Incoming Lookup | نام تماسگیرنده Match شود |
| ۹ | TLS/CA | Handshake بدون خطا |
| ۱۰ | Number Format | +98/0 با Directory هماهنگ باشد |
پرسشهای متداول درباره Remote Phone Book و LDAP در Yealink
چرا Remote Phone Book یالینک بعد از تغییر فایل بهروز نمیشود؟
Remote Phone Book بهصورت Real-time Sync نمیشود و از Cache استفاده میکند. Refresh دستی، Restart، Update داخل Phone یا تنظیم features.remote_phonebook.flash_time را بررسی کنید.
چرا Yealink فایل XML را دانلود نمیکند؟
URL، DNS، Firewall، Authentication، HTTPS Certificate و ساختار XML را بررسی کنید. Yealink برای Format Error، Auth Error و Network Unavailable خطاهای جداگانه دارد.
ساختار XML دفترچه تلفن Yealink چگونه است؟
برای Contactهای ساده میتوان از YealinkIPPhoneDirectory و DirectoryEntry شامل Name و Telephone استفاده کرد. برای ساختار گروهی نیز Menu.xml و Department.xml پشتیبانی میشوند.
چرا نام فارسی در Remote Phone Book خراب است؟
فایل را با UTF-8 واقعی ذخیره کنید، XML Declaration را با Encoding فایل هماهنگ کنید و HTTP Content-Type/Charset را بررسی کنید.
چرا LDAP Yealink هیچ نتیجهای پیدا نمیکند؟
Bind Credential، Base DN، Name Filter، Number Filter و Attributeها را بررسی کنید. اگر Bind موفق باشد ولی Search صفر برگرداند، Base یا Filter از مظنونهای اصلی هستند.
پورت LDAP در Yealink چیست؟
LDAP معمولی و StartTLS معمولاً روی پورت 389 استفاده میشوند و LDAPS معمولاً روی پورت 636 قرار دارد.
چرا LDAP روی 389 کار میکند ولی LDAPS روی 636 نه؟
CA Certificate، Certificate Chain، TLS Version و Algorithm Negotiation را بررسی کنید. Yealink این خطاها را برای LDAPS بهصورت جداگانه مستند کرده است.
چرا Search دستی LDAP کار میکند ولی نام تماسگیرنده نمایش داده نمیشود؟
ldap.call_in_lookup را فعال کنید و فرمت شماره در SIP و LDAP را مقایسه کنید. تفاوت +98، 98 یا 0 میتواند Number Matching را خراب کند.
آیا بهتر است LDAP بدون TLS استفاده شود؟
برای تست محدود میتواند به تشخیص کمک کند، اما در شبکه Production بهتر است Credential و Queryهای Directory روی ارتباط رمزگذاریشده و با Certificate معتبر منتقل شوند.
چرا تنظیم Phonebook بعد از Reboot عوض میشود؟
Auto Provisioning، RPS یا Device Template ممکن است URL یا LDAP Configuration قبلی را دوباره روی تلفن اعمال کند. Source of Truth را در سیستم مدیریت مرکزی اصلاح کنید.
جمعبندی
وقتی دفترچه تلفن Yealink Sync نمیشود، اول Remote Phone Book را از LDAP جدا کنید. Remote Phone Book یک فایل XML را دانلود و Cache میکند و بهروزرسانی آن لحظهای نیست؛ در حالی که LDAP هنگام Search یا Caller Lookup مستقیماً Directory Server را Query میکند.
برای Remote Phone Book ابتدا URL، DNS، Authentication و HTTPS را بررسی کنید. سپس یک XML کوچک و استاندارد بسازید تا Network را از Schema جدا کنید. اگر فایل فارسی دارید، UTF-8 واقعی، XML Declaration و Charset پاسخ Web Server را با هم هماهنگ نگه دارید.
اگر مشکل LDAP است، مسیر را از Network و Bind شروع کنید. بعد Base DN، Filter، Name/Number Attribute و Display Name را بررسی کنید. Search موفق با ldapsearch ولی شکست روی Yealink معمولاً سرنخ خوبی برای تمرکز روی Configuration Phone یا TLS است.
اگر LDAP روی 389 کار میکند ولی LDAPS روی 636 نه، Certificate و TLS را بررسی کنید. اگر Search دستی سالم ولی Caller Lookup خراب است، فرمت شماره تماس و گزینههای Incoming/Outgoing Lookup اهمیت بیشتری دارند.
در نهایت Auto Provisioning را فراموش نکنید. اگر تنظیمات دستی بعد از Restart برمیگردند، مشکل را روی خود Phone تکرار نکنید؛ Template مرکزی را اصلاح کنید تا همه تلفنهای سازمان یک Configuration پایدار و امن داشته باشند.
LDAP، XML و اتصال امن Directory را بررسی کنید
اگر Remote Phone Book یا LDAP روی تلفنهای Yealink خالی است، دیر بهروز میشود یا Lookup تماسها درست کار نمیکند، میتوانید درخواست بررسی کانفیگ ثبت کنید تا شبکه، Directory Server، TLS و تنظیمات تلفن متناسب با همان ساختار بررسی شوند.
تماس با پشتیبانی ایرانیکاسرور






دیدگاهها (۰)