Artikel ini akan berbicara tentang PBX
Askozia versi 6 gratis . Ketika mengembangkan pertukaran telepon, salah satu tugas pertama adalah mengatur panggilan keluar.
Bagaimana itu?
Dalam versi lama Askozia, templat "dialplan" standar digunakan.
- X! - semua nomor telepon
- XXX - nomor tiga digit
- .! - Benar-benar semua nomor telepon
Contoh konteks dapat dijelaskan secara skematis:
[outgoing] exten => _XXXXXX!,1,NoOp(Start outgoing calling...) same => n,Dialβ¦
Tampaknya bagi kami bahwa pendekatan ini tidak cukup fleksibel. Tidak ada cara untuk menggambarkan aturan berikut:
- Angka dimulai dari 79
- Ini mengikuti 35 atau 26
- Sisanya adalah 7 digit
Di bawah potongan, pendekatan kami dan hasil pengembangan dijelaskan.
Implementasi saat ini
Kami memutuskan untuk menerapkan fungsi ini secara berbeda, menggunakan
REGEX .
Contoh template:
79(25|26)[1-9]{7}
- (25 | 26) adalah 25 ATAU 26
- [0-9] - digit dari 0 hingga 9, yang terjadi sejak tanggal 1 atau lebih
- {7} - jumlah kemunculan karakter sebelumnya
Sintaks untuk fungsi REGEX adalah:
REGEX("regular expression" string) Return '1' on regular expression match or '0' otherwise
Contoh penggunaan di Askozia 6:
[outgoing] exten => _X!,1,NoOp(Start outgoing calling...) same => n,Ringing() same => n,ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-1-out,${EXTEN},1)) same => n,ExecIf($["${REGEX("^(7|8)[0-9]{10}$" ${EXTEN})}" == "1"]?Gosub(SIP-PR-2-out,${EXTEN},1)) same => n,Hangup()
Untuk panggilan keluar, satu titik masuk diatur - konteks "
keluar ", fungsi "
ExecIf " dipanggil di dalamnya:
ExecIf($["${REGEX("^[0-9]{6}$" ${EXTEN})}" == "1"]
Jika nomor telepon yang ditentukan dalam variabel "
$ {EXTEN} " cocok dengan pola, maka panggilan dialihkan ke
sub-konteks menggunakan fungsi "
Gosub ".
Jika panggilan tidak terganggu dalam
sub-konteks , maka set akan berjalan sesuai dengan aturan yang sesuai berikut.
Dengan cara ini, kami memecahkan masalah dengan garis saluran tunggal. Jika saluran sibuk, panggilan akan melalui yang berikutnya sampai dijawab.
Contoh konteks:
[SIP-PR-1] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-1/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return [SIP-PR-2] exten => _X!,1,ExecIf($["${number}x" == "x"]?Hangup()) same => n,Dial(SIP/PR-2/${EXTEN},600,TeK)) same => n,ExecIf($["${DIALSTATUS}" = "ANSWER"]?Hangup()) same => n,return
Wajib dalam "
sub " - konteksnya memeriksa "
DIALSTATUS ". Jika panggilan dijawab, maka setelah percakapan saluran akan diakhiri menggunakan fungsi "
Hangup () ". Jika ini tidak dilakukan, maka pada akhir panggilan oleh klien, panggilan ulang nomor klien dapat terjadi.
Satu kehalusan penting, ketika menggunakan "
Gosub " atau "
Goto ", kami sengaja
tidak mengubah
$ {EXTEN} . Bahkan jika Anda perlu mengubah nomor telepon (tambahkan / hapus awalan).
Faktanya adalah bahwa ketika
EXTEN dimodifikasi, Asterisk akan mengubah nilai variabel
CDR (dst) , yang akan mengakibatkan hasil prediksi yang buruk dalam tabel riwayat panggilan CDR. Saya pikir penting dalam sejarah untuk menyimpan nomor yang dihubungi oleh seorang karyawan.
Hati-hati saat menggambarkan ekspresi reguler. Gunakan karakter "
^ ", awal baris dan "
$ " - akhir baris, jika tidak, Anda mungkin mendapatkan hasil yang tidak terduga.
Sebagai contoh, pola β
[0-9] {6} β akan sesuai dengan semua angka di mana terdapat 6 digit atau lebih. Pola β
^ [0-9] {6} $ β hanya cocok dengan angka 6 digit.
Ringkasan
Kami mendapat subsistem yang fleksibel untuk menggambarkan perutean keluar ke PBX.
Daftar aturan ditampilkan sebagai berikut:

Contoh kartu "Aturan" tertentu:
