Asterisk erster Wählplan
Über den Asterisk-Rufnummernplan kann definiert werden, wie:
- einzelne Nebenstellen erreichbar sein sollen
- welche Applikationen eingebundenwerden sollen
- wie Amtsgespräche über den oder die Netzbetreiber geführt werden sollen
- wie Konferenzen und
- wie der Voicemailserver reagieren soll
- wann Nebenstellen erreichbar sein sollen
- und noch einge Punkte mehr.
Beim Dialplan werden wir uns im ersten Schritt der Konfiguarationsdatei /etc/asterisk/extensions.conf bedienen. In einem späteren Schritt werden wir dann diese Funktion in unsere zentrale MySQL-Datenbank verlagern.
Vorbereitungen
Zu eine der wenigen Konfigurationsdateien, die wir selbst von Grund auf aufbauen wollen, gehört der Wählplan.
Wir sichern also im ersten Schritt die mitgelieferte extensions.conf und extensions.ael, einer weiteren Form der Dialplan-Konfigurationsmöglichkeit.
# mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.orig # mv /etc/asterisk/extensions.ael /etc/asterisk/extensions.ael.orig
1. Anwendung "Echo-Test"
Als erstes legen wir uns nun unsere erste extensions.conf an.
# vim /etc/asterisk/extensions.conf
[general] static=yes writeprotect=no
Mit static und writeprotect legen wir fest, ob der Dialplan über die Asterisk-Konsole aus, manipuliert werden können soll. Somit beschränken wir uns darauf den Wählplan ausschliesslich über die Konfigurationsdatei extension.conf zu pflegen und nach Änderungen dieser Date den Wählplan neu zu laden. Dies geschieht über einen Aufruf von dialplan reload auf der Asterisk-Kommandozeile.
Für den Echotest erweitern wir nun unsere Konfigurationsdatei wie folgt:
[general] static=yes writeprotect=no [echotest] exten => 602,1,answer exten => 602,n,Wait(1) exten => 602,n,playback(demo-echotest) exten => 602,n,echo exten => 602,n,playback(demo-echodone) exten => 602,n,hangup [default] include => echotest
Nach dem Abspeichern unserer Änderungen, verbinden wir uns nun mit der Asterisk-Kommandozeile:
[root@asterisk]# asterisk -r Asterisk 1.6.0.26, Copyright (C) 1999 - 2010 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 1.6.0.26 currently running on office (pid = 21278) Verbosity is at least 3 asterisk*CLI>
Anschließend laden wir den dialplan.
asterisk*CLI> dialplan reload
Dialplan reloaded.
== Parsing '/etc/asterisk/extensions.conf': == Found
-- Registered extension context 'echotest' (0xa38afd0) in local table 0xa3a2b68; registrar: pbx_config
-- Added extension '602' priority 1 to echotest (0xa38afd0)
-- Added extension '602' priority 2 to echotest (0xa38afd0)
-- Added extension '602' priority 3 to echotest (0xa38afd0)
-- Added extension '602' priority 4 to echotest (0xa38afd0)
-- Added extension '602' priority 5 to echotest (0xa38afd0)
-- Added extension '602' priority 6 to echotest (0xa38afd0)
-- Registered extension context 'default' (0xa3a9f30) in local table 0xa3a2b68; registrar: pbx_config
-- Including context 'echotest' in context 'default'
== Parsing '/etc/asterisk/users.conf': == Found
-- Registered extension context 'app_dial_gosub_virtual_context' (0xa3aaea0) in local table 0xa3a2b68; registrar: app_dial
-- merging incls/swits/igpats from old(app_dial_gosub_virtual_context) to new(app_dial_gosub_virtual_context) context, registrar = pbx_config
-- Added extension 's' priority 1 to app_dial_gosub_virtual_context (0xa3aaea0)
-- Registered extension context 'app_queue_gosub_virtual_context' (0xa3a9038) in local table 0xa3a2b68; registrar: app_queue
-- merging incls/swits/igpats from old(app_queue_gosub_virtual_context) to new(app_queue_gosub_virtual_context) context, registrar = pbx_config
-- Added extension 's' priority 1 to app_queue_gosub_virtual_context (0xa3a9038)
-- Registered extension context 'parkedcalls' (0xa3a9248) in local table 0xa3a2b68; registrar: features
-- merging incls/swits/igpats from old(parkedcalls) to new(parkedcalls) context, registrar = pbx_config
-- Added extension '700' priority 1 to parkedcalls (0xa3a9248)
-- Time to scan old dialplan and merge leftovers back into the new: 0.000041 sec
-- Time to restore hints and swap in new dialplan: 0.000001 sec
-- Time to delete the old dialplan: 0.000008 sec
-- Total time merge_contexts_delete: 0.000050 sec
Mit dem Befehl dialplan show können wir uns nun unseren geladenen dialplan bei Bedarf nochmals anzeigen lassen.
office*CLI> dialplan show [ Context 'parkedcalls' created by 'features' ] '700' => 1. Park() [features] [ Context 'app_queue_gosub_virtual_context' created by 'app_queue' ] 's' => 1. NoOp() [app_queue] [ Context 'app_dial_gosub_virtual_context' created by 'app_dial' ] 's' => 1. NoOp() [app_dial] [ Context 'default' created by 'pbx_config' ] Include => 'echotest' [pbx_config] office*CLI> [ Context 'echotest' created by 'pbx_config' ] '602' => 1. answer() [pbx_config] 2. Wait(1) [pbx_config] 3. playback(demo-echotest) [pbx_config] 4. echo() [pbx_config] 5. playback(demo-echodone) [pbx_config] 6. hangup() [pbx_config] -= 4 extensions (9 priorities) in 5 contexts. =-
Wählen wir nun von einem angemeldeten SIP-Apparat die Rufnummer 602 wird der Echotest gestartet. Auf der Asterisk-Konsole können wir den Ablauf verfolgen.
== Using SIP RTP CoS mark 5 -- Executing [602@default:1] Answer("SIP/13-00000004", "") in new stack -- Executing [602@default:2] Wait("SIP/13-00000004", "1") in new stack [Mar 24 21:46:35] NOTICE[21400]: channel.c:2985 __ast_read: Dropping incompatible voice frame on SIP/13-00000004 of format ulaw since our native format has changed to 0x2 (gsm) -- Executing [602@default:3] Playback("SIP/13-00000004", "demo-echotest") in new stack -- <SIP/13-00000004> Playing 'demo-echotest.gsm' (language 'de') [Mar 24 21:46:57] WARNING[21400]: format_gsm.c:61 gsm_read: Short read (1) (Resource temporarily unavailable)! -- Executing [602@default:4] Echo("SIP/13-00000004", "") in new stack -- Executing [602@default:5] Playback("SIP/13-00000004", "demo-echodone") in new stack -- <SIP/13-00000004> Playing 'demo-echodone.gsm' (language 'de') [Mar 24 21:47:08] WARNING[21400]: format_gsm.c:61 gsm_read: Short read (1) (Resource temporarily unavailable)! -- Executing [602@default:6] Hangup("SIP/13-00000004", "") in new stack == Spawn extension (default, 602, 6) exited non-zero on 'SIP/13-00000004'
2. Anwendung "Asterisk-Demo"
Im nächsten Schritt ergänzen wir nun unseren Dialplan mit folgenden Zeilen:
[asterisk-demo] exten => 603,1,answer exten => 603,n,wait(1) exten => 603,n,playback(demo-abouttotry) exten => 603,n,dial(IAX2/guest@misery.digium.com/s@default) exten => 603,n,playback(demo-nogo) exten => 603,n,goto(s,6) [default] include => asterisk-demo
In Summe erhalten wir also nachfolgenden Dialplan, en wir auf der Asterisk-Konsole wieder mit dem Aufruf von dialplan reload laden.
[general] static=yes writeprotect=no [echotest] exten => 602,1,answer exten => 602,n,wait(1) exten => 602,n,playback(demo-echotest) exten => 602,n,echo exten => 602,n,playback(demo-echodone) exten => 602,n,hangup [asterisk-demo] exten => 603,1,answer exten => 603,n,wait(1) exten => 603,n,playback(demo-abouttotry) exten => 603,n,dial(IAX2/guest@misery.digium.com/s@default) exten => 603,n,playback(demo-nogo) exten => 603,n,goto(s,6) [default] include => echotest include => asterisk-demo
Nun haben wir unsere erste Außenanbindung geschaffen - mit Wahl der Rufnummer 603 wird eine Verbindung zum Asterisk-Demonstartionsserver bei Digium hergestellt. Die einzelnen Konfigurationsparameter dieser Dialplanerweiterung werden wir nun nachfolgend näher betrachten. Zuerst noch der Ablauf auf der Asterisk-Kommandozeile bei Anwahl der Rufnummer 603.
== Using SIP RTP CoS mark 5 -- Executing [603@default:1] Answer("SIP/13-00000009", "") in new stack -- Executing [603@default:2] Wait("SIP/13-00000009", "1") in new stack [Mar 24 22:13:27] NOTICE[21468]: channel.c:2985 __ast_read: Dropping incompatible voice frame on SIP/13-00000009 of format ulaw since our native format has changed to 0x2 (gsm) -- Executing [603@default:3] Playback("SIP/13-00000009", "demo-abouttotry") in new stack -- <SIP/13-00000009> Playing 'demo-abouttotry.gsm' (language 'de') [Mar 24 22:13:46] WARNING[21468]: format_gsm.c:61 gsm_read: Short read (1) (Resource temporarily unavailable)! -- Executing [603@default:4] Dial("SIP/13-00000009", "IAX2/guest@misery.digium.com/s@default") in new stack -- Called guest@misery.digium.com/s@default -- Call accepted by 216.207.245.8 (format gsm) -- Format for call is gsm -- IAX2/216.207.245.8:4569-1371 answered SIP/13-00000009 -- Hungup 'IAX2/216.207.245.8:4569-1371' == Spawn extension (default, 603, 4) exited non-zero on 'SIP/13-00000009'
3. interne Erreichbarkeit
Zur Erreichbarkeit unserer definierten Nebenstellen aus der /etc/asterisk/sip.conf erweitern wir unseren Dialplan ein wenig.
# vim /etc/asterisk/extensions.conf
[general] static=yes writeprotect=no [echotest] exten => 602,1,answer exten => 602,n,wait(1) exten => 602,n,playback(demo-echotest) exten => 602,n,echo exten => 602,n,playback(demo-echodone) exten => 602,n,hangup [asterisk-demo] exten => 603,1,answer exten => 603,n,wait(1) exten => 603,n,playback(demo-abouttotry) exten => 603,n,dial(IAX2/guest@misery.digium.com/s@default) exten => 603,n,playback(demo-nogo) exten => 603,n,goto(s,6) [local] ; Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw) [default] include => echotest include => asterisk-demo include => local
Anschließend verbinden wir uns wieder mit der Asterisk-Konsole.
# asterisk -r
Und laden unseren Dialplan.
asterisk*CLI> dialplan reload