HowTo: In Priorität zurückspringen (war: Prioritäten 1,2,3 und n mischen?)

udosw

Aktives Mitglied
Mitglied seit
20 Mrz 2004
Beiträge
1,114
Punkte für Reaktionen
0
Punkte
36
Seit * 1.2 ist es ja möglich, die Priorität 'n' (next) zu verwenden, man muss nicht jeden Schritt im Dialplan durchnummerieren.

Dabei bin ich auf folgendes Problem gestoßen: Ich habe einen Context, wo ich mit Dial/local/... meine (einstelligen) internen Extensions anwähle. Die Ext. 6 ist virtuell und soll eine Nebenstelle in einem anderen * wählen.

Ich hätte erwartet, dass folgendes funktioniert:
Code:
[default]
exten => _X,1,Set(Language=de)
exten => _X,n,Set(TRANSFER_CONTEXT=transfer)

exten =>      6,n,Dial(IAX2/anderer_server/68,,TtHh)
exten => _[1-5],n,Dial(SIP/${EXTEN},,TtHh)

exten => _X,n,Hangup
Das klappt aber nicht. Stattdessen musste ich folgenden Workaround bauen:
Code:
[default]
exten => _X,1,Set(Language=de)
exten => _X,n,Set(TRANSFER_CONTEXT=transfer)
exten => _X,n,Goto(default2,${EXTEN},1)

[default2]
exten =>      6,1,Dial(IAX2/anderer_server/68,,TtHh)
exten => _[1-5],1,Dial(SIP/${EXTEN},,TtHh)
exten => _X,n,Hangup
Es scheint also so, als ob bei einer Verzweigung (Ext. 1-5 oder 6) die Prio nicht n sein kann, sondern eine bestimmte Zahl sein muss. Leider kann man nach einem n auch nicht wieder numerisch weitermachen, also
Code:
exten => _X,1,Set(Language=de)
exten => _X,n,Set(TRANSFER_CONTEXT=transfer)

exten =>      6,2,Dial(IAX2/anderer_server/68,,TtHh)
exten => _[1-5],2,Dial(SIP/${EXTEN},,TtHh)
geht auch nicht.

Kann das jemand bestätigen oder mache ich einen Denkfehler?

Udo
 
Ja - Denkfehler drückt es schon ganz gut aus.

Grundsätzlich gilt: Jede extension bekommt ihre eigene Nummerierung, die mit 1 beginnen muß.

Code:
exten => _X,1,tue,irgendwas
exten => _X,n,mach,wasanderes

exten => 6,1,tue,irgendwas
exten => 6,n,mach,wasanderes

exten => _[1-5],1,tue,irgendwas
exten => _[1-5],n,mach, wasanderes

Aus diesem Grund kannst Du nicht folgendes machen:

Code:
exten => _X,1,tue,irgendwas
exten => 6,n,mach,wasanderes

denn das sind für Asterisk einfach 2 völlig unterschiedliche extensions. Und bei 6 fehlt eben die Priority 1 - deshalb wird er das nie abarbeiten. Du bekommst da übrigens auch schon beim "extensions reload" eine entsprechende Fehlermeldung, daß Du eine ungültige priority "n" verwendest. Achte mal drauf :wink:

Was aber sehr wohl gehen würde, ist folgendes (um auch diese Frage des Mischens noch zu beantworten):

Code:
exten => _X,1,tue,irgendwas
exten => _X,n,mach,wasanderes
exten => _X,3,tue,irgendwas
exten => _X,n,mach,wasanderes
exten => _X,5,tue,irgendwas
exten => _X,n,mach,wasanderes

Das wird dann beim Laden der extensions.conf korrekt in die priorities 1-6 aufgelöst. Man kann also sehr wohl die Angabe von absoluten und relativen priorities mischen - allerdings nur innerhalb der gleichen extension.
 
Gelöst!

naja .. es muss doch nicht unbedingt die Prio 1 sein:
Code:
exten => _X,1,tu-was-für-alle
exten => _X,2,tu-noch-was-für alle 

exten => 6,3,tu-was-für-Ext-6
exten => 6,4,tu-noch-was-für-Ext-6 

exten => _[1-5],3,tu-was-für-Ext-1-5
exten => _[1-5],4,tu-noch-was-für-Ext-1-5

exten => _X,5,tu-wieder-was-für-alle
würde doch gehen.
Wenn man beim Mischen praktisch doch in der Nummerierung mitzählen muss, ist der Vorteil von 'n' ja irgendwie auch dahin.:(

(Etwas später ...)
:)
Es geht! Man kann in der Priorität zurückspringen! Folgendes klappt:
Code:
exten => _X,n,Set(Language=de)
exten => _X,n,Set(TRANSFER_CONTEXT=transfer)         

exten => _[1-5],n,Dial(SIP/${EXTEN},,TtHh)      

exten =>  6,[B]n+-1[/B],Dial(IAX2/anderer_server/68,,TtHh)

exten => _X,n,Hangup
mit n-1 geht es nicht, mit n+-1 ist es OK, nehme an es wird nach '+' geparsed.

In dem n um einen Schritt zurückgesetzt wird, liegen die beiden extensions an derselben Priorität, die Verzweigung klappt und der Vorteil von 'n' bleibt erhalten.

Udo
 
Es kann schon sein, daß das (derzeiti) funktioniert - aber ich würde mich nicht darauf verlassen, daß dieses Konstrukt auch in zukünftigen Asterisk-Versionen auch noch funktioniert. Denn so ist das ganze entwicklungsseitig überhaupt nicht angedacht - und probiere sowas mal, in eine Realtime Konfiguration einzubauen.

Der "saubere" Weg ist die eindeutige bei 1 beginnende Nummerierung pro Extension - auch da kann man so eine Verzweigung realisieren.

Übrigens gibt es nicht nur "n" für next sondern auch noch "s" für same :wink:
 
Hi,

eigentlich gibt es doch Labels.
Diese Durchnummerierung erinnern mich an ganz übles BASIC.

Du kannst doch problemlos mit GoToIf zu Labels (auch in einem anderen Context) springen, Schleifen erzeugen und auch mittels Macros einen einigermaßen übersichtlichen Dialplan gestalten.
 
Das versuche ich ja auch schon, die ganze Zeit zum, Ausdruck zu bringen. Man sollte so nicht arbeiten - auch wenn es "irgendwie" funktioniert.
 
Das mit der Priorität 's' (same) hatte ich vorher nicht gewusst, das erscheint mir hier doch 'ne saubere Lösung zu sein. Es funktioniert, und die beiden 'Verzweigungen' (abhängig von der Extension) stehen zuverlässig an derselben Prio.

Ich sehe nicht ganz ein, warum das unbedingt in Prio 1 stehen soll. Das würde dazu führen, dass der Dialplan an so einer Stelle immer wieder einen neuen Context bekommen muss. Ich finde das unübersichtlich(er). Hauptsache es ist dieselbe Prio.

Mit Labeln hatte ich es übrigens versucht, das klappte auch nicht.

Udo
 
udosw schrieb:
Mit Labeln hatte ich es übrigens versucht, das klappte auch nicht.

Udo

Hi,
Mein Vorschlag war auch das Du eine GoToIf Abfrage über die EXTEN machst und dann zu einem Label springst oder eine Macro aufrufst.
So kannst Du für eine Untermenge der EXTEN in einem Channel Aktionen ausführen.
Das wird mit Sicherheit auch in Zukunft funktionieren.
 
Wenn man komplizierte Verzweigungen mit IF und CASE und LOOP Konstrukten machen möchte, dann sollte man den Dialplan einfach in AEL machen. Das wurde exakt für solche Sachen entwickelt - dort gibt es dann überhaupt keine Nummerierung mehr.
 
betateilchen schrieb:
Wenn man komplizierte Verzweigungen mit IF und CASE und LOOP Konstrukten machen möchte, dann sollte man den Dialplan einfach in AEL machen. Das wurde exakt für solche Sachen entwickelt - dort gibt es dann überhaupt keine Nummerierung mehr.



Mit dem n ist die Nummerierung praktisch nicht mehr vohanden. Labels sind ein guter Ersatz. Es kommt zwar immer noch Wurstcode raus, aber es ist akzeptabel.

AEL und AEL2 habe ich einige üble Kritiken zu gelesen.

Benutzt Du AEL?

Gruß

Thomas
 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,906
Beiträge
2,304,659
Mitglieder
378,612
Neuestes Mitglied
calahan77