Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
voip:asterisk:dialplan1 [24.03.2010 20:51. ] – angelegt (inkl. der sten Applikation "echotest") djangovoip:asterisk:dialplan1 [25.03.2010 21:07. ] (aktuell) – Dialplan-Erweiterung für interne Erreichbarkeit django
Zeile 1: Zeile 1:
 +====== Asterisk erster Wählplan ======
  
 +{{voip:asterisk.gif|Asterisk Logo}} \\
 +\\
 +Ü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
 +<code>[general]
 +static=yes
 +writeprotect=no</code>
 +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:
 +<code>[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</code>
 +Nach dem Abspeichern unserer Änderungen, verbinden wir uns nun mit der Asterisk-Kommandozeile:
 +<code>[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>
 +</code>
 +Anschließend laden wir den dialplan.
 +<code>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</code>
 +Mit dem Befehl **dialplan show** können wir uns nun unseren geladenen dialplan bei Bedarf nochmals anzeigen lassen.
 +<code>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. =-</code>
 +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.
 +<code>  == 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'</code>
 +===== 2. Anwendung "Asterisk-Demo" =====
 +Im nächsten Schritt ergänzen wir nun unseren Dialplan mit folgenden Zeilen:
 +<code>[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
 +</code>
 +In Summe erhalten wir also nachfolgenden Dialplan, en wir auf der Asterisk-Konsole wieder mit dem Aufruf von **dialplan reload** laden.
 +<code>[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</code>  
 +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**.
 +<code>  == 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'</code>
 +===== 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
 +<code>[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</code>
 +Anschließend verbinden wir uns wieder mit der Asterisk-Konsole.
 +  # asterisk -r
 +Und laden unseren Dialplan.
 +  asterisk*CLI> dialplan reload