Portál AbcLinuxu, 25. května 2025 03:41

Asterisk: VoIP ústředna - 3 (schránka, konference)

7. 3. 2007 | Ondřej Valoušek
Články - Asterisk: VoIP ústředna - 3 (schránka, konference)  

V předchozím díle tohoto seriálu jsme dokázali naši ústřednu jednoduše nakonfigurovat a ti úspěšní si byli schopni i zavolat. V tomto díle trochu "uhladíme" vytáčecí plán tím, že ošetříme chybové stavy. Funkci ústředny také obohatíme o hlasovou schránku a nastíníme možnosti konferenčního volání.

Opět ovšem nečekejte žádný vyčerpávající popis všech funkcí, půjde spíše o demonstraci možností Asterisku.

Chybové stavy

V této kapitole se zaměříme na funkční ošetření "chybových" stavů, které mohou nastat při přepojování hovorů. Ono to teď sice telefonuje, ale při bližším zkoumání zjistíme, že tomu "cosi" chybí - např. při volání čísla, které není v číslovacím plánu, je hovor bez vysvětlení zavěšen, volaný telefon donekonečna vyzvání, dokud není vyzvednut apod.

Všechny tyto stavy se ošetřují v hlavním konfiguračním souboru číslovacího plánu - extensions.conf.

1. Ošetření dostupnosti účastníka

Příklad si ukážeme na Jardovi:

exten => 17,1,Dial(SIP/jarda,30)
   ; Wait 30 seconds for the user to come up
exten => 17,n,Goto(s-${DIALSTATUS},1)
   ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION

exten => s-NOANSWER,1,Playback(nbdy-avail-to-take-call)
   ; If unavailable
exten => s-NOANSWER,2,Playback(pls-try-call-later)
exten => s-NOANSWER,3,Hangup()
exten => s-BUSY,1,Playback(the-party-you-are-calling)
   ; If busy, play busy announce
exten => s-BUSY,2,Playback(is-curntly-busy)
exten => s-BUSY,3,Hangup()
exten => s-CHANUNAVAIL,1,Playback(pbx-invalid)
exten => s-CHANUNAVAIL,2,Hangup()

Myslím, že tento příklad nepotřebuje komentář. Jak vidno, do funkce Dial jsem předal další parametr - timeout. Pokud někdo Jardu zavolá, telefon bude max. 30 sekund vyzvánět. Pomocí příkazu Goto a podmíněným odskokem pak testujeme návratovou hodnotu (${DIALSTATUS}) výše zmiňované funkce tak, že volající je v případě neúúúspěchu příslušně informován (funkcí Playback). Poté je hovor ukončen (Hangup).

2. Ošetření volání nesprávného čísla

; now we handle invalid extensions
exten => i,1,Playback(pbx-invalid)
exten => i,n,Hangup()

; ... and timeouts
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

Vidíme, že pro jisté chybové stavy Asterisk definuje zvláštní, předdefinované extenze, které zde můžeme s výhodou využít. Faktem však zůstává, že jejich přínos je diskutabilní - spíše se přikláním k názoru je nevyužít, protože:

Hlasová schránka

Takřka samozřejmou součástí každé moderní telefonní ústředny je i možnost vytvoření hlasové schránky, kam může volající v případě nepřítomnosti nebo zaneprázdněnosti volaného uložit svůj vzkaz. Ani v Asterisku tato funkce nechybí, takže si ukažme příklad její konfigurace.

1. Voicemail.conf

Ano tušíte správně, v tomto konfiguračním souboru je možno vytvořit hlasové schránky pro jednotlivé účastníky. Ukažme si příklad:

[general]
format=wav|wav49|gsm
serveremail=root@localhost
attach=yes
maxmessage=180
minmessage=3
maxgreet=60

[default]
17 => 123,Jarda Toman,jarda.toman@seznam.cz

Vidíme, že syntaxe je podobná všem konfiguračním souborům Asterisku. V sekci general je vidět pár společných položek - v jakých formátech je zpráva zaznamenána, mailovou adresu správce, maximální a minimální časy nahrávek atd. Po nahrání hlasové zprávy je volaný o tomto spraven prostřednictvím emailu, ke kterému je tato zpráva přiložena. Pokud navíc telefon disponuje funkcí MWI (indikátor nevyzvednuté zprávy), Asterisk se postará o rozsvícení indikátoru.

V sekci default už následují definice jednotlivých účastníků ve formátu:

exten => password,description,email address[,optional]

Heslo je využito v případě, že si účastník zprávu chce vyzvednout pomocí telefonu - chrání tedy přístup do systému hlasové schránky pro každého účastníka.

2. extensions.conf

Určité úpravy jsou nutné i u číslovacího plánu, ale změny jsou jen drobné:

exten => 17,1,Dial(SIP/jarda,30)
    ; Wait 30 seconds for the user to come up
exten => 17,n,Goto(s-${DIALSTATUS},1)
    ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION
   
exten => s-NOANSWER,1,Voicemail(17,u)
    ; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,2,Hangup()
exten => s-BUSY,1,Playback(the-party-you-are-calling)
    ; If busy, play busy announce
exten => s-BUSY,2,Playback(is-curntly-busy)
exten => s-BUSY,3,Hangup()
exten => s-CHANUNAVAIL,1,Playback(pbx-invalid)
exten => s-CHANUNAVAIL,2,Hangup()

exten => 50,1,Answer()
exten => 50,n,VoiceMailMain(${CALLERID(num)}@default)
exten => 50,n,Hangup()

V první změně jsem zařídil, že po uplynutí 30s vyzváněcí pauzy (odskok na s-NOANSWER) přejde systém automaticky do hlasové schránky. Druhá změna se týkala nové definice linky 50, kde si účastníci mohou (po zadání hesla) své zpráávy vyzvednout. Tato linka je také vhodná pro další úkony související s hlasovou schránkou (mazání zpráv, nahrání uvítací zprávy, změna hesla, apod). Všimněte si užití funkce CALLERID(num), která vrací číslo volajícího. Funkci VoiceMailMain je samozřejmě možno užít i bez argumentů, pak by ale byl každý účastník kromě hesla dotázán i na číslo své linky, čemuž právě použitím argumentu zabráníme.

Konference

Další mocnou zbraní Asterisku je možnost konferenčního volání. Pod pojmem konference zde rozumíme definici jisté extenze (klapky), kam mohou lidé volat a slyší se pak navzájem. V tomto případě je tedy volaným přímo ústředna Asterisk, která hovory přijímá, mixuje a odesílá zpět.

1. meetme.conf

V tomto souboru se definují jednotlivé konferenční "místnosti".

[rooms]
;
; Usage is conf => confno[,pin][,adminpin]
;
conf => 1,2468

Vidíme, že syntaxe je velmi jednoduchá - vytvořil jsem místnost s číslem 1 chráněnou PINem. Tuto místnost pak můžeme použít v číslovacím plánu takto:

2. extensions.conf

exten => 02,1,MeetMe(1)
exten => 03,1,MeetMe(2,DpMIx)

Vidíme, že z číslovacího plánu konferenci aktivujeme pomocí funkce MeetMe. V prvním případě jsem obsadil klapku 02, která volajícího spojí (po zadání správného PINu) s místností 1 (jak jsem ji definoval v konfiguračním souboru meetme.conf).

Ve druhém, zajímavějším, případě (jediný, který u nás provozuji) spojuji klapku 03 s neexistující místností 2 - přepínač D mi zajistí její dynamické vytvoření a přiřazení PINu prvním volajícím (přepínač p). Pokud je v konferenci pouze jediný volající, přepínač M zajistí přehrávání muziky na pozadí (music on hold, viz musiconhold.conf) a připojení/odpojení každého účastníka je automaticky ohlášeno - přepínač I.

Přepínačů k funkci MeetMe je samozřejmě daleko více - opět doporučuji si prostudovat manuál, pokud vás tato funkce zaujala.

Poznámka:

Za zmínku také stojí, že se funkce MeetMe dočkala v poslední době docela zajímavého rozvoje - např. rozdíly v její konfigurovatelnosti ve verzi 2.4 a 4.0 jsou při pohledu do zdrojového kódu dosti značné, takže pokud ji chcete využít naplno, koukněte se raději přímo do zdrojového kódu svého Asterisku. Jedním dechem ale musím bohužel dodat, že jinak naprosto stabilní Asterisk dokáže tato funkce za jistých "záhadných" podmínek spolehlivě sestřelit - obvykle na konci konferenčního volání.

To se mi ale stalo za dobu funkce naší ústředny (1 rok) jen dvakrát a to konferenční hovory docela intenzivně využíváme.

Závěr

V příštím, a pravděpodobně i posledním, díle konečně ústřednu připojíme k veřejné síti PSTN a zbyde-li místo, pak ukážeme i výhody použití maker v číslovacím plánu.

Seriál Asterisk: VoIP ústředna (dílů: 4)

První díl: Asterisk: VoIP ústředna - 1 (plánování), poslední díl: Asterisk: VoIP ústředna - 4 (připojení do PSTN).
Předchozí díl: Asterisk: VoIP ústředna - 2 (konfigurace)
Následující díl: Asterisk: VoIP ústředna - 4 (připojení do PSTN)

Související články

VoIP: Telefonování přes internet pro každého
Skype - internetová telefonie na GNU/Linuxu
Síťové technologie Cisco
Jaderné noviny: Wireless Networking Summit 2006

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

Diskuse k tomuto článku

7.3.2007 11:58 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Cislo hlasove schranky
Odpovědět | Sbalit | Link | Blokovat | Admin
Rad bych upozornil, ze cisla hlasovych schranek urcene ve voicmail.conf jsou nezavisla na cislech telefonu (extensions) v sip.conf a extensions.conf.

Toho lze vyuzit, chceme-li mit virtualni hlasove schranky, tj. schranky, ke kterym neexistuje telefonni pristroj.

Naopak proto si musime dat pozor, abysme spravne sparovali obe cisla, pozadujemeli striktni par telefon-schranka.

Co se tyce MWI, cislo schranky, kterou bude MWI subsystem prohledavat a oznamovat, musi (? aspon mysli, ze to bylo treba) byt uvedeno v sip.conf volbou mailbox. (Jinak by hrozilo, ze se zly telefonista dozvi, kolik novych a starych zprav ma jiny telefonista.) Zrovna tak je mozne takto povolit odebirani upozorneni z vice schranek jednomu telefonnimu cislu.
7.3.2007 14:24 Ondar | skóre: 25 | blog: Linux_blog
Rozbalit Rozbalit vše Re: Cislo hlasove schranky
Dík za tuto poznámku - důležitý fakt, že čísla schránek a telefonu nejsou automaticky spárována je opoměl zmínit. Také ovládání MWI mi nebylo nikdy úplně jasné (prostě mi to vždy fungovalo jak jsem předpokládal :-) ), takže dík i za toto vysvětlení
7.3.2007 13:23 kokoska.rokoska
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravim vespolek!
Rad bych upozornil, ze se vloudila chybicka do kodu u "timeoutu" a "neplatneho cisla linky" - Ma to byt naopak:
i = invalid
t = timeout

A mozna by jeste stalo za to dodat, ze pro fungovani konferenci (Meetme) je nezbytne nutny funkcni casovac.
Bud pridavna karta s vlastnimi hodinami nebo "virtualni" SW casovac ztdummy.

Hezky den!

kokoska.rokoska
7.3.2007 14:37 Ondar | skóre: 25 | blog: Linux_blog
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Dík za opravu - a ano, k MeetMe skutečně potřebujete časovač - buď nějakou kartu (jakoukoli) Digium nebo ztdummy
7.3.2007 19:18 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Opraveno.
Ondřej Kuda avatar 7.3.2007 13:53 Ondřej Kuda | skóre: 27 | blog: obcasny_blog
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
Existuje nejake GNU rozsireni pro Asterisk video konference?
7.3.2007 14:44 Ondar | skóre: 25 | blog: Linux_blog
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Pokud mám informace, tak na podpoře videa (nejen konference) se pracuje už v samotném Asterisku. Základní podporu má Asterisk 1.4 (umí komunikovat s videotelefonem s tím, že video vynechává). Lepší podporu lze očekávat až ve verzi 1.6
9.3.2007 13:13 pj
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
podle me video v 1.4 mezi dvema telefony pojede, za predpokladu, ze nebude treba transkodovani, tj. telefony musi mit stejne parametry vide, kodek rozliseni atd...
7.3.2007 18:50 johny
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
mam problem s meetme. presiel som niekolko examplov a kus dokumentacie, ale stale sa nemozem dostat do nijakej miestnosti, koncim s nahovorenou hlaskou: "That is not a valid conference number, please try again"
8.3.2007 09:22 Prochazka
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
super clanek.Kdy planujete to dorazit?? Uz se nemuzu dockat.Zatim postupuji podle Vas a vse OK. Jeste jednou diky a honem sem hodte dalsi :)
8.3.2007 11:38 Ondar | skóre: 25 | blog: Linux_blog
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Děkuji za slova chvály :-) Na poslední díl si bohužel budete muset pár týdnů počkat - potřebuji ještě otestovat nějaký hardware aby byl kompletní.
13.3.2007 13:42 Karel Joch
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
prosim jak presne funguje prikaz playback.Ve Vašem článku tento příkaz máte uvedený a bohužel nechápu zda uživatel který nebyl přítomen bude volat zpět uživateli který volal.Nebo zda se má volající uživatel pokusit zavolat později.Děkuji
14.3.2007 16:13 Ondar | skóre: 25 | blog: Linux_blog
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Playback volajicimu prehraje zvoleny zvukovy zaznam - zde jsem pouzil jeden ze standartnich samplu se kterymi je samotny astersik dodavan.
26.3.2007 18:00 Bomr
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
potreboval bych si neco ujasnit ohledne protokolu RTP. je to prosim takhle?? RTP prenasi vlastni multimedialni data SIP a H.323 se stara o vsechnu administrativu Diky za odpoved
29.3.2007 07:27 Wendy
Rozbalit Rozbalit vše GUI v ASTERISK
Odpovědět | Sbalit | Link | Blokovat | Admin
GUI rozhraní je integrováno i v ASTERISKu 1.4, nebo pouze v ASTERISKNOW?
31.3.2007 16:48 Wendy
Rozbalit Rozbalit vše GUI v ASTERISK
Halo v clanku je toto:

Dobrou zprávou je, že nejnovější verze Asterisku (1.4) obsahuje GUI rozhraní založené na vestavěném web serveru, které vám pomůže Asterisk nakonfigurovat i bez detailních znalostí jeho architektury. Je ovšem nutno poznamenat, že tato schopnost je v Asterisku úplně nová (a tudíž také ne dostatečně odladěná), takže bych na ni příliš nespoléhal (já to ani nezkoušel, ale rád si přečtu zkušenosti čtenářů).

Uz nekdo zkusil to GUI rozhrani spustit? Jak na to? Nejak sem to v Asterisku 1.4 nenasel...

Je to tam, nebo neni?
2.4.2007 17:41 Wendy
Rozbalit Rozbalit vše kompletni extensions.conf
Odpovědět | Sbalit | Link | Blokovat | Admin
Prosím, dejte sem někdo kompletní extensions.conf pro všechny tři uživatele. Z toho co je v příkladu nevím, co má být v extensions.conf třikrát a co pouze jednou. Je to tam nějak divně, v předchozích dílech bylo vše naznačeno pro Jardu, Tomáše a Jirku. Najednou 2 kluci bez vomluvy zmizeli a já z toho mám hlavu v pejru. Prosím autora, pokud tento článek myslíte jako návod pro začátečníky, uvádějte příklady úplné a polopatické. A ještě prosím opravujte chyby na které Vás upozorní. Například při použití userid se mi na telefonu nezobrazovalo kdo mi volá. Musel jsem to zaměnit za callerid. No a když někdo napíše - bez ztdummy nefunguje konference a vy mu to odsouhlasíte, tak by se asi také hodilo buď z článku návod na konferenci vyřadit, nebo to zaktualizovat o návod jak zprovoznit ztdummy... Nyní je to tak, že některé věci jsou opravené a některé ne. No ale abych to shrnul: těším se na další pokračování. Díky.
1.7.2007 18:04 Marek
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
Bude tento serial este pokracovat? Chcem pripojit Asterisk k ISDN linke a v dalsom diely by toto mohlo byt...
21.8.2007 18:50 Fibi
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, tak jsem diky tvemu navodu rozchodil asterisk a jsem velice rad, ze jeste existuji lide, kteri dokazou takhle pekne veci vysvetlit.... Ale ted k problemu:

Nastavil jsem dle navodu 4 tel. cisla a ke kazdemu zvlast hlasovou schranku.

Po zavolani jakehokoli cisla mi ale zpravy padaji do prvni hlasove schranky :-(

Muzes mi prosim poradit, kde je chyba??? Diky za jakoukoli radu

; Uzivatel exten => 1101,1,Dial(SIP/1101,30) ; Wait 30 seconds for the user to come up exten => 1101,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION exten => s-NOANSWER,1,Voicemail(1101,u) ; If unavailable, send to voicemail w/ unavail announce exten => s-NOANSWER,2,Hangup() exten => s-BUSY,1,Playback(the-party-you-are-calling) ; If busy, play busy announce exten => s-BUSY,2,Playback(is-curntly-busy) exten => s-BUSY,3,Hangup() exten => s-CHANUNAVAIL,1,Playback(pbx-invalid) exten => s-CHANUNAVAIL,2,Hangup()

; Uzivatel exten => 1102,1,Dial(SIP/1102,30) ; Wait 30 seconds for the user to come up exten => 1102,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION exten => s-NOANSWER,1,Voicemail(1102,u) ; If unavailable, send to voicemail w/ unavail announce exten => s-NOANSWER,2,Hangup() exten => s-BUSY,1,Playback(the-party-you-are-calling) ; If busy, play busy announce exten => s-BUSY,2,Playback(is-curntly-busy) exten => s-BUSY,3,Hangup() exten => s-CHANUNAVAIL,1,Playback(pbx-invalid) exten => s-CHANUNAVAIL,2,Hangup()
20.12.2008 16:37 Martini
Rozbalit Rozbalit vše Re: Asterisk: VoIP ústředna - 3 (schránka, konference)
Odpovědět | Sbalit | Link | Blokovat | Admin
Prosím, potřebuji rozchodit konferenci pro 5 účastníku. Konferenci jsem nastavil podle zdejšího konferenčního souboru. Ovšem při vytočení klapky se ozve "That is not a valid conference number, please try again" docetl jsem se zde v diskuzich ze je potreba naistalovat ztdummy,ale uz neni uvadeno jakym zpusobem. Dekuji za jakokoilv radu.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.