Inštalácia PBX Kamailio 4.0.3
Kamailio sa priamo nenachádza v balíčkových repozitároch Debianu. Je potrebné ho pridať. Stačí, ak do súboru /etc/apt/sources.list pridáme na koniec dva riadky:
deb http://deb.kamailio.org/kamailio whezy main deb-src http://deb.kamailio.org/kamailio wheezy main
Potom ho môžeme jednoducho vyhľadať v nejakom správcovi balíčkov, alebo nainštalovať cez príkazový riadok:
apt-get update apt-get install kamailio
Po inštalácii je potrebné editovať súbor /etc/default/kamailo kde je potrebné zmeniť
RUN_KAMAILIO=YES
Aby mohlo Kamailio počúcvať aj na aliase, zmeníme mu ho v súbore /etc/kamailio/kamailio.cfg v časti Global Parameters
alias=“test1.sip.uniza.sk“
Nasleduje už samotné spustenie príkazom
service kamilio start
Inštalácia MySQL a pripojenie Kamailia
MySQL server sa nachádza priamo v balíčkových repozitároch Debianu. Nainštaluje sa jednoduchým príkazom
apt-get install mysql-server
Aby mohlo Kamailio pracovať aj s databázou v súbore /etc/kamailio/kamctlrc odkomentujeme a prípadne zmeníme nasledovné riadky:
SIP_DOMAIN=test1.sip.uniza.sk DBENGINE=MYSQL DBHOST=localhost DBNAME=kamailio DBRWUSER=openser DBRWPW="openserrw" DBROUSER=openserro DBROPW=openserro DBROOTUSER="root" ALIASES_TYPE="DB" CTLENGINE="FIFO" OSER_FIFO="/tmp/kamailio_fifo" VERBOSE=1 PID_FILE=/var/run/kamailio.pid
Databázu vytvoríme príkazom
kamdbctl create
Používateľov pridávme cez príkazový riadok pomocou
kamctl add meno heslo
a odoberáme
kamctl rm meno
Aby však Kamailio pracovalo s databázou, musíme mu definovať príslušné direktívy. V súbore /etc/kamailio/kamailio.cfg pridáme v časti Defined Values
#!define WITH_MYSQL #!define WITH_AUTH #!define WITH_USRLOCDB #!define WITH_ALIASDB
Inštalácia PBX FreeSWITCH 1.2
FreeSWITCH sa priamo nenachádza v balíčkových repozitároch. Existujú dve možnosti inštalácie: stiahnutím a skompilovaním zdrojových kódov priamo so stránky FreeSWITCH-u, alebo použitie repozitára GitHub. Rozhodli sme sa pre druhú variant. Najprv však musíme nainštalovať niektoré balíky, ktoré bude FreeSWITCH potrebovať:
apt-get install autoconf automake gawk g++ libjpeg62-dev libncurses5-dev libtool make python-dev pkg-config libtiff4-dev libperl-dev libgdbm-dev libdb-dev git-core unzip
Vytvoríme si priečinok, do ktorého stiahneme zdrojové kódy, skompilujeme a nainštalujeme.
cd /usr/local/src git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.git cd /usr/local/src/freeswitch ./bootstrap.sh ./configure make && make install
FreeSWITCH spustíme príkazom /usr/local/freeswitch/bin/freeswitch . Spustí sa ale na popredí a znemožní tým ďalej pracovať. Ak ho chceme spustiť na pozadí, pridáme parameter -nc . FreeSWITCH sa cez jeho konzolu vypne zadaním troch bodiek.
Prepojenie Kamailia a FreeSWITCH-u
V súbore usr/local/freeswitch/conf/sip_profiles/internal.xml je potrebné zmeniť port, na ktorom FreeSWITCH počúva. Defaultne je nastavený na 5060, avšak ak máme Kamailio aj FreeSWITCH na jednom stroji, obidvaja počúvajú na rovnakom porte.
<param name="sip-port" value="5090"/>
V súbore /usr/local/freeswitch/conf/autoload_configs/acl.conf.xml ešte nastavíme pravidlo, podľa ktorého bude FreeSWITCH počúvať iba naše Kamailio. Najskôr všetko zakážeme a povolíme iba IP adresu, na ktorej na Kamailio nachádza.
<configuration name="acl.conf" description="Network Lists"> <network-lists> <list name="domains" default="deny"> <node type="allow" domain="$${domain}"/> <node type="allow" cidr="158.193.139.57/32"/> </list> </network-lists> </configuration>
Do súboru kamailio.cfg ktorý sa nachádza v /etc/kamailio/ je potrebné pridať:
V časti Defined Values nastavíme direktívu, podľa ktorej sa budeme rozhodovať v ďalšom nastavovaní
#!define WITH_FREESWITCH
V časti Custom Parameters pridáme IP adresu a port, na ktorom FreeSWITCH počúva
#!ifdef WITH_FREESWITCH freswitch.bindip = “158.193.139.57“ desc “FreeSWITCH IP Address“ freswitch.bindport = “5090“ desc “FreeSWITCH Port“ #!endif
V routovacej logike nastavíme, aby sa správy z FreeSWITCH-a neautentifikovali. Do route[AUTH], ihneď za #!ifdef WITH_AUTH doplníme:
#!ifdef WITH_FREESWITCH if(route(FROMFREESWITCH)) return; #!endif
Zatiaľ však Kamailio FreeSWITCH nepozná, treba preto vytvoriť nové cesty (route-y), smerom do aj z FreeSWITCH-a:
#!ifdef WITH_FREESWITCH route[FROMFREESWITCH]{ if($si == $sel(cfg_get.freeswitch.bindip) && $sp == sel(cfg_get.freeswitch.bindport)) return 1; return -1; } route[TOFREESWITCH]{ $du = “sip:” + $sel(cfg_get.freeswitch.bindip) + “:” + sel(cfg_get.freeswitch.bindport); route[RELAY]; } #!endif
Ako ďalšiu cestu vytvoríme DIFF, v ktorej budeme smerovať služby priamo na FreeSWITCH
route[DIFF]{ if(!is_method(“INVITE“)) return; }
a pridáme ju do request_route ako druhý príkaz ihneď za route(REQINIT); .
Vo FreeSWITCH pridáme do súboru /usr/local/freeswitch/conf/dialplan/public.xml jednu podmienku, na základe ktorej bude žiadosti od Kamailia smerovať do súboru default.xml v ktorom budú definované.
<extension name="from_kamailio"> <condition field="network_addr" expression="^158\.193\.139\.57$" /> <condition field="destination_number" expression="^(.+)$"> <action application="transfer" data="$1 XML default" /> </condition> </extension>
Konferencia
Pre konferenčné miestnosti sme si zvolili čísla 3001 až 3004. V /etc/kamailio/kamailio.cfg do cesty DIFF pridáme na koniec:
if($rU=~"^300[1-4]$"){ route(TOFREESWITCH); }
V /usr/local/freeswitch/conf/dialplan/default.xml by sa mali nachádzať dve klapky pre konferenciu, práve na číslach 3001 až 3004. Ak nie je potrebné do súboru doplniť
<extension name="nb_conferences"> <condition field="destination_number" expression="^(300[1-2])$"> <action application="answer"/> <action application="conference" data="$1-${domain_name}@default"/> </condition> </extension> <extension name="nbwp_conferences"> <condition field="destination_number" expression="^(300[3-4])$"> <action application="answer" /> <action application="conference" data="$1- ${domain_name}@withpin" /> </condition> </extension>
Voicemail
Voicemail je vo FreeSWITCH čiastočne nastavený, avšak je potrebné dokonfigurovať niektoré vlastnosti. V súbore /usr/local/freeswitch/conf/dialplan/default.xml Pridáme dve klapky:
<extension name="voicemail"> <condition field="destination_number" expression="^vmbox-(.+)$"> <action application="answer"/> <action application="voicemail" data="default ${domain_name} $1" /> </condition> </extension> <extension name="vmenu"> <condition field="destination_number" expression="^vmmenu-(.+)$"> <action application="voicemail" data="check default ${domain_name} $1" /> </condition> </extension>
V adresári /usr/local/freeswitch/conf/directory/default vytvoríme pre každého používateľa samostatný xml súbor, ktorý sa bude volať meno_používateľa.xml. Napr. pre používateľa jano vytvoríme jano.xml, ktorého obsahom bude:
<include> <user id="jano" mailbox="2001"> <params> <param name="vm-password" value="123"/> </params> <variables> <variable name="accountcode" value="2001"/> <variable name="user_context" value="default"/> <variable name="effective_caller_id_name" value="jano"/> <variable name="effective_caller_id_number" value="2001"/> </variables> </user> </include>
Každý používateľ musí mať aj číselné označenie schránky. Tu sme zvolili hodnotu 2001. Ak by mal používateľ číselné meno, bolo by toto číslo schránky zhodné. Taktiež sa nastavuje heslo do schránky, ktoré vyžaduje IVR pri volaní do schránky.
V súbore /etc/kamailio/kamailio.cfg v časti Custom Parameters pridáme IP adresu a port, na ktorom sa nachádza voicemail
#!ifdef WITH_VOICEMAIL voicemail.srv_ip = "158.193.139.57" desc "VoiceMail IP Address" voicemail.srv_port = "5090" desc "VoiceMail Port" #!endif
V ceste TOVOICEMAIL pridáme riadok
$ru = "sip:" + "vmbox-" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip) + ":" + $sel(cfg_get.voicemail.srv_port);
Po úprave bude cesta vyzerať:
route[TOVOICEMAIL] { #!ifdef WITH_VOICEMAIL if(!is_method("INVITE")) return; # check if VoiceMail server IP is defined if (strempty($sel(cfg_get.voicemail.srv_ip))) { xlog("SCRIPT: VoiceMail rotuing enabled but IP not defined\n"); return; } if($avp(oexten)==$null) return; $ru = "sip:" + "vmbox-" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip) + ":" + $sel(cfg_get.voicemail.srv_port); route(RELAY); exit; #!endif return; }
V ceste LOCATION doplníme
if (does_uri_exist()) { route(TOVOICEMAIL); }
a po úprave bude vyzerať nasledovne:
..... if (!lookup("location")) { $var(rc) = $rc; if (does_uri_exist()) { route(TOVOICEMAIL); } t_newtran(); switch ($var(rc)) { .....
Týmto sme zabezpečili, že ak volaná strana neodpovie do 30 sekúnd, resp. nechce byť rušená bude volajúci presmerovaný do jej schránky. Ako poslednú vec nastavíme volanie do hlasovej schránky. Zvolili sme jednotné číslo 9999. V ceste SIPOUT je potrebné doplniť na koniec:
#!ifdef WITH_FREESWITCH else { #Routing to voicemail menu if ($tU=~"^9999$") { #voicemail menu xlog("L_NOTICE", " VoiceMail Menu Call"); $rU = "vmmenu-" + $au; route(TOFREESWITCH); } } #!endif
Overenie konfigurácie
Na overenie konfigurácií sme použili topológiu s jedným hardvérovým telefónom Cisco-Linksys SPA921 a softvérovými klientami Counterpath Bria 2.4 a Ekiga 4.0.1. Všetci klienti mali verejné IP adresy. Na overoenie funkčnosti Kamailia sme zostavili jednoduchý hovor, ktorý prebehol úspešne. Vytvorili sme konferenčnú miestnosť s číslom 3001. Po zavolaní prvým klientom sme počuli uvítanie a nebol problém ani pri dynamickom pridávaní, resp. odoberaní volajúcich počas konferencie. Keďže jednoduchý hovor prebehol úspešne, skúsili sme jedného účastníka odhlásiť a nasledne mu zavolať. Po zavolaní sa ozvala aplikácia hlasovej schránky a IVR automat nás jednoducho viedol k zanechaniu odkazu. Po zavolaní účastníka do hlasovej schránky sa bolo potrebné autentifikovať PIN kódom a taktiež IVR automat nás viedol prehľadným menu, kde nebol problém si odkazy vypočuť, poprípade ich vymazať.