النجمة 1.8 إلى 16

منذ حوالي 10 سنوات ، كان لدى شركتنا محطة بدون دعم رشفة وتم توصيل أول Asterisk 1.6 عبر تدفقات PRI. بعد ذلك ، أردت عمليات إعادة توجيه مع استبدال الأرقام وإدارة الفئات ، وتم العثور على chan_ss7 من netfors ، والتي يمكنها ، بعد حفظ الملف ، القيام بكل ذلك. مر الوقت وخرج PJSIP في الإصدار 13 من Aterisk ، وتم تجميع chan_ss7 تحت 1.8 فقط. وبشكل دوري ، مرة كل ستة أشهر ، كانت هناك مشاكل في الانقطاعات ، والتي تجلت في اختفاء الصوت. هم أنفسهم ظهروا ومرروا بأنفسهم.



تم استبدال المحطة الرئيسية وتعلم رشفة وتقرر ترقية النجمة إلى 16.



تم تنفيذ التثبيت على clean debian 10. تحتوي المستودعات على الإصدار 16.2.1 ، لذلك سنقوم بالبناء من المصادر. قم بتنزيل أحدث إصدار من Asterisk 16 ، الذي حصلت عليه في 16.12.0:



cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz


فكه في مجلد وانتقل إليه:



tar xzvf asterisk-16-current.tar.gz
cd asterisk-16.*


لنقم الآن بتثبيت جميع التبعيات المطلوبة في دبيان. ليست هناك حاجة لتكرارها يدويًا. يتم جمع كل التبعيات في برنامج نصي يحتاج إلى تشغيل.



contrib/scripts/install_prereq install


بعد ذلك ، قم بتنزيل مصادر mp3 اللازمة لبناء وحدة mp3.



contrib/scripts/get_mp3_source.sh


يتم تثبيت جميع التبعيات ويمكنك المتابعة إلى التجميع.



./configure
make menuselect


إلى ما يتم تثبيته افتراضيًا ، أضيف:



  • في علامة التبويب الأولى ، format_mp3.
  • في حزم الصوت الأساسية ، أشير إلى أصوات RU-WAV الروسية.
  • في حزم الصوت الإضافية ، اخترت الإنجليزية EN-WAV ، للأسف لا يوجد روسي.


تابع بعد قبول الإعدادات بالضغط على Save & Exit. تجميع:



./configure
make


ثم نقوم ببناء الحزمة وتثبيتها باستخدام checkinstall:



checkinstall


نقوم بملء الإصدار واسم الحزمة وما إلى ذلك. أكتب اسم الحزمة asterisk-16 بحيث لا يتعارض مع الاسم الموجود في المستودعات.



checkinstall


أضف مستخدمًا لتشغيل النجمة ومنح أذونات المجلد:



adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
usermod -a -G dialout,audio asterisk
chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk


نقوم بتكوين النجمة لتعمل تحت هذا المستخدم. للقيام بذلك ، أضف معلمات إلى / etc / default / asterisk config:



AST_USER="asterisk"
AST_GROUP="asterisk"


ثم قم بتحرير /etc/asterisk/modules.conf. نقوم بإزالة الأشياء غير الضرورية ، على سبيل المثال:



noload => chan_sip.so


نبدأ علامة النجمة في وحدة التحكم ونتحقق من عدم وجود أخطاء:



asterisk -cvvv


إذا كان كل شيء على ما يرام ، فقم بإضافة الخدمة لبدء التشغيل والتشغيل:



systemctl enable asterisk
systemctl start asterisk


هذا يكمل التثبيت والمضي قدما في الإعداد.



في PJSIP ، تغيرت البنية بشكل جذري ولن تعمل فقط لنسخ config. يوجد محول تهيئة في المجلد المصدر Contrib / scripts / sip_to_pjsip / sip_to_pjsip.py ، لكن التنسيق به aor منفصل ، ومعرف ، إلخ. غير ملائم وتم العثور على ناتج باستخدام pjsip_wizard. نحتاج فقط إلى إنشاء وسيلة نقل في /etc/asterisk/pjsip.conf ، أضف:



[transport-udp]
type = transport
protocol = udp
bind = x.x.x.x
external_media_address = x.x.x.x
external_signaling_address = x.x.x.x


قم بتغيير xxxx إلى عنوان IP الذي ستستمع إليه.



نقوم بإنشاء نموذج للمستخدم:



[main-template](!)
type=wizard
transport=transport-udp
accepts_auth = yes
accepts_registrations = yes
aor/qualify_frequency = 100
aor/max_contacts = 1
aor/remove_existing = yes
inbound_auth/auth_type = userpass
endpoint/disallow = all
endpoint/allow = alaw
endpoint/dtmf_mode = rfc4733
endpoint/deny = 0.0.0.0/0
endpoint/context = city_out
endpoint/direct_media = no
endpoint/device_state_busy_at = 1
endpoint/language = ru
endpoint/sdp_session = MySDp


وبعد ذلك ، سيكون لدى المستخدم العادي تكوين:



[100](main-template)
endpoint/permit=192.168.100.1
inbound_auth/username=100
inbound_auth/password=P@$$Word123
endpoint/callerid='' <100>


وهذا يشبه إلى حد بعيد تنسيق chan_sip ، ونقوم بتغيير أسماء المعلمات في المحرر باستبدال الكلمات.



للعملاء خلف nat ، بدلاً من nat = نعم ، سنقوم بإنشاء قالب فندق مع إضافة السطور:



endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes


لكي يتصرف pjsip مثل chan_sip ، أي إضافة جهاز نظير واحد. ترسل بعض الهواتف الصينية أحيانًا لسبب ما تسجيلًا ثانيًا من منفذ آخر عندما يكون الأول صالحًا وهذا يسمح لك بتجاوز هذا الخطأ.



aor/max_contacts = 1
aor/remove_existing = yes


إحدى ميزات PJSIP هي التسجيل المتعدد ، والذي لم يكن مدعومًا في chan_sip. قم بتغيير aor / max_contacts إلى المبلغ المطلوب واتصل بخطة الاتصال:



exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})


أصبح من الملائم جدًا أن تتمكن من تعيين مجموعات اعتراض بالاسم وليس بالأرقام كما في السابق:



endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks


كان لـ chan_sip القديم معلمة حد مكالمة تحد من عدد محادثات الأقران. لا يحتوي chan_pjsip الجديد على هذا ، فمن المستحسن في جميع الدردشات تقييد المكالمات بواسطة معلمة GROUP. لسبب ما ، لا يستخدم أي مكان في الكتيبات المعلمة endpoint / device_state_busy_at وإضافته إلى extension.conf إلى السياق الوارد والصادر:



exten => _X.,1,GoSub(subDeviceBusy,s,1(${EXTEN},${CALLERID(num)}))
[subDeviceBusy]
exten => s,1,NoOp(PJSIP/${ARG1} has state ${DEVICE_STATE(PJSIP/${ARG1})})
exten => s,n,NoOp(CallerId is ${ARG2})
exten => s,n,ExecIf($["${DEVICE_STATE(PJSIP/${ARG1})}" = "BUSY"]?Hangup(17))
exten => s,n,Return


يمكنك عرض الخطوط في وحدة تحكم النجمة:



pjsip show endpoint 100
Endpoint:  100/100                                      Not in use    0 of 1
     InAuth:  100-iauth/100
        Aor:  100                                            3
      Contact:  100/sip:100@192.168.0.10:5062       c34b4c2d4d Avail         7.981
  Transport:  transport-udp             udp      0      0  192.168.0.1:5060


هنا 0 من 1 يوضح عدد الخطوط المشغولة من الممكن.



في 16 وحدة ماكرو أستريسك أصبحت قديمة لذا كان لا بد من إعادة كتابتها على جوسوب.



من أجل إرسال رقم المتصل عند الاتصال ، أضف رأس التحويل إلى INVITE عند الاتصال:



exten => 2222222,n,Dial(PJSIP/8XXXXXXXXXX@trunk,,tTb(add_diversion^${EXTEN}^1)
[add_diversion]
exten => _XXXXXXX,1,Set(PJSIP_HEADER(add,Diversion)=<sip:XXX${EXTEN}@x.x.x.x>\;reason=unconditional\;screen=yes\;privacy=off)
exten => _XXXXXXX,n,Return()


هنا هو 2222222 رقم المدينة التي تم إعادة التوجيه عليها ، 8XXXXXXXXXX هو الرقم الذي يتم إعادة التوجيه إليه ، وإذا لزم الأمر ، أضف رمز المنطقة بدلاً من XXX sip: XXX $ {EXTEN}xxxx>



لم تكن هناك مشكلات معينة مع ملفات تكوين قائمة الانتظار ، فنحن نغير الأعضاء فقط من SIP إلى PJSIP.



لا تنس استخدام التوثيق

pjsip_wizard.conf

pjsip.conf



All Articles