Asterisk 1.6.1 di OpenSUSE (id)
Referensi:
medwinz note:
I got a bunch of email from Indonesian gentle readers about this topic, so I decide to write in Bahasa Indonesia for the Part 4. But don’t worry, you can find the English version, hopefully very soon, in http://medwinz.blogspot.com/. Happy reading :-)
Pertama-tama terima kasih atas antusiasme rekan-rekan yang sudah nge-japri dan memberi komentar. Saya mohon maaf karena bagian ke-4 ini agak telat, namanya kuli harus tour of duty dan ngejar setoran :-)
Pada part 3 saya telah memberikan contoh extensions.conf, saya perlu menyertakan beberapa contoh file konfigurasi lain yang dibutuhkan agar penjelasan extension.conf bisa dimengerti. File-file tersebut adalah:
/etc/asterisk/chan_dahdi.conf /etc/asterisk/sip.conf /etc/asterisk/iax.conf /etc/asterisk/meetme.conf /etc/asterisk/voicemail.conf
Contoh chan_dahdi.conf:
; ; dahdi_channels.conf configuration of digium card ; ; Configuration file [channels] language=en context=internal-fxo signalling=fxs_ks rxwink=300 cidstart=polarity ; jangan ada line yang ngutang akan mengacaukan DTMF dan cid signalling answeronpolarityswitch=no hanguponpolarityswitch=no ;cidstart=ring ; ini test saja pulsedial=no ;useincomingcalleridondahditransfer=yes cidsignalling=dtmf busydetect=yes busycount=6 usecallerid=yes callerid=asreceived hidecallerid=no callwaiting=yes usecallingpres=yes callwaitingcallerid=yes threewaycalling=yes transfer=yes cancallforward=yes callreturn=yes echocancel=yes echocancelwhenbridged=no echotraining=800 rxgain=3.0 txgain=0.0 group=0 callgroup=1 pickupgroup=1 immediate=no faxdetect=no group=1 disallow=all allow=all echocanceller=mg2,1-12 channel => 1-12
Contoh sip.conf:
[general] port = 5060 bindaddr = 10.8.1.120 disallow=all allow=all allow=ulaw allow=gsm context=internal-sip [9001] type=friend host=dynamic dtmfmode=rfc2833 language = en context=recordings nat=no username=YGTELEPH01 userid=9001 callerid=YGTELEPH01 <9001> mailbox=9001 allow=all qualify=yes
[9002] type=friend host=dynamic dtmfmode=rfc2833 language = en context=internal-sip nat=no username=YGTELEPH02 userid=9002 callerid=YGTELEPH02 <9002> mailbox=9002 allow=all qualify=yes ;tambahkan sesuai extension yang anda miliki [9031] type=peer insecure=very disallow=all allow=ulaw allow=alaw allow=gsm context=internal-sip host=10.8.1.31 username=GS8 permit=10.8.1.31/255.255.255.255 qualify=yes canreinvite=no call-limit=4 dtmfmode=rfc2833 nat=no [9032] type=peer insecure=very disallow=all allow=ulaw allow=alaw allow=gsm context=internal-sip host=10.8.1.32 username=GS8 permit=10.8.1.32/55.255.255.255 qualify=yes canreinvite=no call-limit=4 dtmfmode=rfc2833 nat=no
Contoh iax.conf:
; Inter-Asterisk eXchange driver definition ; ; This configuration is re-read at reload ; or with the CLI command ; reload chan_iax2.so ; ; General settings, like port number to bind to, and ; an option address (the default is to bind to all ; local addresses). ; [general] bindport=4569 bindaddr=10.8.1.120 delayreject=yes language=en bandwidth=high disallow=all allow=ulaw allow=alaw allow=gsm jittertargetextra=40 jitterbuffer=yes dropcount=3 maxjitterbuffer=300 minjitterbuffer=300 minexcessbuffer=200 mailboxdetail=yes autokill=yes register => ncpabxsv:0000@10.1.1.120:4569 register => dppabxsv:0000@10.7.1.120:4569 register => jbpabxsv:0000@10.9.1.120:4569 tos=0x10 [guest] type=user context=default callerid="Guest IAX User" ; ; Trust Caller*ID Coming from iaxtel.com ; [iaxtel] type=user context=default auth=rsa inkeys=iaxtel ; ; Trust Caller*ID Coming from iax.fwdnet.net ; [iaxfwd] type=user context=default auth=rsa inkeys=freeworlddialup [ncpabxsv] type=friend auth=md5 secret=0000 context=local host=dynamic defaultip=10.1.1.120 qualify=yes requirecalltoken=no [dppabxsv] type=friend auth=md5 secret=0000 context=local host=dynamic defaultip=10.7.1.120 qualify=yes requirecalltoken=no [ygpabxsv] type=friend auth=md5 secret=0000 context=local host=dynamic defaultip=10.8.1.120 qualify=yes requirecalltoken=no [jbpabxsv] type=friend auth=md5 secret=0000 context=local host=dynamic defaultip=10.9.1.120 qualify=yes requirecalltoken=no
Contoh meetme.conf:
[rooms] ;#include meetme_additional.conf conf => 5000 conf => 6000 conf => 7000
Contoh voicemail.conf:
; ; Voicemail Configuration ; ; ; NOTE: Asterisk has to edit this file to change a user’s password. This does ; not currently work with the "#include <file>" directive for Asterisk ; configuration files, nor when using realtime static configuration. ; Do not use them with this configuration file. ; [general] format=wav serveremail=asterisk fromstring=Asterisk PABX sendvoicemail=yes language=en operator=no envelope=yes attach=yes maxmsg=20 maxsecs=180 minsecs=6 maxgreet=60 skipms=3000 maxsilence=5 silencethreshold=128 maxlogins=3 emailbody=Anda mempunyai pesan baru emaildateformat=%A, %d %B %Y at %H:%M:%S mailcmd=/usr/sbin/sendmail -t
sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside ; VoiceMailMain() [option 5 from mailbox’s advanced menu]. ; If set to ‘no’, option 5 will not be listed. [default] ; isikan sebanyak extension yang anda miliki 9001 => 9001,medwinz,,,attach=no 9002 => 9002,medwinz,,,attach=no [zonemessages] yogyakarta=Asia/Jakarta|’vm-received’ Q ‘digits/at’ R
Desain yang saya buat ini secara sederhana digambarkan dalam diagram dibawah
Ip phones mempunyai extension 9001 sampai dengan 9027. GSM gateway diperlakukan sebagai sip extension dengan nomer extension 9031 dan 9032. Lihat file sip.conf. Bagaimana membuat agar sebuah ip phone mempunyai nomor extensi? Ini tergantung dari ip phone yang anda gunakan, untuk langkah awal anda dapat menset sebuah dhcp untuk kemudian setiap ip-phone akan mengambil sebuah ip. Biasanya didalam sebuah ip-phone sudah ditanam sebuah webserver yang dapat diakses dari browser untuk selanjutnya kita beri nomor extensi. Proses ini sering dinamakan provision. Favorit saya untuk mem-provisi ip-phone adalah dengan menset sebuah ftp server yang kemudian setiap ip-phone akan mendownload konfigurasi dari ftp server tersebut. Lebih lengkapnya silakan baca manual ip-phone anda.
Sekarang mari kita mulai membahas file extensions.conf. Yang penting diketahui bahwa dialplan itu terdiri dari beberapa context. Context ditandai dengan […], misalnya [incoming], [internal-fxo], [internal-sip] dsb. Context ini saling berhubungan antara extensions.conf dengan file-file yang lain. Context akan mengatur perlakuan terhadap suatu incoming atau outgoing call oleh asterisk. Asterisk mengenal beberapa standard extensi yaitu:
- i : invalid
- s : start
- h : hangup
- t : timeout
- T : absolute timeout
- a : asterisk extension
- o : operator
Yang biasanya sering digunakan adalah:
- s : start : apa yang harus dilakukan oleh asterisk kalau ada incoming call
- i : invalid entry : apa yang dilakukan kalau entry yang dimasukkan salah
- t : time out : apa yang dilakukan kalau timeout sudah lewat
Sekarang coba kita perhatikan syntax extensions.conf berikut:
[internal-fxo] exten => s,1,Answer exten => s,2,Wait(1) exten => s,3,Background(en/autoattendant) exten => s,4,WaitExten(2)
Maka artinya kurang lebih adalah untuk context internal-fxo kalau ada telepon yang masuk maka yang harus dilakukan oleh asterisk adalah:
- dijawab (diangkat) –> s,1,Answer
- tunggu selama 1 detik –> s,2,Wait(1)
- jalankan di latar belakang file /var/lib/asterisk/sound/en/autoattendant.gsm –> s,3,Background(en/autoattendant)
- tunggu input keypad selama 2 detik –> s,4,WaitExten(2)
Mudahkan? ;)
Asterisk mempunyai beberapa aplikasi yang bisa dipanggil melalui extensions.conf yang saya gunakan di sini adalah VoiceMail yaitu aplikasi untuk meninggalkan pesan jika telepon tidak diangkat atau sibuk, meetme untuk melakukan conference call (percakapan dengan peserta lebih dari 2 orang), dan Monitor untuk merekam suatu percakapan ke dalam file. Mari kita lihat contoh extensions.conf:
[internal-fxo] ………… exten => 5000,1,MeetMe(5000) exten => 6000,1,MeetMe(6000) exten => 7000,1,MeetMe(7000)
Perhatikan juga contoh meetme.conf:
[rooms] ;#include meetme_additional.conf conf => 5000 conf => 6000 conf => 7000
Kita telah mendefinisikan 3 ruangan untuk melakukan konferensi yaitu extensi 5000, 6000, dan 7000. Kemudian pada context [internal-fxo] di extensions.conf kita definisikan bahwa user yang mengakses extensi 5000, 6000 dan 7000 akan masuk ke ruangan konferensi. Mudahkan ;) . Perlu diketahui bahwa ruangan konferensi ini tidak hanya bisa diakses oleh extensi lokal tetapi juga dari telepon di tempat lain, baik voip, GSM, atau PSTN. Misalnya kita ingin mengajak rekan kita yang kebetulan sedang diluar kantor untuk ikut meeting, maka kita dapat menghubungi handphonenya dan selanjutnya kita transfer ke 5000, 6000 atau 7000.
VoiceMail cukup mudah untuk dikonfigurasi jika kita menginginkannya. Ada beberapa flag yang digunakan untuk mengatur VoiceMail yaitu:
- s : jika diberikan akan membuat pesan "Please leave your message after the tone. When done, hang up, or press the pound key" tidak dimainkan
- u: jika diberikan akan memutar pesan "The person at extension … 1234 … is unavailable"
- b: jika diberikan akan memutar pesan "The person at extension … 1234 … is busy"
Kita dapat mengkombinasikan flag tersebut misalnya:
- su : pesan unavailable akan diputar tetapi pesan instruksi tidak
- sb : pesan busy akan diputar tetapi pesan instruksi tidak
- u : pesan unavailable akan diputar dilanjutkan dengan pesan instruksi
- b : pesan busy akan diputar dilanjutkan dengan pesan instruksi
Pada context [incoming] di extensions.conf saya mendefinisikan:
exten => _XXXX,1,Answer exten => _XXXX,2,Dial(SIP/${EXTEN},${RINGDELAY},t) exten => _XXXX,3,Voicemail(${EXTEN}@default,u) exten => _XXXX,4,Hangup() exten => _XXXX,103,Voicemail(${EXTEN}@default,b) exten => _XXXX,104,Hangup
Maksudnya kurang lebih adalahkalau ada yang men-dial extensi XXXX (sesuai dengan yg telah didefinisikan di sip.conf) misalya 9001 maka:
- jawab
- dial extension selama 20 detik (ini ditentukan pada context [globals] RINGDELAY => 20), kalau sudah lewat 20 detik maka
- putar pesan unavailable dilanjutkan dengan instruksi untuk menyimpan pesan.
- hangup
- jika nada sibuk, putar pesan sibuk dilanjutkan dengan instruksi untuk menyimpan pesan
- hangup
Pesan yang masuk akan disimpan pada /var/spool/asterisk/voicemail/context/boxnumber/INBOX. Misalnya dalam kasus di atas maka :
- context = default, sesuai exten => _XXXX,3,Voicemail(${EXTEN}@default,u)
- boxnumber adalah mailbox untuk nomer extensi tertentu, misalnya untuk extensi 9001 kebetulan saya set mailbox=9001 sama dengan nomor extensinya. Lihat file sip.conf di atas.
- maka jika penelpon menelpon 9001 dan meninggalkan voicemail maka lokasi penyimpanannya pada /var/spool/asterisk/voicemail/default/9001/INBOX
Kita bisa menyimpan semua percakapan yang terjadi melalui asterisk dengan memanfaatkan aplikasi Monitor. Tentu saja untuk mengkonfigurasinya anda harus menanyakan policy mengenai hal ini kepada pemilik jaringan/asterisk di mana anda memasangnya. Karena hal ini berhubungan dengan privacy. Ada beberapa hal yang sebaiknya diperhatikan dalam mensetup Monitor, standar styntax adalah sebagai berikut: Monitor(ext,basename,flags). Penjelasan sederhananya adalah sebagai berikut:
- ext : format sound file, defaultnya adalah .wav
- basename : dalam contoh saya menggunakan Call-${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S, ini akan mengakibatkan file disimpan dengan nama misalnya Call-8001-02125558785-20091222-161031.wav dimana 8001 adalah nomer extensi, 02125558785 adalah nomer yang dituju, 20091222 adalah tanggal-bulan-tahun, 161031 adalah jam-menit-detik. Demikian juga kalau incoming call, kalau anda berlangganan CID maka asterisk bisa membaca asterisk yang masuk, tetapi sekiranya anda tidak berlangganan CID maka incoming call akan disimpan dengan nama misalnya Call- -8019-20091222-122545.wav
- m : adalah flag yang bila digunakan maka asterisk akan memanggil program diluar asterisk untuk mengkombinasikan dua buah sound file, in dan out, ke dalam sebuah file. Program yang dipanggil adalah sox. Kadang-kadang sox tidak bisa mengenali dan menggabungkan format sound (alaw) akibatnya seringkali kita menemukan untuk sebuah percakapan masih terdapat dua buah file, in dan out. Misalnya : Call-8019-723964-20091222-151827-in.wav dan Call-8019-723964-20091222-151827-out.wav
Untuk mengaktifkan Monitor tidaklah sulit, sebagai contoh perhatikan lagi file extensions.conf:
[internal-fxo] ……. exten => _XXXX,1,Monitor(wav,Call-${CALLERID(num)}-${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)},m) exten => _XXXX,2,Dial(SIP/${EXTEN},${RINGDELAY},t) exten => _XXXX,3,Voicemail(su${EXTEN}) exten => _XXXX,4,Hangup() exten => _XXXX,103,Voicemail(sb${EXTEN}) exten => _XXXX,104,Hangup()
Maksud dari baris ini:
- untuk extensi xxxx, rekam percakapan dengan format Call-no.extensi-tanggal-jam
- dial extensi xxxx dan dering selama 20 detik (masih ingat ya, yang diatas)
- kalau lewat 20 detik maka aktifkan voicemail
- kala nada sibuk aktifkan voicemail
- hangup
Hmm… banyak juga ya. Mudah-mudahan tidak memusingkan. Masih ada beberapa hal di dalam extensions.conf yang akan saya jelaskan misalnya bagaimana mengkoneksi asterisk server di lokasi lain, bagaimana merekam pesan (recording untuk greeting), dan terutama pengaturan context yang berkaitan dengan channel dahdi dan sip.conf. Ada baiknya kita sudahi dulu, silakan diendapkan dan dibawa mimpi :-) . Kita lanjutkan di tulisan berikutnya.
Stay tuned and have a lot of fun