Asterisk Dialplan Askozia 6. Panggilan Keluar

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:

gambar

Contoh kartu "Aturan" tertentu:

gambar

Source: https://habr.com/ru/post/id445536/


All Articles