VoIP: Lebih Jauh Dialplan Asterisk
Lebih Jauh Dialplan Asterisk
Salah satu hal yang paling pusing dalam proses konfigurasi sebuah sentral telepon apapun adalah konfigurasi dialplan. Konfigurasi dialplan asterisk terdapat pada file extensions.conf yang letaknya biasanya di /etc/asterisk/extensions.conf.
Dial mengontrol apa yang harus dikerjakan jika ada call yang masuk atau call yang keluar. Dengan kata lain, dialplan mengontrol semua perilaku sambungan yang masuk / keluar dari sentral telepon kita.
extensions.conf di atur berdasarkan beberapa bagian / modul yang berisi definisi maupun settingan parameter secara statik, dalam menjalankan komponen dialplan maka bagian / modul tersebut di kenal sebagai context.
Bagian yang ada adalah general dan global, dan nama context di definisikan oleh system administrator. Makro adalah tipe spesial dari context, dilabeli oleh nama yang di definisikan oleh user biasanya menggunakan prefix marco-. makro dapat di eksekuasi berulang kali, kira-kira mirip dengan subroutine dalam bahasa pemrogramman.
Setiap bagian di extensions.conf dimulai dengan nama bagian yang ditulis dalam kurung siku (square brackets). Hal ini supaya extensions.conf mempunyai struktur yang mirip dengan format file .ini di Windows.
Diskusi Umum Mengatur Dialplan
Mulai Asterisk v 1.2, opsi baru "autofallthrough" di extensions.conf di set ke Yes. Maksudnya jika tidak ada lagi perintah extensions yang dapat dijalankan maka sambungan yang masuk akan diputuskan dengan BUSY, CONGESTION, atau HANGUP tergantung dari tebakan terbaik dari Asterisk.
[general] - Berada di bagian paling atas dari extensions.conf, melalui [general] kita dapat menset beberapa konfigurasi umum untuk extensions di asterisk.
[globals] - Bagian [globals], memungkinkan kita mendefinisikan beberapa variabel atau konstanta global dan menginisialisasi nilainya.
Context dan Extensions - Setelah kategori [general] dan [globals], sisa isi file extensions.conf di ambil oleh Dialplan. Dialplan berisi kumpulan dari context, setiap context berisi kumpulan dari extension.
Pola Extension
Pada saat kita mendefinisikan extension dalam sebuah context, kita dapat menggunakan tidak hanya nomor biasa saja, juga tidak hanya nama / huruf, tapi jika kita dapat mendefinisikan extension yang merupakan matching dari sekumpulan nomor yang di dial menggunakan pola extension.
Mengkaitkan Context Sebuah context berisi extension dapat dimasukan / dikaitkan dengan yang lainnya. Contoh, perhatikan context berikut
Context "default": Extension Keterangan 101 Mark Spencer 102 Wil Meadows 0 Operator
Context "local": Extension Keterangan _9NXXXXXX Local calls include => "default"
Context "longdistance": Extension Keterangan _91NXXNXXXXXX Long distance calls include => "local"
Kita telah mendefinisikan tiga (2) extension.
Context default mengijinkan kita untuk mendial tiga (3) telepon extension, yaitu, Mark, Will dan Operator. Context lokal hanya ada satu pola extension yang mengijinkan kita mendial nomor 7 digit. Di samping itu, kita memasukan jika context default ke context local. Oleh karena itu, pada context local kita juga di ijinkan untuk mendial ke Mark, Will dan Operator. Context long distance mempunyai satu pola extension yang mengijinkan kita untuk melakukan panggilan jarak jauh. Context long distance juga memasukan context local, oleh karenanya juga mengijinkan kita untuk menelepon lokal maupun ke extension Mark, Wil dan Operator.
Menggunakan context di extension, kita dapat secara hati-hati mengatur siapa saja yang dapat mengakses ke jaringan yang lebih besar.
Hati-hati, jika ada lebih dari satu pola yang cocok di nomor yang di dial, Asterisk kemungkinan tidak akan menggunakan nomor yang kita inginkan.
Pengurutan pola Extension
Pada saat Asterisk menerima sambungan yang masuk pada sebuah channel, Asterisk akan melihat context yang di definisikan untuk channel tersebut untuk melihat perintah apa yang harus dilakukan Asterisk. Context akan mendefinisikan sekumpulan perintah tergantung pada extension yang dihubungi si pengguna. Contoh, sebuah context mungkin akan memberikan sekumpulan perintah jika pengguna menelepon ke nomor "123", dan sekumpulan perintah lain jika pengguna menelepon ke "9", kita dapat juga membuat sekumpulan perintah lagi misalnya jika pengguna menelepon nomor yang di awali dengan "555" dan masih banyak lagi.
Jika ada hubungan yang masuk - seperti hubungan masuk dari saluran telepon di luar - pengguna belum mendial sebuah extension. Pada kasus ini, Asterisk akan beraksi seperti pengguna yang mendial extension spesial yang namakan "s" (dari asal kata Start). Asterisk akan mencari / melihat extension "nomor" s dalam definisi context untuk channel tersebut dan mencari instruksi apa yang harus dikerjakan untuk extension "s".
Misalnya, kita mempunyai sebuah channel "Zap/1" yang tersambung ke pesawat telepon di kantor. Misalnya, di konfigurasi Zap channel (zapata.conf) kita sudah mendefinisikan context=john untuk Zap channel 1. Oleh karena itu, jika kita menggunakan handset untuk mendial sebuah nomor, Asterisk akan mencari context dengan nama "john" di extensions.conf untuk melihat apa yang harus dikerjakan. Kita dapat memulai sebuah context dengan menuliskan nama yang ditutup dengan kurung siku
[john]
Untuk setiap context, kita dapat mendefinisikan satu atau lebih extension yang dapat digunakan Asterisk untuk membandingkan dengan nomor yang di dial. Untuk setiap extension, kita dapat memberitahukan Asterisk apa saja yang harus dikerjakan dengan menuliskan sekumpulan perintah.
Extension
Sebuah extension dapat berupa salah satu dari tipe berikut, nomor atau pola.
Nomor extension dapat berupa nomor, seperti 123, dan dapat pula berisi beberapa simbol standard * dan # yang ada di pesawat telepeon. Jadi 34#76* merupakan extension yang valid. Beberapa keypad pada telepon terdapat label A,B,C, dan D, oleh karenanya extension dapat didefinisikan berdasarkan huruf juga. Jadi pada dasarnya sebuah extension dapat didefinisikan dengan huruf dan angka. Perlu di catat bahwa telepon VoIP banyak yang mampu menelepon nomor extension yang terdiri dari text sembang, seperti "Kantor". Oleh karenanya tidak masalah untuk mendefinisikan sebuah nama extension Kantor di Asterisk.
Apakah nama extension case sensitif? ya dan tidak. Extension case sensitif karena pada saat Asterisk berusaha mencocokan extension yang di dial oleh user dengan extension yang di definisikan di context, nama extension harus benar-bener cocok, termasuk huruf besar & huruf kecilnya. Oleh karena itu, bila seorang user menelepon extension "KANTOR" di telepon VoIP mereka, Asterisk tidak akan langsung menjalankan perintah-perintah yang kita definisikan untuk extension "Kantor". Tetapi kenyataannya, nama extension tidak case sensitif dalam artian kita tidak dapat mendefinikan extension yang berbeda huruf besar / huruf kecil saja pada satu context yang sama. Artinya kita tidak dalam mendefinisikan perintah untuk extension "Kantor" dan "KANTOR" pada satu context.
Nama Extension Predefined Asterisk mendefinisikan beberapa nama extension untuk keperluan khusus, yaitu,
i : Invalid s : Start h : Hangup t : Timeout T : AbsoluteTimeout o : Operator
Dan masih banyak lagi.
Mendefinisikan Extension
Berbeda dengan PABX tradisional, dimana extension biasanya berasosiasi dengan telepon, interface atau menu. Pada Asterisk, extension di definisikan sebagai sekumpulan perintah untuk dijalankan. Perintah-perintah ini biasanya di jalankan berdasarkan urutan dari tingkat prioritasnya. Beberapa perintah, seperti Dial atau GotoIf, mempunyai kemampuan untuk berjalan ke perintah lain berdasarkan kondisi tertentu.
Pada saat extension di dial, perintah yang diberi tanda 1 akan di jalankan, di ikuti dengan perintah nomor 2 dan seterusnya sampai telepon di letakan atau hang up.
Dalam sintax yang digunakan di file extensions.conf , setiap tahapan perintah dalam sebuan extension di tulis dalam format
exten = extension,priority,Command(parameter)
Tanpa sama dengan dapat pula ditulis menjadi anak panah, "=>", seperti bentuk yang sering digunakan di banyak contoh.
Kesimpulannya, sebuah "context" mempunyai nama, seperti "john". Setiap context, kita dapat mendefinisikan satu atau lebih "extension". Setiap extension, kita dapat mendefinisikan sekumpulan perinah. Bagaimana cara kita medefinisikan extension-extension ini dan perintah-perintah untuk menanganinya? Untuk mendefinisikannya kita perlu mengedit file extensions.conf menggunakan editor text. Ada beberapa tool yang memungkinkan kita mengeditnya menggunakan Grafik / Web.
Komponen yang membangun tahapan perintah extension atau command line adalah sebagai berikut,
Extension adalah label dari extension, dapat berupa sebuah string (angka, huruf dan simbol yan diijinkan) atau pola yang harus di evaluasi secara dinamik untuk mencocokan dengan banyak kemungkinan nomor telepon. Setiap command line yang menjadi bagian dari extension tertentu harus mempunyai label yang sama.
Priority biasanya berupa angka integer. Merupakan urutan dari perintah yang harus dijalankan dalam sebuah extension. Perintah pertama yang akan dijalankan harus dimulai dengan prioritas 1, jika tidak ada prioritas 1 maka Asterisk tidak akan menjalankan perintah extension. Setelah prioritas 1 di jalankan, Asterisk akan menambah prioritas ke prioritas 2 dan seterusnya, tentunya jika tidak ada perintah yang menentukan prioritas mana yang selanjutnya harus dijalankan. Jika ternyata perintah selanjutnya ternyata tidak terdefinisi maka Asterisk akan menghentikan proses menjalankan perintah walaupun masih ada perintah dengan prioritas yang lebih tinggi.
Command atau perintah adalah "aplikasi" yang akan di jalankan oleh Asterisk.
Parameter adalah parameter yang harus diberikan kepada sebuah command. Tidak semua command / perintah membutuhkan parameter, beberapa perintah dapat dijalankan tanpa parameter.
Contoh
exten => 123,1,Answer exten => 123,2,Playback(tt-weasels) exten => 123,3,Voicemail(44) exten => 123,4,Hangup
Dengan definisi tersebut, sebuah extension dengan nama "123". Pada saat ada panggilan masuk ke extension 123, Asterisk akan menjawab call tersebut, menjalankan file suara dengan nama "tt-weasels" dan memberikan kemungkinan bagi pemanggil untuk memasukan voicemail ke mailbox 33, dan di akhiri dengan hangup.
Asterisk sendiri sebetulnya tidak peduli urutan peletakan kalimat di extensions.conf. Jadi dengan peletakan yang berantakan, perintah yang kita inginkan tetap akan di jalankan sesuai dengan urutan yang kita inginkan
exten => 123,4,Hangup exten => 123,1,Answer exten => 123,3,Voicemail(44) exten => 123,2,Playback(tt-weasels)
Cara lain dalam mendefinisikan perintah adalah menggunakan caller ID untuk mencocokan orang yang menelepon, misalnya,
exten => 123/100,1,Answer() exten => 123/100,2,Playback(tt-weasels) exten => 123/100,3,Voicemail(123) exten => 123/100,4,Hangup()
Dengan cara di atas maka kecocokan dengan extension 123 hanya akan terjadi jika Caller-ID penelepon adalah 100. Hal ini dapat juga dilakukan dengan cara pencocokan pola, seperti berikut
exten => 1234/_256NXXXXXX,1,Answer() dst
Dengan cara ini kecocokan dengan extension 1234 hanya akan terjadi jika Caller ID dimulai dengan nomor kode area 256 saja.
Kita bahkan dapat melakukan hal berikut
exten => s,1,Answer
exten => s/9184238080,2,Set(CALLERID(name)=EVIL BASTARD)
exten => s,2,Set(CALLERID(name)=Good Person) exten => s,3,Dial(SIP/goodperson)
Pada prioritas 2. terlihat kita dapat menandai orang yang tidak kita sukai, sedang orang selain yang tidak disukai setelah prioritas ke tiga (3) akan kembali ke jalan yang telah ditentukan.
Beberapa Contoh Extension Yang Menarik
Asterisk mampu untuk mentransfer call. Hal ini dapat dilakukan dengan cara menambahkan parameter "t" huruf kecil di context user, tersebut, seperti,
exten => 250,1,Dial(SIP/alrac,10,rt)
Dengan cara itu maka transfer call dapat dilakukan dengan cara menekan tombol "#", kemudian menekan nomor extension. Asterisk akan menyebut "transfer" pada saat anda menekan tombol "#" dan menyuarakan dial tone sampai kita memasukan nomor extension yang di tuju.
Asterisk mempunyai dua puluh tempat parkir, nomor 701-720. Transfer call yang anda ingin parkir ke extension #700 dan Asterisk akan secara automatis memarkir di tempat parkir yang sedang kosong dan memberitahukan extension tempat parkirnya. Untuk mengambil kembali telepon yang kita parkir, cukup mendial extension tempar parkir tersebut.
Langkah yang perlu dilakukan agar dapat memarkir panggilan adalah,
Tambahkan include => parkedcalls ke default context, atau context yang anda inginkan memiliki fasilitas park call. Anda harusnya mempunyai file /etc/asterisk/features.conf yang dibuat pada saat instalasi. Pastikan ada kalimat berikut,
[general] parkext => 700 parkpos => 701-720 context => parkedcalls parkingtime => 180
Anda perlu merestart server Asterisk dari console, reload tidak cukup. Anda dapat mencobanya di internal extension. Jadi jika ada panggilan yang masuk dapat di parkir dengan menekan tombol #700, dan Asterisk akan menyebutkan nomor extension tempat parkirnya. Si penelepon akan mendengarkan musik yang indah yang di jalankan melalui Music On Hold.
Jika waktu parkir sudah habis, maka nomor extenision kita yang pertama kali di telepon akan di telepon kembali, kita dapat mempunyai pilihan untuk menerima telepon tersebut atau tidak menerimanya dan memasukan sambungan telepon ke voicemail.
Parameter "t" huruf kecil berarti hanya si penerima panggilan yang dapat mentransfer call. Hal ini berarti kita hanya dapat memarkir sebuah panggilan satu kali saja. jika kita menambahkan "T" huruf besar, seperti,
exten => 250,1,Dial(SIP/alrac,10,rT)
maka kita dapat men-transfer panggilan, apakah kita sedang menerima atau sebagai pemanggil. Hal ini berarti, kita dapat meng-unpark sebuah panggilan, memarkir panggilan dan mentransfer panggilan tersebut.
Asterisk dapat di konfigurasi untuk hunting nomor telepon. Sebuah hunt group adalah daftar dari nomor telepon yang akan dibunyikan secara berurut sampai kita mengangkat telepon tersebut. Dalam contoh di perlihatkan dua buah telepon extension dan satu buah nomor HP. Penelepon cukup menghubungi extension 100 dan selebihnya akan dikerjakan oleh Asterisk. Setiap telepon akan berbunyi selama 20 detik, jika tidak di angkat maka Asterisk akan menelepon telepon selanjutnya.
[alrac-followme] exten => 100,1,Dial(SIP/350,20,r) exten => 100,2,Dial(SIP/351,20,r) exten => 100,3,Dial(Zap/1/1231234567,20,r) exten => 100,4,VoiceMail(u350) exten => 100,dial+101,VoiceMail(b350)
Varisasi lain dari teknik hunting di atas adalah semua nomor akan berdering sekaligus. Hal ini di kenal sebagai ring group. Anda dapat membunyikan semua telepon di sebuah departemen jika kita inginkan. Contoh konfigurasinya adalah,
[customer-service] exten => 666,1,Dial(SIP/604&SIP/605&SIP/606,40,tr) exten => 666,2,VoiceMail(s699)
Dalam contoh extension 604, 605, dan 606 akan di deringkan secara simultan jika seseorang menelepon ke extension 666 dari Customer Service Department. Jika tidak ada orang yang mengangkat dalam 40 detik akan di arahkan ke Voicemail.
Variabel dan Persamaan
Di Asterisk tersedia dukungan untuk menggunakan variable dengan nama ${VARIABLENAME}. Kita juga dapat menuliskan persamaan dengan konstruksi ${EXPRESSION}, dimana expression (persamaan) dapat berupa regular expression, perbandingan, penambahan, pengurangan dan masih banyak lagi.
Reloading Setelah kita melakukan perubahan-peruban pada dialplan dll, maka untuk memasukan semua perubahan yang dilakukan ke asterisk dapat dilakukan melalui perintah CLI asterisk
CLI> reload
Sebuah file konfigurasi besar atau banyak file kecil?
Melalui perintah #include <namafile> di extensions.conf, maka file lain dapat di masukan. Dengan cara ini, kita dapat mengkonfigurasi extensions.conf sebagai file utama, users.conf yang berisi user lokal, services.conf berisi berbagai servis seperti conferencing. Dengan cara ini, dialplan yang kita buat lebih mudah di maintain.
Forward ke Asterisk Lain Untuk memforward call ke Asterisk server lain dapat digunakan sintax berikut,
[iaxprovider] switch => IAX2/user:[key]@server/context
Perintah di atas akan melakukan forwarding ke server lain. User dan key perlu di definisikan di file iax.conf di server yang akan dihubungi. Context adalah context di extensions.conf dari server yang akan dihubungi.