Menu Zavrieť

Multimediálne komunikačné platformy nad SIP – prepojenie Kamilio + FreeSWITCH

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ť.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.