Skip to main content

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 :-)

Comments

Popular posts from this blog

Prejudice and Privilege

Notes : It is not about Linux or other geeky stuff nor it is a political writing.  It was a day in the end of March 2007. I was just landed at the Franz Josef Strauss Munich Airport  around 10 AM in the morning. I had 5 days free time from my work in Astrium. At that time I was contracted by EADS Astrium  (now become Airbus Defense and Space) to work with them in Toulouse . I worked for one of their project. I flew from Toulouse where I worked to visit my brother family in Munich. Just after I picked up my luggage from the conveyor, three guys without uniform approaching me and asked me in English what i'm doing in Munich. I asked them if I did anything wrong. One of them told me that it was a random checked.     "Who are you guys? Sorry sir if it is a random check, why do you choose me instead of other?" I reply to their answer.  One of them said they're from the Munich immigration, and at the same time showing a gun behind his jacket. For my itinerary Munich was not

openSUSE.Asia Summit 2017

openSUSE.Asia Summit 2017 was held at University of Electro Communication (UEC) Chofu Tokyo on October 20-22, 2017. Japan is an advance developed country. Tokyo is a big city that can be compared with other major big cities in the world. While it is not the first time for me to go to Tokyo, I was so excited when the committee approved my talk, and openSUSE, as always, give me TSP to come to the event. During the preparation we have  online meeting every week since February 15, 2017. I was so happy to help the preparation of this yearly openSUSE Summit for Asia Region. Indonesia community also contribute to provide the online voting for the logo contest this year through the voting site . On the midnight on October 17, 2017 together with my friend Estu Fardani , I went to Tokyo. It was 7 hours long flight. While almost half of the flight was so bumpy because the initiation of Lan Cyclone , in the morning of October 18, 2017 I enjoyed the clear sky with the golden hour in Japan

Asterisk 1.6.1 on openSUSE 11.1 (Part 1)

In several articles from this one, I will share some of my experience in preparing emergency operation center for disaster management in Indonesia. One of the software we implement in this project is Asterisk. I use Asterisk 1.6.1.5 from openSUSE repository. Actually I built a custom 64 bit appliance using KDE 4.3 from factory repositories through SUSE Studio and took Asterisk from openSUSE Build Service repositories. Well, it was a couple years ago (by the time I submit this post), but I believe it still useful for anyone learning Asterisk :-) I also used DAHDI (Digium Asterisk Hardware Device Interface), but during the implementation I have a problem with Indonesia PSTN telephone signaling so I should download dahdi trunk version from digium subversion server to make the digium card works. Here are the hardware I use: 2 HP tower based server with 8 GB memory (it is overkill actually, but the owner insist it) running in high availability. See the pictures here and here . 10 PS