Inhaltsverzeichnis

Asterisk erster Wählplan

Asterisk Logo

Über den Asterisk-Rufnummernplan kann definiert werden, wie:

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