Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
voip:asterisk18:dialplan1 [28.11.2010 21:14. ] – [4. Anwendung interne Erreichbarkeit] beschrieben djangovoip:asterisk18:dialplan1 [20.04.2018 08:59. ] (aktuell) – Externe Bearbeitung 127.0.0.1
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 "Ansagen-Demo" =====
 +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
 +
 +[ansagen-demo]
 +exten => 601,1,Answer()
 +exten => 601,n,Playback(tt-monkeysintro)
 +exten => 601,n,Playback(tt-monkeys)
 +
 +[default]
 +include => ansagen-demo</code>
 +Für die einzelnen Beispiele definieren wir einzelne //Kontexte//, die wir in //eckigen Klammern// - im obigen Beispiel **[ansagen-demo]** - definieren. So können wir später einzelne anwendungen leicht (de)aktivieren.\\
 +\\
 +Nach dem Abspeichern unserer Änderungen, verbinden wir uns nun mit der Asterisk-Kommandozeile und laden unseren geänderten Dialplan:
 +  # asterisk -r
 +
 +  Verbosity is at least 3
 +<code>dialplan reload
 +Dialplan reloaded.
 +  == Parsing '/etc/asterisk/extensions.conf':   == Found
 +    -- Registered extension context 'ansagen-demo'; registrar: pbx_config
 +    -- Added extension '601' priority 1 to ansagen-demo
 +    -- Added extension '601' priority 2 to ansagen-demo
 +    -- Added extension '601' priority 3 to ansagen-demo
 +    -- Registered extension context 'default'; registrar: pbx_config
 +    -- Including context 'ansagen-demo' in context 'default'
 +  == Parsing '/etc/asterisk/users.conf':   == Found
 +    -- Registered extension context 'app_dial_gosub_virtual_context'; 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
 +    -- Registered extension context 'parkedcalls'; registrar: features
 +    -- merging incls/swits/igpats from old(parkedcalls) to new(parkedcalls) context, registrar = pbx_config
 +    -- Added extension '700' priority 1 to parkedcalls
 +    -- Registered extension context 'app_queue_gosub_virtual_context'; 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
 +    -- Time to scan old dialplan and merge leftovers back into the new: 0.000149 sec
 +    -- Time to restore hints and swap in new dialplan: 0.000001 sec
 +    -- Time to delete the old dialplan: 0.000019 sec
 +    -- Total time merge_contexts_delete: 0.000169 sec</code>
 +Mit dem Befehl //**dialplan show**// können wir uns nun unseren geladenen dialplan bei Bedarf nochmals anzeigen lassen. 
 +
 +<code>dialplan show 
 +[ Context 'app_queue_gosub_virtual_context' created by 'app_queue' ]
 +  's' =>            1. NoOp()                                     [app_queue]
 +
 +[ Context 'parkedcalls' created by 'features' ]
 +  '700' =>          1. Park()                                     [features]
 +
 +[ Context 'app_dial_gosub_virtual_context' created by 'app_dial' ]
 +  's' =>            1. NoOp()                                     [app_dial]
 +
 +[ Context 'default' created by 'pbx_config' ]
 +  Include =>        'ansagen-demo'                                [pbx_config]
 +
 +[ Context 'ansagen-demo' created by 'pbx_config' ]
 +  '601' =>          1. Answer()                                   [pbx_config]
 +                    2. Playback(tt-monkeysintro)                  [pbx_config]
 +                    3. Playback(tt-monkeys)                       [pbx_config]
 +
 +-= 4 extensions (6 priorities) in 5 contexts. =-</code>
 +Wählen wir nun von einem angemeldeten SIP-Apparat die Rufnummer 601 wird als erstes ein Hinweis und anschließend das Affengeschrei am Endgerät wiedergegeben. Auf der Asterisk-Konsole können wir den Ablauf verfolgen. 
 +<code>  == Using SIP RTP CoS mark 5
 +[Nov 28 20:33:49] ERROR[18353]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session.
 +    -- Executing [601@default:1] Answer("SIP/13-0000000a", "") in new stack
 +    -- Executing [601@default:2] Playback("SIP/13-0000000a", "tt-monkeysintro") in new stack
 +    -- <SIP/13-0000000a> Playing 'tt-monkeysintro.gsm' (language 'de')
 +[Nov 28 20:33:49] NOTICE[26631]: channel.c:4006 __ast_read: Dropping incompatible voice frame on SIP/13-0000000a of format ulaw since our native format has changed to 0x2 (gsm)
 +    -- Executing [601@default:3] Playback("SIP/13-0000000a", "tt-monkeys") in new stack
 +    -- <SIP/13-0000000a> Playing 'tt-monkeys.gsm' (language 'de')
 +  == Spawn extension (default, 601, 3) exited non-zero on 'SIP/13-0000000a'</code>
 +===== 2. Anwendung "Echo-Test" =====
 +Im nächsten Schritt ergänzen wir nun unseren Dialplan mit folgenden Zeilen:
 +   # vim /etc/asterisk/extensions.conf
 +<code>[general]
 +static=yes
 +writeprotect=no
 +
 +[ansagen-demo]
 +exten => 601,1,Answer()
 +exten => 601,n,Playback(tt-monkeysintro)
 +exten => 601,n,Playback(tt-monkeys)
 +
 +[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 => ansagen-demo
 +include => echotest</code>
 +In Summe erhalten wir also nachfolgenden Dialplan, en wir auf der Asterisk-Konsole wieder mit dem Aufruf von **dialplan reload** laden.
 +<code>dialplan reload
 +Dialplan reloaded.
 +  == Parsing '/etc/asterisk/extensions.conf':   == Found
 +    -- Registered extension context 'ansagen-demo'; registrar: pbx_config
 +    -- Added extension '601' priority 1 to ansagen-demo
 +    -- Added extension '601' priority 2 to ansagen-demo
 +    -- Added extension '601' priority 3 to ansagen-demo
 +    -- Registered extension context 'echotest'; registrar: pbx_config
 +    -- Added extension '602' priority 1 to echotest
 +    -- Added extension '602' priority 2 to echotest
 +    -- Added extension '602' priority 3 to echotest
 +    -- Added extension '602' priority 4 to echotest
 +    -- Added extension '602' priority 5 to echotest
 +    -- Added extension '602' priority 6 to echotest
 +    -- Registered extension context 'default'; registrar: pbx_config
 +    -- Including context 'ansagen-demo' in context 'default'
 +    -- Including context 'echotest' in context 'default'
 +  == Parsing '/etc/asterisk/users.conf':   == Found
 +    -- Registered extension context 'app_dial_gosub_virtual_context'; 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
 +    -- Registered extension context 'parkedcalls'; registrar: features
 +    -- merging incls/swits/igpats from old(parkedcalls) to new(parkedcalls) context, registrar = pbx_config
 +    -- Added extension '700' priority 1 to parkedcalls
 +    -- Registered extension context 'app_queue_gosub_virtual_context'; 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
 +    -- Time to scan old dialplan and merge leftovers back into the new: 0.000164 sec
 +    -- Time to restore hints and swap in new dialplan: 0.000000 sec
 +    -- Time to delete the old dialplan: 0.000020 sec
 +    -- Total time merge_contexts_delete: 0.000184 sec</code>
 +Bei Anwahl der Rufnummer **602** wird nun die Anwendung //Echo-Test// gestartet. Hierbei wird alles, was man sagt zum Endgerät zurückgeschickt. Man kann sich somit sehr einfach ein Bild von der Latenz des Asterisk-Servers machen.
 +Auf der Asterisk-Konsole können wir den Ablauf verfolgen. 
 +<code>  == Using SIP RTP CoS mark 5
 +[Nov 28 20:47:30] ERROR[18353]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session.
 +    -- Executing [602@default:1] Answer("SIP/13-0000000b", "") in new stack
 +    -- Executing [602@default:2] Wait("SIP/13-0000000b", "1") in new stack
 +[Nov 28 20:47:31] NOTICE[26657]: channel.c:4006 __ast_read: Dropping incompatible voice frame on SIP/13-0000000b of format ulaw since our native format has changed to 0x2 (gsm)
 +    -- Executing [602@default:3] Playback("SIP/13-0000000b", "demo-echotest") in new stack
 +    -- <SIP/13-0000000b> Playing 'demo-echotest.gsm' (language 'de')
 +    -- Executing [602@default:4] Echo("SIP/13-0000000b", "") in new stack
 +    -- Executing [602@default:5] Playback("SIP/13-0000000b", "demo-echodone") in new stack
 +    -- <SIP/13-0000000b> Playing 'demo-echodone.gsm' (language 'de')
 +    -- Executing [602@default:6] Hangup("SIP/13-0000000b", "") in new stack
 +  == Spawn extension (default, 602, 6) exited non-zero on 'SIP/13-0000000b'</code>
 +===== 3. Anwendung "Asterisk-Demo" =====
 +Im nächsten Schritt ergänzen wir nun unseren Dialplan mit folgenden Zeilen: 
 +   # vim /etc/asterisk/extensions.conf
 +<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, den wir auf der Asterisk-Konsole wieder mit dem Aufruf von //**dialplan reload**// laden. 
 +<code>[general]
 +static=yes
 +writeprotect=no
 +
 +[ansagen-demo]
 +exten => 601,1,Answer()
 +exten => 601,n,Playback(tt-monkeysintro)
 +exten => 601,n,Playback(tt-monkeys)
 +
 +[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 => ansagen-demo
 +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
 +[Nov 28 21:35:54] ERROR[18353]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session.
 +    -- Executing [603@default:1] Answer("SIP/13-0000000e", "") in new stack
 +    -- Executing [603@default:2] Wait("SIP/13-0000000e", "1") in new stack
 +[Nov 28 21:35:55] NOTICE[26752]: channel.c:4006 __ast_read: Dropping incompatible voice frame on SIP/13-0000000e of format ulaw since our native format has changed to 0x2 (gsm)
 +    -- Executing [603@default:3] Playback("SIP/13-0000000e", "demo-abouttotry") in new stack
 +    -- <SIP/13-0000000e> Playing 'demo-abouttotry.gsm' (language 'de')
 +    -- Executing [603@default:4] Dial("SIP/13-0000000e", "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-1019 answered SIP/13-0000000e
 +    -- Hungup 'IAX2/216.207.245.8:4569-1019'
 +  == Spawn extension (default, 603, 4) exited non-zero on 'SIP/13-0000000e'</code>
 +===== 4. Anwendung "interne Erreichbarkeit" =====
 +==== SIP Teilnehmer ====
 +Zur Erreichbarkeit unserer definierten Nebenstellen aus der /etc/asterisk/sip.conf erweitern wir unseren Dialplan nun wie folgt. 
 +  # vim /etc/asterisk/extensions.conf
 +<code>[intern]
 +; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
 +exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw)
 +
 +[default]
 +include => intern</code>
 +Somit haben wir nun nach den ersten Konfigurationsbeispielen in Summe folgenden Dialplan, den wir auf der Asterisk-Konsole wieder mit dem Aufruf von **//dialplan reload//** laden. 
 +<code>[general]
 +static=yes
 +writeprotect=no
 +
 +[intern]
 +; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
 +exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw)
 +
 +[ansagen-demo]
 +exten => 601,1,Answer()
 +exten => 601,n,Playback(tt-monkeysintro)
 +exten => 601,n,Playback(tt-monkeys)
 +
 +[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 => intern
 +include => ansagen-demo
 +include => echotest
 +include => asterisk-demo</code>
 +Nunmehr haben wir auch die interne Erreichbarkeit unserer Nebenstellen sichergestellt. Im nachfolgenden Beispielt wird von der Nebenstelle **14** die Nebenstelle **13**.
 +<code>  == Using SIP RTP CoS mark 5
 +[Nov 28 22:03:45] ERROR[18353]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session.
 +    -- Executing [13@default:1] Dial("SIP/14-00000010", "SIP/13,55,TtrWw") in new stack
 +  == Using SIP RTP CoS mark 5
 +    -- Called 13
 +    -- SIP/13-00000011 is ringing
 +    -- SIP/13-00000011 is ringing
 +    -- SIP/13-00000011 is ringing
 +    -- SIP/13-00000011 is ringing
 +    -- SIP/13-00000011 is ringing
 +    -- SIP/13-00000011 answered SIP/14-00000010
 +  == Spawn extension (default, 13, 1) exited non-zero on 'SIP/14-00000010'</code>
 +==== IAX2 Teilnehmer ====
 +Zur Erreichbarkeit unserer definierten Nebenstellen aus der /etc/asterisk/iax.conf erweitern wir unseren Dialplan nun wie folgt. 
 +  # vim /etc/asterisk/extensions.conf
 +<code>[intern]
 +; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
 +exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw)
 +; interne Erreichbarkeit des IAX-Tielnehmers mit der Rufnummer 33 ermöglichen
 +exten => 33,1,Dial(IAX2/33,55,TtrWw)
 +
 +[default]
 +include => intern</code>
 +Unseren Dialplan laden wir auf der Asterisk-Konsole wieder mit dem Aufruf von **//dialplan reload//**.
 +<code>[general]
 +static=yes
 +writeprotect=no
 +
 +[intern]
 +; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
 +exten => _XX,1,Dial(SIP/${EXTEN},55,TtrWw)
 +; interne Erreichbarkeit des IAX-Tielnehmers mit der Rufnummer 33 ermöglichen
 +exten => 33,1,Dial(IAX2/33,55,TtrWw)
 +
 +[ansagen-demo]
 +exten => 601,1,Answer()
 +exten => 601,n,Playback(tt-monkeysintro)
 +exten => 601,n,Playback(tt-monkeys)
 +
 +[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 => intern
 +include => ansagen-demo
 +include => echotest
 +include => asterisk-demo</code>
 +Rufen wir nun von unserem Testteilnehmer **14** unser IAX2-Softphone mit der Nummer **33**, so wird uns dies auf dem Asterisk-CLI entsprechend angezeigt.
 +<code>asterisk*CLI> 
 +  == Using SIP RTP CoS mark 5
 +[Dec  2 16:56:02] ERROR[27402]: chan_sip.c:27876 setup_srtp: No SRTP module loaded, can't setup SRTP session.
 +    -- Executing [33@default:1] Dial("SIP/14-00000002", "IAX2/33,55,TtrWw") in new stack
 +    -- Called 33
 +    -- Call accepted by 192.168.10.40 (format gsm)
 +    -- Format for call is gsm
 +    -- IAX2/33-2972 is ringing
 +    -- IAX2/33-2972 answered SIP/14-00000002
 +    -- Hungup 'IAX2/33-2972'
 +  == Spawn extension (default, 33, 1) exited non-zero on 'SIP/14-00000002'
 +asterisk*CLI></code>
 +