Asterisk 1,8 hingga 16

Sekitar 10 tahun yang lalu, perusahaan kami memiliki stasiun tanpa dukungan sip dan Asterisk 1.6 pertama dihubungkan melalui aliran PRI. Selanjutnya, saya ingin pengalihan dengan substitusi nomor dan manajemen kategori, dan chan_ss7 dari netfors ditemukan, yang, setelah mengarsipkan file, dapat melakukan semuanya. Waktu berlalu dan PJSIP keluar di Aterisk versi 13, dan chan_ss7 hanya dikompilasi di bawah 1.8. Ya, dan secara berkala, setiap enam bulan sekali, ada masalah dengan interupsi, yang terwujud dalam suara yang menghilang. Mereka sendiri muncul dan lewat sendiri.



Stasiun utama diganti dan belajar sip dan diputuskan untuk meningkatkan Asterisk ke 16.



Instalasi dilakukan pada debian 10. Repositori memiliki versi 16.2.1, jadi kami akan membangun dari sumber. Mengunduh Asterisk 16 terbaru, saya memilikinya di 16.12.0:



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


Buka kemasannya ke dalam folder dan buka:



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


Sekarang mari kita instal semua dependensi yang diperlukan di debian. Tidak perlu mengulanginya secara manual. Semua dependensi dikumpulkan dalam skrip yang harus dijalankan.



contrib/scripts/install_prereq install


Selanjutnya, unduh sumber mp3 yang diperlukan untuk membangun modul mp3.



contrib/scripts/get_mp3_source.sh


Semua dependensi diinstal dan Anda dapat melanjutkan ke perakitan.



./configure
make menuselect


Untuk apa yang diinstal secara default, saya menambahkan:



  • Di tab pertama, format_mp3.
  • Dalam Paket Suara Inti, saya menunjukkan suara RU-WAV Rusia.
  • Di Paket Suara Ekstra saya memilih bahasa Inggris EN-WAV, sayangnya tidak ada bahasa Rusia.


Kami melanjutkan, setelah menerima pengaturan, dengan mengklik Save & Exit. Menyusun:



./configure
make


Kemudian mari kita membangun dan menginstal paket menggunakan checkinstall:



checkinstall


Kami mengisi versi, nama paket, dll. Saya menulis nama paket asterisk-16 agar tidak konflik dengan yang ada di repositori.



checkinstall


Tambahkan pengguna untuk menjalankan Asterisk dan berikan izin folder:



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


Kami mengkonfigurasi Asterisk untuk dijalankan di bawah pengguna ini. Untuk melakukan ini, tambahkan parameter ke / etc / default / asterisk config:



AST_USER="asterisk"
AST_GROUP="asterisk"


Setelah mengedit /etc/asterisk/modules.conf. Kami menghapus hal-hal yang tidak perlu, misalnya:



noload => chan_sip.so


Kami memulai tanda bintang di konsol dan memeriksa bahwa tidak ada kesalahan:



asterisk -cvvv


Jika semuanya baik-baik saja, tambahkan layanan ke startup dan jalankan:



systemctl enable asterisk
systemctl start asterisk


Ini menyelesaikan penginstalan dan melanjutkan ke penyiapan.



Di PJSIP, sintaksis telah berubah secara radikal dan tidak akan berfungsi hanya untuk menyalin konfigurasi. Ada konverter konfigurasi di direktori sumber contrib / scripts / sip_to_pjsip / sip_to_pjsip.py, tetapi format dengan aor terpisah, identifikasi, dll. tidak nyaman dan keluaran ditemukan dengan pjsip_wizard. Kita hanya perlu membuat transport di /etc/asterisk/pjsip.conf tambahkan:



[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


Ubah xxxx ke alamat IP yang akan Anda dengarkan.



Kami membuat template untuk pengguna:



[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


Dan kemudian pengguna biasa sudah memiliki konfigurasi:



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


Dan ini sudah sangat mirip dengan format chan_sip, dan kami mengubah nama parameter di editor dengan mengganti kata-katanya.



Untuk klien di belakang nat, alih-alih nat = yes, kami akan membuat template hotel dengan penambahan baris:



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


Agar pjsip berperilaku seperti chan_sip, mis. tambahkan satu rekan satu perangkat. Beberapa telepon Cina terkadang mengirim karena alasan tertentu pendaftaran kedua dari port lain ketika yang pertama aktif dan ini memungkinkan Anda untuk melewati bug ini.



aor/max_contacts = 1
aor/remove_existing = yes


Salah satu fitur PJSIP adalah registrasi berganda, yang tidak didukung di chan_sip. Ubah aor / max_contacts ke jumlah yang diperlukan dan panggil dalam dialplan:



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


Ini menjadi sangat mudah bahwa Anda dapat menentukan grup intersepsi berdasarkan nama, dan bukan dengan angka seperti sebelumnya:



endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks


Chan_sip lama memiliki parameter batas panggilan yang membatasi jumlah percakapan sesama. Chan_pjsip baru tidak memiliki ini, dalam semua obrolan disarankan untuk membatasi panggilan dengan parameter GROUP. Untuk beberapa alasan, tidak ada dalam manual yang menggunakan parameter endpoint / device_state_busy_at dan menambahkannya ke extensions.conf ke konteks masuk dan keluar:



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


Anda dapat melihat baris di konsol Asterisk:



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


Di sini 0 dari 1 menunjukkan berapa banyak baris sibuk dari kemungkinan.



Di 16 Asterisk, makro menjadi usang sehingga kami harus menulis ulang di Gosub.



Untuk mengirimkan nomor pemanggil saat menelepon, tambahkan header Diversion ke INVITE saat menelepon:



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()


Di sini 2222222 adalah nomor kota tempat pengalihan adalah, 8XXXXXXXXXX adalah nomor penerusan, dan jika perlu, tambahkan kode area alih-alih XXX sip: XXX $ {EKSTEN} @xxxx>



Tidak ada masalah khusus dengan file konfigurasi antrian, kami hanya mengubah anggota dari SIP ke PJSIP.



Jangan lupa gunakan dokumentasi

pjsip_wizard.conf

pjsip.conf



All Articles