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 [02.12.2010 16:10. ]
django [4. Anwendung interne Erreichbarkeit um IAX erweitert]
voip:asterisk18:dialplan1 [20.04.2018 08:59. ] (aktuell)
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>​
 +
  
  • voip/asterisk18/dialplan1.txt
  • Zuletzt geändert: 20.04.2018 08:59.
  • (Externe Bearbeitung)