عند تطوير Askozia PBX ، واجهنا مهمة إعداد الهواتف تلقائيًا وحلها بطريقتنا الخاصة.
Autoprovisioning Plug & Play (PnP) ، ويدعم هذه التكنولوجيا من قبل العديد من الشركات المصنعة - Yealink ، Snom ، Fanvil.
المزايا الرئيسية لإعدادات الهاتف التلقائي:
- يسهل الإعداد الأولي - لا حاجة للذهاب إلى واجهة الويب لكل جهاز. يكفي الإشارة إلى مراسلات عنوان MAC للجهاز والحساب على خادم الضبط التلقائي.
- يبسط الدعم - يصبح الأمر أسهل إذا كنت بحاجة إلى تغيير إعدادات الجهاز. نحن نتحكم في الإعدادات مرة أخرى على الخادم
- من الممكن تقليل الإعداد إلى مجموعة الرموز النجمية "* 911 * <SIP_ACC>" - في بعض الحالات ، لا يكون لهذه الوظيفة ببساطة سعر. لن يتمكن كل موظف في المكتب من تكوين هاتف IP ، لكن الاتصال بمجموعة من الأرقام مهمة بسيطة.
دعنا نصف كيف تعمل ميزة Autoprovisioning Plug & Play.
في نهاية المقال ، رابط إلى الكود المصدري لبرنامج نصي PHP صغير يقوم بتنفيذ وظيفة خادم PnP.
دراسة حالة
كان لدينا حالة مثيرة للاهتمام عند تقديم الاتصالات الهاتفية لأحد عملائنا. المشكلة الرئيسية هي أن العميل كان في مدينة أخرى. في الوقت نفسه ، كان أحد المتطلبات أنه بعد تفريغ الطرد بالهواتف وتوصيلها بالشبكة ، يجب أن تعمل المهاتفة على الفور.
تم حل المشكلة ببساطة نسبيا. قام العميل بحجز عدد من عناوين IP الخاصة بنا. قمنا بإعداد المعدات في مكتبنا وتعبئتها في صندوق وإرسالها عن طريق البريد.
باستخدام التكوين التلقائي للجهاز ، ستصبح المهمة أكثر بساطة.
مخطط PnP المبسط
يرسل الهاتف في بداية العمل طلب بث
SIP SUBSCRIBE إلى عنوان IP
للإرسال المتعدد
224.0.1.75 .
قراءة المزيد عن 224.0.1.75224.0.1.75 - هذا هو IP الإرسال المتعدد (للإرسال المتعدد) "محفوظة" لخوادم SIP.
راجع
networksorcery.com/Enp/protocol/sip.htm224.0.1.75 SIP ، بروتوكول بدء الجلسة (جميع الخوادم).
رداً على ذلك ، يتوقع تلقي رد
NOTIFY مع إرشادات التكوين.

مثال على الاشتراك2019/09/02 09:26:41.543856 172.16.32.148:5059 -> 224.0.1.75:5060 SUBSCRIBE sip:MAC0015657322ff@224.0.1.75 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 1 SUBSCRIBE Contact: <sip:MAC0015657322ff@172.16.32.148:5059> Max-Forwards: 70 User-Agent: Yealink SIP-T21P 34.72.14.6 Expires: 0 Event: ua-profile;profile-type="device";vendor="Yealink";model="T21D";version="34.72.14.6" Accept: application/url Content-Length: 0
العناوين الأكثر أهمية ومثيرة للاهتمام
- من - عنوان الخشخاش للجهاز هو 0015657322ff
- حدث - يصف بشكل شامل الجهاز والشركة المصنعة والطراز وإصدار البرنامج الثابت
- الاتصال - عنوان الجهاز
- Call-ID - هذا الرأس مثير للاهتمام عند تكوين أجهزة DECT من Yealink ، فهو ينقل معرف الخط (الرقم التسلسلي للأنبوب) ، والمحدد " _ "
بمجرد تلقي خادم PnP مثل هذا الطلب ، يجب أن يستجيب
مثال المثال 2019/09/02 09:26:41.550125 172.16.32.153:57593 -> 172.16.32.148:5059 NOTIFY sip:172.16.32.148:5059 SIP/2.0 Via: SIP/2.0/UDP 172.16.32.148:5059;branch=z9hG4bK42032775 Max-Forwards: 20 Contact: <sip:172.16.32.148:5059;transport=UDP;handler=dum> From: <sip:MAC0015657322ff@224.0.1.75>;tag=42032772 To: <sip:MAC0015657322ff@224.0.1.75> Call-ID: 42032772@172.16.32.148 CSeq: 3 NOTIFY Content-Type: application/url Subscription-State: terminated;reason=timeout Event: ua-profile;profile-type="device";vendor="MIKO";model="MikoServerPnP";version="1.8" Content-Length: 40 http://172.16.32.153:84/0015657322ff.cfg
في رسالة NOTIFY ، تكون المعلومات الأكثر قيمة في نص الرسالة. كقاعدة عامة ، في الجسم يجب عليك تمرير رابط للحصول على ملف التكوين:
http://172.16.32.153:84/0015657322ff.cfg
إذا كانت هناك عدة خوادم PnP تعمل على الشبكة ، فسيكون ذلك هو أول من يستجيب للجهاز.
عند استلام NOTIFY ، يحاول الهاتف تلبية الطلب على العنوان المحدد.
طلب الخادم ومثال الاستجابة # curl -i http://172.16.32.153:84/0015657322ff.cfg HTTP/1.0 200 OK Content-type: text/plain Date: Mon, 02 Sep 2019 06:52:23 GMT Connection: close Accept-Ranges: bytes Last-Modified: Mon, 02 Sep 2019 06:25:02 GMT Content-length: 769 #!version:1.0.0.1 account.1.enable = 1 account.1.label = PnP (203) ...
مثال تنفيذ الخادم متاح على github
https://github.com/boffart/MikoServerPnPلكي يعمل خادم PnP هذا ، يجب عليك:
- PHP 7.1.9
- مآخذ php
- BusyBox v1.26.2
- يجب السماح بطلبات البث على الشبكة
ميزات خادم PnP
- يستمع إلى الطلبات المرسلة إلى العنوان " 224.0.1.75:5060 "
- عند بدء تشغيله ، يبدأ تشغيل خادم الويب ( busybox httpd )
- يسمح لك بإنشاء تكوين مبسط للهاتف
- يسمح لك بإرسال إلى Yealink NOTIFY لإعادة التشغيل
يتيح لك استخدام خادم PnP استخدام "الروابط لمرة واحدة".
لنفترض أننا نقدم الملف من خلال الرابط:
http://172.16.32.153:84/0015657322ff.cfg
الرابط المباشر المعتاد للملف. من الواضح ، هذه ليست آمنة. معرفة عنوان MAC للهاتف وعنوان الخادم ، يمكنك محاولة الحصول على التكوين مع تسجيل الدخول وكلمات المرور.
عند العمل مع خادم PnP ، من الممكن إعطاء رابط فريد لكل طلب اشتراك:
http://172.16.32.153:84/?mac=0015657322ff&hash=0a67f5290
مثال على صيغة لحساب التجزئة:
hash = md5(MAC + DATE + PID)
PID هو معرف العملية لخادم PnP.
الجذر فقط يمكن التعرف عليه.
لاختيار هذا
التجزئة هو عمليا مستحيل.
إذا حدث استئناف عبر رابط غير صالح ، فإننا نمنع الآفة.
إعادة تشغيل Yealink NOTIFY يعني دون إذن
نعم ، نعم ،
دون إذن .
لم أستطع إغلاق الجهاز من الإصدار الحالي للبرامج الثابتة من هذا الاحتمال.
فقط قم بتشغيل الأمر
php -f MikoServerPnP.php socket_client_notify <IP_PBX> <PORT_SIP_PBX> <IP_PHONE> <PORT_PHONE>
وسيذهب الهاتف إلى إعادة التشغيل. من خلال تعليق مثل هذا الأمر في cron ، يمكنك تحقيق تأثير مرعب. بالطبع ، هذا ممكن إذا علمنا عنوان IP ومنفذ SIP للهاتف.
مثال PHP وظيفة لإرسال الإخطار public static function socket_client_notify($ip_pbx, $port_pbx, $ip_phone, $port_phone):void { $phone_user = 'autoprovision_user'; $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $msg = "NOTIFY sip:{$phone_user}@{$ip_phone}:{$port_phone};ob SIP/2.0\r\n". "Via: SIP/2.0/UDP {$ip_pbx}:{$port_pbx};branch=z9hG4bK12fd4e5c;rport\r\n". "Max-Forwards: 70\r\n". "From: \"asterisk\" <sip:asterisk@{$ip_pbx}>;tag=as54cd2be9\r\n". "To: <sip:{$phone_user}@{$ip_phone}:{$port_phone};ob>\r\n". "Contact: <sip:asterisk@{$ip_pbx}:{$port_pbx}>\r\n". "Call-ID: 4afab6ce2bff0be11a4af41064340242@{$ip_pbx}:{$port_pbx}\r\n". "CSeq: 102 NOTIFY\r\n". "User-Agent: mikopbx\r\n". "Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE\r\n". "Supported: replaces, timer\r\n". "Subscription-State: terminated\r\n". "Event: check-sync;reboot=true\r\n". "Content-Length: 0\r\n\n"; $len = strlen($msg); socket_sendto($sock, $msg, $len, 0, $ip_phone, $port_phone); socket_close($sock); }
تكوين خادم PnP
تقع في
الإعدادات / settings.json { "url": "http://<pbx_host>:<http_port>/", "http_port": 84, "pbx_host": "172.16.32.153", "pbx_sip_port": "5060", "vm_extension": "*001", "feature_transfer": "**" }
القائمة البيضاء لماك
يمكن وصفها في
الإعدادات / mac_white.conf . فاصل - تغذية الخط.
قائمة ماك السوداء
يمكن وصفها في
الإعدادات / mac_black.conf . فاصل - تغذية الخط.
ملفات تكوين الهاتف
يجب أن توضع في دليل
التكوينات .
باستخدام خادم PnP ، يمكنك إنشاء أبسط التكوينات لـ Yeakink و Snom:
php -f MikoServerPnP.php mk_config SIP_ACCAUNT SECRET MAC
مواد مفيدة