Asterisk

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(SIP)
a (eliras javitasa)
 
(egy szerkesztő 16 közbeeső változata nincs mutatva)
4. sor: 4. sor:
   
 
Lehet fordítani is, de csomagból is felrakhatjuk. A részletekbe nem mennék bele, mindenki használt már apt-get -et vagy make-et. A szükséges csomagok: <br />
 
Lehet fordítani is, de csomagból is felrakhatjuk. A részletekbe nem mennék bele, mindenki használt már apt-get -et vagy make-et. A szükséges csomagok: <br />
- asterisk <br />
+
* asterisk <br />
- asterisk-sounds <br />
+
* asterisk-sounds <br />
- libpri <br />
+
* libpri <br />
valamint ha nem csak VoIP-t szeretnénk, vagy időzítés szükséges hardveresen (pl. a MeetMe konferenciához), és van is megfelelő hardverünk, akkor szükségesek még: <br />
+
valamint ha nem csak VoIP-t szeretnénk, vagy időzítés szükséges hardveresen (pl. a [http://www.voip-info.org/wiki-Asterisk+cmd+MeetMe MeetMe] konferenciához), és van is megfelelő hardverünk ([http://www.voip-info.org/wiki/view/Zaptel Zaptel] kártya), akkor szükségesek még: <br />
- zaptel <br />
+
* zaptel <br />
- libzap1.
+
* libzap1.
   
 
== A konfiguráció ==
 
== A konfiguráció ==
19. sor: 19. sor:
 
* további fájlok figyelembe vétele: #include "filename.conf"
 
* további fájlok figyelembe vétele: #include "filename.conf"
 
* változók értékeire hivatkozás: ${változó_neve}
 
* változók értékeire hivatkozás: ${változó_neve}
* valamint használatos sok esetben a "=>", pl. egy dial plan kialakításakor (ha valaki meg tudja szépen fogalmazni a célját, ne habozzon :))
+
* valamint használatos sok esetben a "=>", pl. egy hívásterv kialakításakor (ha valaki meg tudja szépen fogalmazni a célját, ne habozzon :))
  +
Több féle konfigurációs fájl van:
  +
* csatorna konfigurációs fájl, mint pl. a sip.conf, ahol az adott protokollhoz kapcsolódó beállításokat végezhetjük el, illetve felvehetünk végpontokat
  +
* feature konfigurációk, pl. a queues.conf a hívásvárakoztatási sorok létrehozásához
  +
* a modulok betöltésének mikéntjét meghatározó modules.conf
  +
* valamint az egész rendszer lelkét képző extensions.conf, ahol úgynevezett hívásterveket definiálhatunk (ezek meghatározzák, hogy ha egy számot hív valaki, akkor mi történjen)
   
 
A továbbiakban áttekintjük a fontosabb konfigurációs fájlokat.
 
A továbbiakban áttekintjük a fontosabb konfigurációs fájlokat.
25. sor: 25. sor:
 
==== /etc/asterisk/modules.conf ====
 
==== /etc/asterisk/modules.conf ====
 
Sokan elhanyagolják ennek megfelelő beállítását, ami nagy hiba: pár stabilitási problémát ki lehet küszöbölni, ha csak a szükséges modulokat töltjük be, pl. ha csak SIP-et használunk, ne töltsük be feleslegesen a chan_h323.so-t, a chan_iax.so -t. Fontos lehet még kiszedni a nem használt modulokat, ha a PBX-ünket mondjuk egy OpenWRT-s routeren akarjuk kialakítani.
 
Sokan elhanyagolják ennek megfelelő beállítását, ami nagy hiba: pár stabilitási problémát ki lehet küszöbölni, ha csak a szükséges modulokat töltjük be, pl. ha csak SIP-et használunk, ne töltsük be feleslegesen a chan_h323.so-t, a chan_iax.so -t. Fontos lehet még kiszedni a nem használt modulokat, ha a PBX-ünket mondjuk egy OpenWRT-s routeren akarjuk kialakítani.
* egy szekció: [modules]
+
* egy szekcióból áll: [modules]
* egy beállítható paraméter: autoload=no; érdemes no-n hagyni a fent említettek miatt
+
* egy beállítható paraméter: autoload, mely ha "yes" értékű, akkor betölt minden modult, ami megtalálható a modulokat tartalmazó könyvtárban, ha pedig "no"-ra állítottuk, csak a "load =>" illetve "preload =>" utasítások által kijelölt modulokat tölti be; érdemes "no"-ra állítani a fent említettek miattlogin.aspx?timeout=true
* három féle utasítás:
+
* a három utasítás:
** load => chan_sip.so ; modul betöltése
+
<pre>load => chan_sip.so ; modul betöltése
** noload => chan_h323.so ; modul kihagyása
+
noload => chan_h323.so ; modul kihagyása
** preload => res_odbc.so ; modul betöltése az asterisk core inicializálása előtt - ritkán van rá szükség.
+
preload => res_odbc.so ; modul betöltése az asterisk core inicializálása előtt - ritkán van rá szükség.</pre>
   
 
Milyen modulokat is lehet betölteni?
 
Milyen modulokat is lehet betölteni?
* források (resources), pl. res_musiconhold.so, általában külön konfigurációs fájllal rendelkeznek
+
* források (resources): hozzáférést biztosítanak tárolt információkhoz, pl. res_musiconhold.so biztosítja a várakozás alatt lejátszandó zenéhez való hozzáférést, vagy a res_odbc.so -val egy ODBC adatbázishoz biztosít hozzáférést, ha a konfigurációs beállításokat fájlok helyett adatbázisban szeretnénk tárolni
* alkalmazások, pl. app_dial.so, a dial plan -ben használt utasítások
+
* alkalmazások, melyeket hívások felépítéséhez, lebontásához, várakoztatáshoz használunk a hívástervben (egyszerűbben: amiket az extensions.conf -ba kell írni)
* adatbázis csatolók, pl. cdr_psql.so, ha a hívások adatait nem plain text-ben akarjuk tárolni
+
* hívásinformációk (mint pl. hívó, hívott, dátum, időtartam, hívás végső állapota, stb) adatbázisban történő tárolásához adatbázis-csatolók, pl. cdr_pgsql.so
* csatorna kezelő modulok, pl. chan_sip.so
+
* csatornakezelő modulok, melyek feladata a használt protokollok megvalósítása, keretezés, címzés (pl. SIP esetén chan_sip.so)
 
* codec-ek, pl. codec_ulaw.so
 
* codec-ek, pl. codec_ulaw.so
 
* formátumok, pl. format_wav.so, hasonló a codec-hez, csak nem live media stream-hez, hanem fájlokhoz
 
* formátumok, pl. format_wav.so, hasonló a codec-hez, csak nem live media stream-hez, hanem fájlokhoz
 
* PBX core modulok, pl. pbx_config.so
 
* PBX core modulok, pl. pbx_config.so
* egyedülálló funkciók, pl. func_callerid.so, megvan a pdb_functions.so -ban is, de ha nem akarjuk az egészet betölteni...
+
* egyedülálló funkciók: jelenleg csak egy ilyen van, a func_callerid.so, ami ugyan megvan a pdb_functions.so -ban is, de ha nem akarjuk a nagyobb modult betölteni, mert elég ez a funkció, és kevés memóriával rendelkező vason fut az Asteriskünk, akkor hasznos lehet
   
 
==== /etc/asterisk/sip.conf ====
 
==== /etc/asterisk/sip.conf ====
A csatorna általános jellemzőinek beállítását és a SIP csatornák felvételét oldjuk meg itt. Az általános beállítások:
+
A csatornák általános jellemzőinek beállítását és a SIP csatornák felvételét oldjuk meg itt. A [general] részben az általános, minden egyes csatornára jellemző tulajdonságokat állíthatjuk be:
* a [general] részben
 
 
* IPcím, port: bindaddr, bindport
 
* IPcím, port: bindaddr, bindport
 
* külső IP cím (NAT esetén fontos): externip
 
* külső IP cím (NAT esetén fontos): externip
 
* helyi hálózati tartomány: localnet (ha van NAT is, akkor kell, hogy mikor használja az externip-t a SIP fejlécben)
 
* helyi hálózati tartomány: localnet (ha van NAT is, akkor kell, hogy mikor használja az externip-t a SIP fejlécben)
 
* vendégek beengedése: allowguest (lényegében az, hogy legyen-e autentikáció, de figyeljünk oda, vannak kliensek, amik nem támogatják az autentikációt, ekkor allowguest=yes legyen)
 
* vendégek beengedése: allowguest (lényegében az, hogy legyen-e autentikáció, de figyeljünk oda, vannak kliensek, amik nem támogatják az autentikációt, ekkor allowguest=yes legyen)
* hívás előzmények rögzítése: recordhistory
+
* hívásnaplózás: recordhistory
* videó hívás támogatása: videosupport (csak két végpont között, a videó konferencia még nem támogatott)
+
* videohívás támogatása: videosupport (csak két végpont között, a videokonferencia még nem támogatott)
Egy csatorna (és itt ez lényegében egy kliens, végpont) felvétele:
+
Egy csatorna felvétele (tehát egy kliens és az Asterisk közötti csatornáról van szó, így a kliens adatait kell itt megadnunk) a [SIP név] után történik:
* [SIP név] szekció
+
* típus: type={friend, user, peer} - a user csak bejövő hívásokat kezdeményezhet, a peer felé csak kimenő hívás történhet (mármint az Asterisk szemszögéből), a friend pedig mindkét irányú híváskezdeményezésben részt vehet
* típus: type={friend, user, peer} - a user csak bejövő, a peer csak kimenő, a friend pedig két irányú csatornát jelöl
 
 
* használt/nem használt codec-ek: allow, disallow
 
* használt/nem használt codec-ek: allow, disallow
 
* csoportok: callgroup, pickupgroup, segítségükkel az adott csoportba tartozó csatornák válaszolhatnak a többi csoporttagnak szóló hívásra (felvehetik)
 
* csoportok: callgroup, pickupgroup, segítségükkel az adott csoportba tartozó csatornák válaszolhatnak a többi csoporttagnak szóló hívásra (felvehetik)
* melyik dial plan vonatkozzon a csatornára: context
+
* melyik hívásterv vonatkozzon a csatornára: context
* IP cím, port: host={IP vagy "dynamic"}, port=...
+
* IP cím, port: host={IP vagy "dynamic"}, port=5060
* NAT mögött van-e a kliens: nat=...
+
* NAT mögött van-e a kliens: nat=yes/no
 
* felhasználói név, jelszó: username, secret
 
* felhasználói név, jelszó: username, secret
Egyes opciók, mind pl. a recordhistory beállítható csatornánként is.
+
* lehetőség van a jelszavak MD5 hash-ének tárolására is: md5secret
  +
A type, host, username, secret, insecure változók csak csatornánként külön-külön adhatók meg, a többit általánosan is beállíthatjuk a [general] részben; melyeket felüldefiniálhatunk egy konkrét csatornán belül. Nézzünk erre egy példát:
  +
<pre>
  +
[general]
  +
allowguest=no ; autentikáció szükséges
  +
recordhistory=no ; nem kell hívásnapló
  +
nat=no ; nem vagyunk NAT mögött
  +
  +
[100] ; SIP név/hívószám, erre hivatkozunk a hívástervben
  +
type=friend ; tud hívni és hívást fogadni is
  +
host=dynamic ; dinamikus IP címe van, így nem IP alapján autentikál, hanem username/secret -el kell regisztrálnia
  +
recordhistory=yes ; ennél a csatornánál legyen hívásnaplózás
  +
username=tibi ; felhasználói név
  +
secret=jelszo ; jelszó plain text-ben
  +
</pre>
  +
Sok felhasználó esetén érdemes a konfigurációt adatbázisban tárolni.
   
 
==== /etc/asterisk/extensions.conf ====
 
==== /etc/asterisk/extensions.conf ====
  +
Itt definiálhatjuk a fentebb már emlegetett hívásterveket. Egy hívásterv megmondja, hogy egy szám hívása esetén mi történjen. Ha a hívás a belső VoIP hálózaton történik, vagy egy [http://www.voip-info.org/wiki/view/Zaptel Zaptel] kártya [http://www.voip-info.org/wiki/view/FXS FXS] portjára érkezik (ez a port lényegében az, ahova a telefonkészüléket csatlakoztatjuk, tehát fogadja a tárcsázott számokat, tápellátást ad a telefonnak, csörgő hangot generál), azaz a hívás címzettje nem a PBX, a hívástervben a hívott számhoz vagy mellékhez tartozó alkalmazás(ok) fog(nak) lefutni. Ha viszont olyan hívás érkezik, amelynek nincs közvetlen címzettje (ilyen lehet a [http://www.voip-info.org/wiki/view/Zaptel Zaptel] kártya csörgő [http://www.voip-info.org/wiki/view/FXO FXO] portja (amely lényegében az, amit a telefonhálózathoz csatlakoztatunk, tehát küldi a tárcsázott számokat, fogadja a csörgő hangot), akkor az "s" (start) mellékhez tartozó alkalmazás(ok) fog(nak) lefutni. Ha egy adott mellékhez több alkalmazás is tartozik, akkor ezek lefutásának sorrendjét a prioritások, valamint maguk az alkalmazások is meghatározzák (van pl. olyan alkalmazás, melynek segítségével feltételes elágazást rakhatunk a hívástervbe).
  +
* [general] rész: pár általános beállítás, három fontos
  +
** static=yes
  +
** writeprotect=no - ezzel a két beállítással CLI-ből is menthetjük a hívástervet a "save dialplan" paranccsal.
  +
** autofallthrough=yes - ha ezt nem állítjuk be, akkor ha egy adott mellékhez tartozó összes alkalmazás lefutott, az Asterisk várni fog újabb tárcsázott számra, ahelyett, hogy kilépne
  +
* [globals] rész: globálisváltozó-definíciók, pl. ha olvashatóbbá akarjuk tenni a fájlt, akkor az egyes csatornákat változókban tárolhatjuk
  +
* [context] - a konkrét hívástervek, ezekre hivatkozhatunk a csatornák beállításainál, egy fajta utasítást tartalmazhat, melynek formája: exten => hívószám, prioritás, alkalmazás
  +
** hívószám helyett még lehet minta is, ez "_"-al kezdődik, és a következő speciális karaktereket tartalmazhatja:
  +
*** X : 0-9 közötti számjegy
  +
*** Z : 1-9 közötti számjegy
  +
*** N : 2-9 közötti számjegy
  +
*** [] -ek között tartományokat adhatunk meg, pl. [14-6] az 1,4,5,6 számok valamelyikére érvényes
  +
*** .() - a zárójelben megadott karakter(ek)ből több darab is előfordulhat egymás után
  +
** prioritás: meghatározzák az alkalmazások lefutásának sorrendjét, egyben címkék is a Goto-hoz. 1-el kezdődően egyesével növekedve kell lenniük (de lehetnek kivételek, pl. Goto-val, vagy egyes parancsok hiba esetén úgy térnek vissza, hogy mondjuk az n+101. prioritásra ugranak); valamint szám helyett írhatunk "n"-et, ekkor ezt 1-el nagyobbnak értelmezi az előző prioritásnál, és ha egy új sort be akarunk szúrni a hívástervbe, akkor nem kell az összes sorszámot átírni.
  +
** alkalmazás: megmondja, hogy mi a teendő, ha hívnak egy számot
  +
* pár alkalmazás:
  +
** Dial(hívott(ak), [timeout], [flag-ek]) - hívja a paraméterben megadott feleket, összekapcsolja a hívót és a hívottat
  +
*** a hívott számokat protokoll/szám formában kell megadni, pl. SIP/11; ebben az esetben a sip.conf -ban lévő 11-es számmal jelölt klienst fogja tárcsázni
  +
*** a hívott számot át lehet adni paraméterként, ha mondjuk egy átjárón keresztül történik a hívás, pl. SIP/
  +
*** hasznosabb flag-ek:
  +
**** t illetve T: hívásátirányítás illetve -átadás engedélyezése (# gomb hatására)
  +
**** w illetve W: hívás hangrögzítésének engedélyezése
  +
**** a Dial alkalmazás kilépéskor állítja a következő változók értékét:
  +
***** DIALEDTIME : a Dial meghívásától a kilépéséig eltelt idő
  +
***** ANSWEREDTIME : magának a hívásnak az időtartama
  +
***** DIALSTATUS : a hívás státusza, lehet: CHANUNAVAIL, CONGESTION, BUSY, NOANSWER, ANSWER, CANCEL.
  +
** Echo() : hangminőség tesztelésére jó, visszajátssza a fogadott hangot, a hívó #-el kiléphet.
  +
** Answer() : válaszol a hívásra csörgő csatornán (felveszi a kagylót, létrejön a hívás)
  +
** Ringing() : kicsengési hang kezdeményezése egy csatornán (a csatornától függ a kicsengés módja), ez arra jó, hogy a hívó fél ne a nagy semmit hallgassa addig, amíg a hívott fél felveszi a telefont, hanem a megszokott csengő hangot
  +
** Playback(fájlnév, [opciók]) : lejátszik egy adott fájlt a hívó fél felé
  +
** Background(fájlnév, [opciók]) : mint a Playback, azzal a különbséggel, hogy ha a hívó fél folyatja a tárcsázást, a lejátszás megáll
  +
** Hangup() : megszakítja a hívást az adott csatornán
  +
** Goto(cím) : az adott címre ugrik a dial plan-ben; a cím lehet prioritás az adott exten-en belül, lehet más extenben az adott context-en belül, de lehet más context-ben is
  +
** GotoIf(feltétel?cím1:cím2) : ha a feltétel teljesül, a prioritás1 következik, egyébként a prioritás2
  +
** System(cmd) : program végrehajtása (Asterisk-en kívül)
  +
** Queue(sor neve, [opciók]) : a queues.conf-ban meghatározott sorba állítja a bejövő hívásokat
  +
** Busy(), Congestion() : foglalt illetve minden vonal foglalt jelzést küld
  +
** Monitor,MixMonitor (fájlnév, [opciók]) : hívás rögzítését teszi lehetővé, a Monitor a két irányt külön fájlokba, a MixMonitor a két irányt összekeverve egy fájlba rögzít
  +
** NoOP(paraméter) : kiírja a paraméterként kapott információkat a CLI-ben
  +
Egy egyszerű példa: a 123-as hívószám esetén imitáljon egy kicsengést, majd vegye fel a kagylót, és fusson le az Echo program; a 110-es szám hívása esetén pedig hívja fel a tibor nevű SIP felhasználót:
  +
<pre>
  +
exten => 123,1,Ringing ; kicsörgés
  +
exten => 123,2,Answer ; válasz a hívásra, a 2es prioritás miatt a kicsörgés után ez következik
  +
exten => 123,3,Echo ; a következő a visszhang program
  +
exten => 110,1,Dial(SIP/tibor) ; 110-es szám esetén először hívja tibort
  +
exten => 110,2,Hangup ; a hívás végén bontsa a vonalat
  +
</pre>
  +
 
==== /etc/asterisk/queues.conf ====
 
==== /etc/asterisk/queues.conf ====
  +
Ebben a fájlban állíthatjuk be azt, hogy mi történjen, ha épp foglalt minden hívott fél és a hívónak várakoznia kell, valamint ha egy bejövő hívást több helyre egyszerre, vagy több hely közül egy kiválasztotthoz kell kapcsolnunk. Ehhez hívásvárakoztatási sorokat csinálunk, melyekbe tagokat veszünk fel (ezek a kliensek), és meghatározzuk, hogy egy bejövő hívás esetén az éppen szabad kliensek közül melyik kapja a hívást.
  +
* itt is van egy [general] rész, melynek beállításai az összes sorra vonatkoznak
  +
* az egyes sorokat külön szekciókban definiáljuk
  +
* musiconhold : zene lejátszása várakozás alatt - a részleteit a musiconhold.conf -ban állíthatjuk be
  +
* announce : elképzelhető olyan eset, amikor egy kliens több hívásvárakoztatási sornak is tagja (pl. egy call centerben, ahol egy alkalmazott válaszolhat az ügyfélszolgálatos és számlázási kérdésekre is); ilyen esetekben hasznos, ha a kicsörgés előtt a (szoftveres) telefonon megjelenik, hogy melyik sorból is jön a hívás, erre való az announce
  +
* strategy - milyen stratégia szerint válassza ki az éppen elérhető kliensek közül azt, ahol kicsörög a hívás:
  +
** ringall : minden tagnál csörögjön ki
  +
** roundrobin : az első tagtól kezdve próbálgat sorban, amíg szabad tagot nem talál
  +
** leastrecent : a legrégebben hívott tag kapja a hívást
  +
** fewestcalls : a legkevesebb hívást kapott tagra kerül a sor
  +
** random : véletlenszerűen választ
  +
** rrmemory : round-robin memóriával, ott kezdi a próbálgatást, ahol előzőleg abbahagyta
  +
* timeout : mennyi ideig csörgessen egy klienst, mielőtt visszarakná a hívást a sorba
  +
* monitor-format : a sor minden hívása rögzítésre kerül az adott formában (Monitor-t használ, tehát külön fájlokban lesznek a hangsávok)
  +
* monitor-join : hívás után összemixeli a sávokat egy fájlba
  +
* member => tag_neve : így vehetünk fel klienseket (ahol végződik a hívás) a sorba
  +
* wrapuptime : egy hívás befejezte után mennyi ideig ne adjon új hívást a sor tagjának (ms-ban)
  +
 
=== Alternatív konfiguráció: CLI ===
 
=== Alternatív konfiguráció: CLI ===
  +
Ha az asterisk-et nem démonként indítjuk (argumentumok nélkül), hanem mondjuk a "-vvvgc" kapcsolóval, akkor az asterisk beépített parancssoros kezelőfelületéhez jutunk. Rengeteg beállítást itt is el tudunk végezni, ennek előnye, ha valamilyen új funkciót először le akarunk tesztelni, nem kell külön újraindítgatni az asterisket minden kis módosítás után, tehát azonnal láthatjuk az eredményt.
  +
* add: a konfigurációs fájlok szerkesztése nélkül vehetünk fel extension-öket vagy queue tagokat:
  +
** add extension mellék, prioritás, alkalmazás, paraméterek into context
  +
** add queue member tag_neve to sor_neve
  +
* használhatjuk az Asterisk-et futtató gépet is telefonálásra (ehhez szükséges a chan_oss.so modul):
  +
** answer - hívás felvétele
  +
** dial - hívás
  +
* tölthetünk be modulokat futás közben: load modulneve.so, illetve újraolvashatjuk a reload-dal, valamint el is távolíthatjuk őket: unload
  +
* remove: az add-dal ellentétesen eltávolíthatunk extension-öket vagy sorokból tagokat
  +
* restart: minden csatornát lezár, minden modult újraolvas
  +
** restart gracefully : nem fogad több hívást, majd ha minden meglévő hívás lezárult, újraindul
  +
** restart now : azonnal újraindul, megszakítja a hívásokat
  +
** restart when convenient : fogad hívásokat, csak akkor indul újra, amikor éppen egy hívás sincs
  +
* show : lekérdezhetünk rengeteg dolgot, pl. show queues, show dialplan, show channels, show modules
  +
* stop: leállítás, paraméterei mint a restart-nál
  +
* sip history: sip előzmények be- illetve kikapcsolása
  +
* sip show: itt is rengeteg lehetőség van, pl. sip show channel, sip show user
  +
* save dialplan: ha módosítottunk rajta, így lehet elmenteni
  +
* a legfontosabb: help
   
 
== Sipura VoIP gateway ==
 
== Sipura VoIP gateway ==
  +
ISDN kártya helyett nyújt alternatív megoldást. A következőkben megnézzük, hogyan lehet egy Asterisk-el együtt működésre bírni egy ilyen eszközt.
  +
 
=== A gateway beállítása ===
 
=== A gateway beállítása ===
  +
* Router/wan setup -ban: külső ip, elérhessük-e a WAN-on keresztül, stb; ha el szeretnénk érni, akkor az admin jelszót feltétlen állítsuk be a Voice/System -ben, különben könnyen szórakozhatnak velünk az unatkozó gonosz hackerek, és ne csináljanak jó nagy telefonszámlát, ha rákeresnek google-el a következőre: "linksys spa configuration inurl:admin/advanced" (meglepő, hogy milyen sok találatot ad); még jobb, ha nem elérhető WAN felől a webes felület. Az egyszerűség kedvéért csináljuk úgy, hogy a WAN portján csatlakozik csak hálózathoz, így a WAN ip-t kell majd beállítani az Asterisk-ben is.
  +
* A többi szükséges beállítást a Voice/PSTN Line alatt érhetjük el:
  +
** Proxy and Registration:
  +
*** proxy: az Asterisk IP-je
  +
*** Use Outbound Proxy: no
  +
*** Register: no
  +
*** Make Call Without Reg: yes
  +
*** ans Call Without Reg: yes
  +
** Dial Plans: az egyiket allitsuk be a következőre (mondjuk a 8ast): (S0<: 123@AsteriskIPje:5060>)
  +
** VoIP-To-PSTN Gateway
  +
*** VoIP-To-PSTN Gateway Enable: yes
  +
*** One Stage Dialing: Yes
  +
*** VoIP Caller Auth Method: None
  +
*** VoIP Caller Default DP: 1 - ne az legyen, amelyikre az Asterisket beírtuk fentebb
  +
** PSTN-To-VOIP Gateway
  +
*** PSTN-To-VOIP Gateway Enable: yes
  +
*** PSTN Ring Thru Line 1: No
  +
*** PSTN Caller Default DP: 8 - amelyikre beállítottuk az Asterisket
  +
*** Off Hook While Calling VoIP: Yes
  +
*** PSTN Caller Auth Method: none
  +
 
=== Az Asterisk beállítása ===
 
=== Az Asterisk beállítása ===
=== Tippek, meg amikre figyeljünk oda ===
+
==== sip.conf ====
  +
* a neve legyen mondjuk [sipura]
  +
* egy friend-et kell felvennünk (egyes leírások egy peer + egy user -el ajánlják, de szerintem az felesleges). - type=friend
  +
* host=192.168.1.10 - vagy amit beállítottunk a VoIP gateway WAN IP címének, ha az a WAN felől csatlakozik
  +
* port=5060 (a default, a lényeg, hogy ellenőrizzük a Sipura beállításainál is a dolgot a Voice/SIP és a Voice/PSTN line alatt)
  +
* codec beállítások: disallow=all, allow=ulaw, az eszköz csak ezt szereti
  +
* nat=no
  +
* insecure=very - ne kelljen autentikálnia
  +
* qualify=yes - periodikusan ellenőrizze, hogy elérhető-e a gateway
  +
* canreinvite=no - az Asterisk-en át menjenek az RTP csomagok
  +
* és mondjuk context=pstn
  +
  +
==== extensions.conf ====
  +
A bejövő hívásoknál most nem a start melléket használjuk, mivel a VoIP gateway nem címzett nélkül hívja fel a PBX-et, hanem azon a címen, amit megadtunk a gateway konfigurációjában a DialPlans-nél (tehát a 123-as számot hívja az Asterisk-en keresztül) . A kimenő hívásokat kezelő context(ek)ben a Dial hívott paramétere legyen SIP/${EXTEN}@sipura, ezzel átadtuk a hívott számot az átjárónak.
  +
  +
=== Mire figyeljünk oda? ===
  +
A fent leírtak elégségesek a működéshez, viszont érdemes megfontolni pár dolgot:
  +
* Kell tudnunk, hogy milyen számról jön a hívás? Ha nem, akkor a VoIP gateway beállításainál kapcsoljuk ki a Voice/PSTN line/PSTN to VoIP -ban a PSTN CID For VoIP CID -t, mert ez egy 2-3mp-es késleltetést ad a kicsörgéshez
  +
 
=== Egy összetett példa ===
 
=== Egy összetett példa ===
  +
Adott a feladat: csináljunk call centert. Van 2 vonal, ebből az egyiknek vezetékes számokra jók a percdíjai, a másiknak mobil számokra (pl. egy VoIP gateway GSM adapteren lóg, a másik a telefon vonalon), és lehetőleg próbáljunk olcsóért telefonálni. A call centerben van 2 SIP kliens, bejövő hívások csörögjenek ki mindenhol, valamint minden kimenő hívást rögzítsünk. A VoIP gateway-ek beállítása a fentieknek megfelelően történik, az IP címek legyenek 192.168.1.10 illetve 192.168.1.11.
  +
* sip.conf:
  +
<pre>
  +
[general]
  +
disallow=all
  +
allow=ulaw
  +
canreinvite=no
  +
nat=no
  +
recordhistory=yes
  +
qualify=yes
  +
  +
[gsm]
  +
type=friend
  +
host=192.168.1.10
  +
insecure=very
  +
context=kintrol
  +
  +
[isdn]
  +
type=friend
  +
host=192.168.1.11
  +
insecure=very
  +
context=kintrol
  +
  +
[11]
  +
type=friend
  +
username=callcenter1
  +
secret=titok1
  +
host=dynamic
  +
context=bentrol
  +
  +
[12]
  +
type=friend
  +
username=callcenter2
  +
secret=titok2
  +
host=dynamic
  +
context=bentrol
  +
</pre>
  +
  +
* extensions.conf:
  +
<pre>
  +
[general]
  +
static=yes
  +
writeprotect=no
  +
autofallthrough=yes
  +
  +
[kintrol]
  +
exten => 123,1,NoOP(${CALLERID}) ; kiírja a CLI-ben a hívó fél telefonszámát
  +
; (ha nem kapcsoltuk ki ezt a VoIP gateway beállításainál)
  +
exten => 123,n,Ringing ; kicsörgő hang generálása (a hívó fél hallja)
  +
exten => 123,n,Queue(kliensek) ; a hívást a "kliensek" hívásvárakoztatási sorba állítja
  +
exten => 123,n,Answer ; felveszi a hívást, ezzel létrejött a kapcsolat a hívó fél és
  +
; a "kliensek" hívásvárakoztatási sor egyik tagja között
  +
exten => 123,n,Hangup ; bontja a vonalat
  +
  +
[bentrol]
  +
;emeltdijast ne hivjanak:
  +
exten => _0690XXXXXX,1,Hangup ; itt egyből megszakítja a hívást (foglalt jelzés megy a hívó fél felé)
  +
exten => _0681XXXXXX,1,Hangup
  +
  +
; mobilt:
  +
exten => _06[237]0XXXXXXX,1,MixMonitor(/ahovamentenikell/${CALLERID}-${TIMESTAMP}.wav) ; a hangrögzítés elindítása
  +
exten => _06[237]0XXXXXXX,2,Ringing ; kicsörgési hang küldése a hívó fél felé
  +
exten => _06[237]0XXXXXXX,3,Dial(SIP/${EXTEN}@gsm,60) ; hívás a "gsm" VoIP gateway-en keresztül
  +
exten => _06[237]0XXXXXXX,4,GotoIf($[${DIALSTATUS}=CHANUNAVAIL]?:5) ; ha a "gsm" -el jelölt VoIP gateway
  +
; használatban van, ugorjon az 5. sorra
  +
exten => _06[237]0XXXXXXX,5,Dial(SIP/${EXTEN}@isdn,60) ; hívás az "isdn" VoIP gatewayen keresztül
  +
exten => _06[237]0XXXXXXX,6,Hangup ; vonal bontása
  +
  +
;vezetekest:
  +
exten => _06XXXXXXXX,1,MixMonitor(/ahovamentenikell/${CALLERID}-${TIMESTAMP}.wav)
  +
exten => _06XXXXXXXX,2,Ringing
  +
exten => _06XXXXXXXX,3,Dial(SIP/${EXTEN}@isdn,60)
  +
exten => _06XXXXXXXX,4,GotoIf($[${DIALSTATUS}=CHANUNAVAIL]?:5)
  +
exten => _06XXXXXXXX,5,Dial(SIP/${EXTEN}@gms,60)
  +
exten => _06XXXXXXXX,6,Hangup
  +
</pre>
  +
  +
* queues.conf:
  +
<pre>
  +
[kliensek]
  +
timeout=15
  +
retry=3
  +
wrapuptime=1000
  +
strategy=ringall
  +
member => sip/callcenter1
  +
member => sip/callcenter2
  +
</pre>
  +
  +
* a teljesség kedvéért: modules.conf:
  +
<pre>
  +
[modules]
  +
autoload=no ; csak a load => -al megadott modulokat töltse be
  +
  +
load => chan_sip.so
  +
load => res_features.so
  +
load => res_monitor.so
  +
load => res_musiconhold.so
  +
load => app_queue.so
  +
load => app_mixmonitor.so
  +
load => app_dial.so
  +
load => codec_ulaw.so
  +
load => format_wav.so
  +
load => pbx_config.so
  +
load => pbx_functions.so
  +
  +
</pre>
  +
  +
== Ajánlott irodalom ==
  +
* [http://www.digium.com/elqNow/elqRedir.htm?ref=http://downloads.oreilly.com/books/9780596510480.pdf Asterisk: The Future of Telephony] - az Asterisk könyv, inkább szép, mint hasznos, azért el lehet indulni vele
  +
* [http://voip-info.org/wiki/ VoIP Info] - igen hasznos wiki
  +
* [http://voipspeak.net VoIPSpeak.net] - van itt egy tutorial a VoIP gateway-hez, na ennek NE higgyünk!
  +
  +
--Makár János Zénó

A lap jelenlegi, 2008. január 14., 17:12-kori változata

Az Asterisk egy nyílt forrású szoftveres alközpont. A megfelelő hardverrel képes pl. primer ISDN trönk kezelésére is, de most csak VoIP használatra térünk ki. Támogatja többek közt a két legelterjedtebb, a SIP és a H.323 protokollokat, illetve az Asterisk fejlesztői készítettek egy új protokollt is, az Inter-Asterisk eXchange-t.

Tartalomjegyzék

[szerkesztés] 1 Az Asterisk telepítése

Lehet fordítani is, de csomagból is felrakhatjuk. A részletekbe nem mennék bele, mindenki használt már apt-get -et vagy make-et. A szükséges csomagok:

  • asterisk
  • asterisk-sounds
  • libpri

valamint ha nem csak VoIP-t szeretnénk, vagy időzítés szükséges hardveresen (pl. a MeetMe konferenciához), és van is megfelelő hardverünk (Zaptel kártya), akkor szükségesek még:

  • zaptel
  • libzap1.

[szerkesztés] 2 A konfiguráció

[szerkesztés] 2.1 A konfigurációs fájlok

A szintaxisról:

  • szekciók megjelölése: [szekció neve]
  • megjegyzések: ";" után
  • értékadás: "="
  • további fájlok figyelembe vétele: #include "filename.conf"
  • változók értékeire hivatkozás: ${változó_neve}
  • valamint használatos sok esetben a "=>", pl. egy hívásterv kialakításakor (ha valaki meg tudja szépen fogalmazni a célját, ne habozzon :))

Több féle konfigurációs fájl van:

  • csatorna konfigurációs fájl, mint pl. a sip.conf, ahol az adott protokollhoz kapcsolódó beállításokat végezhetjük el, illetve felvehetünk végpontokat
  • feature konfigurációk, pl. a queues.conf a hívásvárakoztatási sorok létrehozásához
  • a modulok betöltésének mikéntjét meghatározó modules.conf
  • valamint az egész rendszer lelkét képző extensions.conf, ahol úgynevezett hívásterveket definiálhatunk (ezek meghatározzák, hogy ha egy számot hív valaki, akkor mi történjen)

A továbbiakban áttekintjük a fontosabb konfigurációs fájlokat.

[szerkesztés] 2.1.1 /etc/asterisk/modules.conf

Sokan elhanyagolják ennek megfelelő beállítását, ami nagy hiba: pár stabilitási problémát ki lehet küszöbölni, ha csak a szükséges modulokat töltjük be, pl. ha csak SIP-et használunk, ne töltsük be feleslegesen a chan_h323.so-t, a chan_iax.so -t. Fontos lehet még kiszedni a nem használt modulokat, ha a PBX-ünket mondjuk egy OpenWRT-s routeren akarjuk kialakítani.

  • egy szekcióból áll: [modules]
  • egy beállítható paraméter: autoload, mely ha "yes" értékű, akkor betölt minden modult, ami megtalálható a modulokat tartalmazó könyvtárban, ha pedig "no"-ra állítottuk, csak a "load =>" illetve "preload =>" utasítások által kijelölt modulokat tölti be; érdemes "no"-ra állítani a fent említettek miattlogin.aspx?timeout=true
  • a három utasítás:
load => chan_sip.so ; modul betöltése
noload => chan_h323.so ; modul kihagyása
preload => res_odbc.so ; modul betöltése az asterisk core inicializálása előtt - ritkán van rá szükség.

Milyen modulokat is lehet betölteni?

  • források (resources): hozzáférést biztosítanak tárolt információkhoz, pl. res_musiconhold.so biztosítja a várakozás alatt lejátszandó zenéhez való hozzáférést, vagy a res_odbc.so -val egy ODBC adatbázishoz biztosít hozzáférést, ha a konfigurációs beállításokat fájlok helyett adatbázisban szeretnénk tárolni
  • alkalmazások, melyeket hívások felépítéséhez, lebontásához, várakoztatáshoz használunk a hívástervben (egyszerűbben: amiket az extensions.conf -ba kell írni)
  • hívásinformációk (mint pl. hívó, hívott, dátum, időtartam, hívás végső állapota, stb) adatbázisban történő tárolásához adatbázis-csatolók, pl. cdr_pgsql.so
  • csatornakezelő modulok, melyek feladata a használt protokollok megvalósítása, keretezés, címzés (pl. SIP esetén chan_sip.so)
  • codec-ek, pl. codec_ulaw.so
  • formátumok, pl. format_wav.so, hasonló a codec-hez, csak nem live media stream-hez, hanem fájlokhoz
  • PBX core modulok, pl. pbx_config.so
  • egyedülálló funkciók: jelenleg csak egy ilyen van, a func_callerid.so, ami ugyan megvan a pdb_functions.so -ban is, de ha nem akarjuk a nagyobb modult betölteni, mert elég ez a funkció, és kevés memóriával rendelkező vason fut az Asteriskünk, akkor hasznos lehet

[szerkesztés] 2.1.2 /etc/asterisk/sip.conf

A csatornák általános jellemzőinek beállítását és a SIP csatornák felvételét oldjuk meg itt. A [general] részben az általános, minden egyes csatornára jellemző tulajdonságokat állíthatjuk be:

  • IPcím, port: bindaddr, bindport
  • külső IP cím (NAT esetén fontos): externip
  • helyi hálózati tartomány: localnet (ha van NAT is, akkor kell, hogy mikor használja az externip-t a SIP fejlécben)
  • vendégek beengedése: allowguest (lényegében az, hogy legyen-e autentikáció, de figyeljünk oda, vannak kliensek, amik nem támogatják az autentikációt, ekkor allowguest=yes legyen)
  • hívásnaplózás: recordhistory
  • videohívás támogatása: videosupport (csak két végpont között, a videokonferencia még nem támogatott)

Egy csatorna felvétele (tehát egy kliens és az Asterisk közötti csatornáról van szó, így a kliens adatait kell itt megadnunk) a [SIP név] után történik:

  • típus: type={friend, user, peer} - a user csak bejövő hívásokat kezdeményezhet, a peer felé csak kimenő hívás történhet (mármint az Asterisk szemszögéből), a friend pedig mindkét irányú híváskezdeményezésben részt vehet
  • használt/nem használt codec-ek: allow, disallow
  • csoportok: callgroup, pickupgroup, segítségükkel az adott csoportba tartozó csatornák válaszolhatnak a többi csoporttagnak szóló hívásra (felvehetik)
  • melyik hívásterv vonatkozzon a csatornára: context
  • IP cím, port: host={IP vagy "dynamic"}, port=5060
  • NAT mögött van-e a kliens: nat=yes/no
  • felhasználói név, jelszó: username, secret
  • lehetőség van a jelszavak MD5 hash-ének tárolására is: md5secret

A type, host, username, secret, insecure változók csak csatornánként külön-külön adhatók meg, a többit általánosan is beállíthatjuk a [general] részben; melyeket felüldefiniálhatunk egy konkrét csatornán belül. Nézzünk erre egy példát:

[general]
allowguest=no     ; autentikáció szükséges
recordhistory=no  ; nem kell hívásnapló
nat=no            ; nem vagyunk NAT mögött

[100]             ; SIP név/hívószám, erre hivatkozunk a hívástervben
type=friend       ; tud hívni és hívást fogadni is
host=dynamic      ; dinamikus IP címe van, így nem IP alapján autentikál, hanem username/secret -el kell regisztrálnia
recordhistory=yes ; ennél a csatornánál legyen hívásnaplózás
username=tibi     ; felhasználói név
secret=jelszo     ; jelszó plain text-ben

Sok felhasználó esetén érdemes a konfigurációt adatbázisban tárolni.

[szerkesztés] 2.1.3 /etc/asterisk/extensions.conf

Itt definiálhatjuk a fentebb már emlegetett hívásterveket. Egy hívásterv megmondja, hogy egy szám hívása esetén mi történjen. Ha a hívás a belső VoIP hálózaton történik, vagy egy Zaptel kártya FXS portjára érkezik (ez a port lényegében az, ahova a telefonkészüléket csatlakoztatjuk, tehát fogadja a tárcsázott számokat, tápellátást ad a telefonnak, csörgő hangot generál), azaz a hívás címzettje nem a PBX, a hívástervben a hívott számhoz vagy mellékhez tartozó alkalmazás(ok) fog(nak) lefutni. Ha viszont olyan hívás érkezik, amelynek nincs közvetlen címzettje (ilyen lehet a Zaptel kártya csörgő FXO portja (amely lényegében az, amit a telefonhálózathoz csatlakoztatunk, tehát küldi a tárcsázott számokat, fogadja a csörgő hangot), akkor az "s" (start) mellékhez tartozó alkalmazás(ok) fog(nak) lefutni. Ha egy adott mellékhez több alkalmazás is tartozik, akkor ezek lefutásának sorrendjét a prioritások, valamint maguk az alkalmazások is meghatározzák (van pl. olyan alkalmazás, melynek segítségével feltételes elágazást rakhatunk a hívástervbe).

  • [general] rész: pár általános beállítás, három fontos
    • static=yes
    • writeprotect=no - ezzel a két beállítással CLI-ből is menthetjük a hívástervet a "save dialplan" paranccsal.
    • autofallthrough=yes - ha ezt nem állítjuk be, akkor ha egy adott mellékhez tartozó összes alkalmazás lefutott, az Asterisk várni fog újabb tárcsázott számra, ahelyett, hogy kilépne
  • [globals] rész: globálisváltozó-definíciók, pl. ha olvashatóbbá akarjuk tenni a fájlt, akkor az egyes csatornákat változókban tárolhatjuk
  • [context] - a konkrét hívástervek, ezekre hivatkozhatunk a csatornák beállításainál, egy fajta utasítást tartalmazhat, melynek formája: exten => hívószám, prioritás, alkalmazás
    • hívószám helyett még lehet minta is, ez "_"-al kezdődik, és a következő speciális karaktereket tartalmazhatja:
      • X : 0-9 közötti számjegy
      • Z : 1-9 közötti számjegy
      • N : 2-9 közötti számjegy
      • [] -ek között tartományokat adhatunk meg, pl. [14-6] az 1,4,5,6 számok valamelyikére érvényes
      • .() - a zárójelben megadott karakter(ek)ből több darab is előfordulhat egymás után
    • prioritás: meghatározzák az alkalmazások lefutásának sorrendjét, egyben címkék is a Goto-hoz. 1-el kezdődően egyesével növekedve kell lenniük (de lehetnek kivételek, pl. Goto-val, vagy egyes parancsok hiba esetén úgy térnek vissza, hogy mondjuk az n+101. prioritásra ugranak); valamint szám helyett írhatunk "n"-et, ekkor ezt 1-el nagyobbnak értelmezi az előző prioritásnál, és ha egy új sort be akarunk szúrni a hívástervbe, akkor nem kell az összes sorszámot átírni.
    • alkalmazás: megmondja, hogy mi a teendő, ha hívnak egy számot
  • pár alkalmazás:
    • Dial(hívott(ak), [timeout], [flag-ek]) - hívja a paraméterben megadott feleket, összekapcsolja a hívót és a hívottat
      • a hívott számokat protokoll/szám formában kell megadni, pl. SIP/11; ebben az esetben a sip.conf -ban lévő 11-es számmal jelölt klienst fogja tárcsázni
      • a hívott számot át lehet adni paraméterként, ha mondjuk egy átjárón keresztül történik a hívás, pl. SIP/
      • hasznosabb flag-ek:
        • t illetve T: hívásátirányítás illetve -átadás engedélyezése (# gomb hatására)
        • w illetve W: hívás hangrögzítésének engedélyezése
        • a Dial alkalmazás kilépéskor állítja a következő változók értékét:
          • DIALEDTIME : a Dial meghívásától a kilépéséig eltelt idő
          • ANSWEREDTIME : magának a hívásnak az időtartama
          • DIALSTATUS : a hívás státusza, lehet: CHANUNAVAIL, CONGESTION, BUSY, NOANSWER, ANSWER, CANCEL.
    • Echo() : hangminőség tesztelésére jó, visszajátssza a fogadott hangot, a hívó #-el kiléphet.
    • Answer() : válaszol a hívásra csörgő csatornán (felveszi a kagylót, létrejön a hívás)
    • Ringing() : kicsengési hang kezdeményezése egy csatornán (a csatornától függ a kicsengés módja), ez arra jó, hogy a hívó fél ne a nagy semmit hallgassa addig, amíg a hívott fél felveszi a telefont, hanem a megszokott csengő hangot
    • Playback(fájlnév, [opciók]) : lejátszik egy adott fájlt a hívó fél felé
    • Background(fájlnév, [opciók]) : mint a Playback, azzal a különbséggel, hogy ha a hívó fél folyatja a tárcsázást, a lejátszás megáll
    • Hangup() : megszakítja a hívást az adott csatornán
    • Goto(cím) : az adott címre ugrik a dial plan-ben; a cím lehet prioritás az adott exten-en belül, lehet más extenben az adott context-en belül, de lehet más context-ben is
    • GotoIf(feltétel?cím1:cím2) : ha a feltétel teljesül, a prioritás1 következik, egyébként a prioritás2
    • System(cmd) : program végrehajtása (Asterisk-en kívül)
    • Queue(sor neve, [opciók]) : a queues.conf-ban meghatározott sorba állítja a bejövő hívásokat
    • Busy(), Congestion() : foglalt illetve minden vonal foglalt jelzést küld
    • Monitor,MixMonitor (fájlnév, [opciók]) : hívás rögzítését teszi lehetővé, a Monitor a két irányt külön fájlokba, a MixMonitor a két irányt összekeverve egy fájlba rögzít
    • NoOP(paraméter) : kiírja a paraméterként kapott információkat a CLI-ben

Egy egyszerű példa: a 123-as hívószám esetén imitáljon egy kicsengést, majd vegye fel a kagylót, és fusson le az Echo program; a 110-es szám hívása esetén pedig hívja fel a tibor nevű SIP felhasználót:

exten => 123,1,Ringing         ; kicsörgés
exten => 123,2,Answer          ; válasz a hívásra, a 2es prioritás miatt a kicsörgés után ez következik
exten => 123,3,Echo            ; a következő a visszhang program
exten => 110,1,Dial(SIP/tibor) ; 110-es szám esetén először hívja tibort
exten => 110,2,Hangup          ; a hívás végén bontsa a vonalat

[szerkesztés] 2.1.4 /etc/asterisk/queues.conf

Ebben a fájlban állíthatjuk be azt, hogy mi történjen, ha épp foglalt minden hívott fél és a hívónak várakoznia kell, valamint ha egy bejövő hívást több helyre egyszerre, vagy több hely közül egy kiválasztotthoz kell kapcsolnunk. Ehhez hívásvárakoztatási sorokat csinálunk, melyekbe tagokat veszünk fel (ezek a kliensek), és meghatározzuk, hogy egy bejövő hívás esetén az éppen szabad kliensek közül melyik kapja a hívást.

  • itt is van egy [general] rész, melynek beállításai az összes sorra vonatkoznak
  • az egyes sorokat külön szekciókban definiáljuk
  • musiconhold : zene lejátszása várakozás alatt - a részleteit a musiconhold.conf -ban állíthatjuk be
  • announce : elképzelhető olyan eset, amikor egy kliens több hívásvárakoztatási sornak is tagja (pl. egy call centerben, ahol egy alkalmazott válaszolhat az ügyfélszolgálatos és számlázási kérdésekre is); ilyen esetekben hasznos, ha a kicsörgés előtt a (szoftveres) telefonon megjelenik, hogy melyik sorból is jön a hívás, erre való az announce
  • strategy - milyen stratégia szerint válassza ki az éppen elérhető kliensek közül azt, ahol kicsörög a hívás:
    • ringall : minden tagnál csörögjön ki
    • roundrobin : az első tagtól kezdve próbálgat sorban, amíg szabad tagot nem talál
    • leastrecent : a legrégebben hívott tag kapja a hívást
    • fewestcalls : a legkevesebb hívást kapott tagra kerül a sor
    • random : véletlenszerűen választ
    • rrmemory : round-robin memóriával, ott kezdi a próbálgatást, ahol előzőleg abbahagyta
  • timeout : mennyi ideig csörgessen egy klienst, mielőtt visszarakná a hívást a sorba
  • monitor-format : a sor minden hívása rögzítésre kerül az adott formában (Monitor-t használ, tehát külön fájlokban lesznek a hangsávok)
  • monitor-join : hívás után összemixeli a sávokat egy fájlba
  • member => tag_neve : így vehetünk fel klienseket (ahol végződik a hívás) a sorba
  • wrapuptime : egy hívás befejezte után mennyi ideig ne adjon új hívást a sor tagjának (ms-ban)

[szerkesztés] 2.2 Alternatív konfiguráció: CLI

Ha az asterisk-et nem démonként indítjuk (argumentumok nélkül), hanem mondjuk a "-vvvgc" kapcsolóval, akkor az asterisk beépített parancssoros kezelőfelületéhez jutunk. Rengeteg beállítást itt is el tudunk végezni, ennek előnye, ha valamilyen új funkciót először le akarunk tesztelni, nem kell külön újraindítgatni az asterisket minden kis módosítás után, tehát azonnal láthatjuk az eredményt.

  • add: a konfigurációs fájlok szerkesztése nélkül vehetünk fel extension-öket vagy queue tagokat:
    • add extension mellék, prioritás, alkalmazás, paraméterek into context
    • add queue member tag_neve to sor_neve
  • használhatjuk az Asterisk-et futtató gépet is telefonálásra (ehhez szükséges a chan_oss.so modul):
    • answer - hívás felvétele
    • dial - hívás
  • tölthetünk be modulokat futás közben: load modulneve.so, illetve újraolvashatjuk a reload-dal, valamint el is távolíthatjuk őket: unload
  • remove: az add-dal ellentétesen eltávolíthatunk extension-öket vagy sorokból tagokat
  • restart: minden csatornát lezár, minden modult újraolvas
    • restart gracefully : nem fogad több hívást, majd ha minden meglévő hívás lezárult, újraindul
    • restart now : azonnal újraindul, megszakítja a hívásokat
    • restart when convenient : fogad hívásokat, csak akkor indul újra, amikor éppen egy hívás sincs
  • show : lekérdezhetünk rengeteg dolgot, pl. show queues, show dialplan, show channels, show modules
  • stop: leállítás, paraméterei mint a restart-nál
  • sip history: sip előzmények be- illetve kikapcsolása
  • sip show: itt is rengeteg lehetőség van, pl. sip show channel, sip show user
  • save dialplan: ha módosítottunk rajta, így lehet elmenteni
  • a legfontosabb: help

[szerkesztés] 3 Sipura VoIP gateway

ISDN kártya helyett nyújt alternatív megoldást. A következőkben megnézzük, hogyan lehet egy Asterisk-el együtt működésre bírni egy ilyen eszközt.

[szerkesztés] 3.1 A gateway beállítása

  • Router/wan setup -ban: külső ip, elérhessük-e a WAN-on keresztül, stb; ha el szeretnénk érni, akkor az admin jelszót feltétlen állítsuk be a Voice/System -ben, különben könnyen szórakozhatnak velünk az unatkozó gonosz hackerek, és ne csináljanak jó nagy telefonszámlát, ha rákeresnek google-el a következőre: "linksys spa configuration inurl:admin/advanced" (meglepő, hogy milyen sok találatot ad); még jobb, ha nem elérhető WAN felől a webes felület. Az egyszerűség kedvéért csináljuk úgy, hogy a WAN portján csatlakozik csak hálózathoz, így a WAN ip-t kell majd beállítani az Asterisk-ben is.
  • A többi szükséges beállítást a Voice/PSTN Line alatt érhetjük el:
    • Proxy and Registration:
      • proxy: az Asterisk IP-je
      • Use Outbound Proxy: no
      • Register: no
      • Make Call Without Reg: yes
      • ans Call Without Reg: yes
    • Dial Plans: az egyiket allitsuk be a következőre (mondjuk a 8ast): (S0<: 123@AsteriskIPje:5060>)
    • VoIP-To-PSTN Gateway
      • VoIP-To-PSTN Gateway Enable: yes
      • One Stage Dialing: Yes
      • VoIP Caller Auth Method: None
      • VoIP Caller Default DP: 1 - ne az legyen, amelyikre az Asterisket beírtuk fentebb
    • PSTN-To-VOIP Gateway
      • PSTN-To-VOIP Gateway Enable: yes
      • PSTN Ring Thru Line 1: No
      • PSTN Caller Default DP: 8 - amelyikre beállítottuk az Asterisket
      • Off Hook While Calling VoIP: Yes
      • PSTN Caller Auth Method: none

[szerkesztés] 3.2 Az Asterisk beállítása

[szerkesztés] 3.2.1 sip.conf

  • a neve legyen mondjuk [sipura]
  • egy friend-et kell felvennünk (egyes leírások egy peer + egy user -el ajánlják, de szerintem az felesleges). - type=friend
  • host=192.168.1.10 - vagy amit beállítottunk a VoIP gateway WAN IP címének, ha az a WAN felől csatlakozik
  • port=5060 (a default, a lényeg, hogy ellenőrizzük a Sipura beállításainál is a dolgot a Voice/SIP és a Voice/PSTN line alatt)
  • codec beállítások: disallow=all, allow=ulaw, az eszköz csak ezt szereti
  • nat=no
  • insecure=very - ne kelljen autentikálnia
  • qualify=yes - periodikusan ellenőrizze, hogy elérhető-e a gateway
  • canreinvite=no - az Asterisk-en át menjenek az RTP csomagok
  • és mondjuk context=pstn

[szerkesztés] 3.2.2 extensions.conf

A bejövő hívásoknál most nem a start melléket használjuk, mivel a VoIP gateway nem címzett nélkül hívja fel a PBX-et, hanem azon a címen, amit megadtunk a gateway konfigurációjában a DialPlans-nél (tehát a 123-as számot hívja az Asterisk-en keresztül) . A kimenő hívásokat kezelő context(ek)ben a Dial hívott paramétere legyen SIP/${EXTEN}@sipura, ezzel átadtuk a hívott számot az átjárónak.

[szerkesztés] 3.3 Mire figyeljünk oda?

A fent leírtak elégségesek a működéshez, viszont érdemes megfontolni pár dolgot:

  • Kell tudnunk, hogy milyen számról jön a hívás? Ha nem, akkor a VoIP gateway beállításainál kapcsoljuk ki a Voice/PSTN line/PSTN to VoIP -ban a PSTN CID For VoIP CID -t, mert ez egy 2-3mp-es késleltetést ad a kicsörgéshez

[szerkesztés] 3.4 Egy összetett példa

Adott a feladat: csináljunk call centert. Van 2 vonal, ebből az egyiknek vezetékes számokra jók a percdíjai, a másiknak mobil számokra (pl. egy VoIP gateway GSM adapteren lóg, a másik a telefon vonalon), és lehetőleg próbáljunk olcsóért telefonálni. A call centerben van 2 SIP kliens, bejövő hívások csörögjenek ki mindenhol, valamint minden kimenő hívást rögzítsünk. A VoIP gateway-ek beállítása a fentieknek megfelelően történik, az IP címek legyenek 192.168.1.10 illetve 192.168.1.11.

  • sip.conf:
[general]
disallow=all
allow=ulaw
canreinvite=no
nat=no
recordhistory=yes
qualify=yes

[gsm]
type=friend
host=192.168.1.10
insecure=very
context=kintrol

[isdn]
type=friend
host=192.168.1.11
insecure=very
context=kintrol

[11]
type=friend
username=callcenter1
secret=titok1
host=dynamic
context=bentrol

[12]
type=friend
username=callcenter2
secret=titok2
host=dynamic
context=bentrol
  • extensions.conf:
[general]
static=yes
writeprotect=no
autofallthrough=yes

[kintrol]
exten => 123,1,NoOP(${CALLERID})   ; kiírja a CLI-ben a hívó fél telefonszámát
                                   ; (ha nem kapcsoltuk ki ezt a VoIP gateway beállításainál)
exten => 123,n,Ringing             ; kicsörgő hang generálása (a hívó fél hallja)
exten => 123,n,Queue(kliensek)     ; a hívást a "kliensek" hívásvárakoztatási sorba állítja
exten => 123,n,Answer              ; felveszi a hívást, ezzel létrejött a kapcsolat a hívó fél és
                                   ; a "kliensek" hívásvárakoztatási sor egyik tagja között
exten => 123,n,Hangup              ; bontja a vonalat

[bentrol]
;emeltdijast ne hivjanak:
exten => _0690XXXXXX,1,Hangup      ; itt egyből megszakítja a hívást (foglalt jelzés megy a hívó fél felé)
exten => _0681XXXXXX,1,Hangup

; mobilt:
exten => _06[237]0XXXXXXX,1,MixMonitor(/ahovamentenikell/${CALLERID}-${TIMESTAMP}.wav) ; a hangrögzítés elindítása
exten => _06[237]0XXXXXXX,2,Ringing                                     ; kicsörgési hang küldése a hívó fél felé
exten => _06[237]0XXXXXXX,3,Dial(SIP/${EXTEN}@gsm,60)                   ; hívás a "gsm" VoIP gateway-en keresztül
exten => _06[237]0XXXXXXX,4,GotoIf($[${DIALSTATUS}=CHANUNAVAIL]?:5)  ; ha a "gsm" -el jelölt VoIP gateway
                                                                        ; használatban van, ugorjon az 5. sorra
exten => _06[237]0XXXXXXX,5,Dial(SIP/${EXTEN}@isdn,60)                  ; hívás az "isdn" VoIP gatewayen keresztül
exten => _06[237]0XXXXXXX,6,Hangup                                      ; vonal bontása

;vezetekest:
exten => _06XXXXXXXX,1,MixMonitor(/ahovamentenikell/${CALLERID}-${TIMESTAMP}.wav)
exten => _06XXXXXXXX,2,Ringing
exten => _06XXXXXXXX,3,Dial(SIP/${EXTEN}@isdn,60)
exten => _06XXXXXXXX,4,GotoIf($[${DIALSTATUS}=CHANUNAVAIL]?:5)
exten => _06XXXXXXXX,5,Dial(SIP/${EXTEN}@gms,60)
exten => _06XXXXXXXX,6,Hangup
  • queues.conf:
[kliensek]
timeout=15
retry=3
wrapuptime=1000
strategy=ringall
member => sip/callcenter1
member => sip/callcenter2
  • a teljesség kedvéért: modules.conf:
[modules]
autoload=no                     ; csak a load => -al megadott modulokat töltse be

load => chan_sip.so
load => res_features.so
load => res_monitor.so
load => res_musiconhold.so
load => app_queue.so
load => app_mixmonitor.so
load => app_dial.so
load => codec_ulaw.so
load => format_wav.so
load => pbx_config.so
load => pbx_functions.so

[szerkesztés] 4 Ajánlott irodalom

--Makár János Zénó

Személyes eszközök