Saturday, October 27, 2012

Asterisk 1.6.1 on openSUSE 11.1 (Part 4)

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 google translate is there. 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 " 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 :-)

No comments:

Post a Comment