Asterisk

A Unix/Linux szerverek üzemeltetése wikiből

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

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.

2 A konfiguráció

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.

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

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.

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

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)

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

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.

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

3.2 Az Asterisk beállítása

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

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.

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

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

4 Ajánlott irodalom

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

Személyes eszközök