Goto(context,extension,priority) produziert Fehler bei Pattern-Exten im Ziel

Ruad

Mitglied
Mitglied seit
27 Jul 2005
Beiträge
295
Punkte für Reaktionen
0
Punkte
0
Ich habe in einem Makro (sipruf) effektiv bei einem Aufruf (laut cli von *) folgendes gotoif drin stehen
Code:
GotoIf(0?default,62,1:4)

Code:
[sipphones]
exten => _6[0-4], 1, macro(sipruf, ${EXTEN})

[default]
include=>sipphones

Also kurz, ich möchte über das Goto eine Umleitung machen. Er tut es aber mit der Fehlermeldung nicht:
== Channel 'SIP/60-081964b0' jumping out of macro 'sipruf'
' in context 'default', but no invalid handlert_pbx_run: Channel 'SIP/60-081964b0' sent into invalid extension '62

Steht im Kontext 'sipphones' hingegen wortwörtlich 62 (im gegensatz zu _6[0-4]), dann tut er es einfach.

Soll das so sein? Kann ich das irgendwie umgehen? Ich möchte in der AstDB lediglich die effektiven Nummern als Umleitung drin stehen haben(ISDN-Nummer, AB-Kurzwahl, SIP-Kurzwahl).

Bzw: Beginne ich ein Telefonat direkt mit einer Nebenstelle (wähle am Telefon also 62), dann springt er ja auch korrekt in die extension?!
 
Zuletzt bearbeitet:
Ich versuchs nochmal neu

Code:
#include lcr/extensions.tsblcr

[globals]
;Variablen start
EXT-2xxx0=60 ... EXT-2xxx4=64
EXT-9xxxx0=64 ... EXT-9xxxx1=62

EXT-60=CAPI/ISDN1/0: ... EXT-64=CAPI/ISDN2/9xxxx0:

NUM-60=0 ... NUM-64=9xxx0
;Variablen stop

[clipuml]
exten => 59, 1, GotoIf($[${DB(clip/teil-${CALLERIDNUM})}=aus]?istaus,1:istan,1)

exten => istaus, 1, Set(DB(clip/teil-${CALLERIDNUM})=an)
exten => istaus, 2, Goto(numuml,1)
exten => istan, 1, Set(DB(clip/teil-${CALLERIDNUM})=aus)
exten => istan, 2, Goto(numuml,1)

exten => 50, 1, DBput(umleitung/status-${CALLERIDNUM}=aus)
exten => 50, 2, Goto(numuml,1)
exten => _5[1-5], 1, DBput(umleitung/status-${CALLERIDNUM}=${EXTEN:-1})
exten => _5[1-5], 2, Goto(numuml,1)

exten => numuml, 1, answer
exten => numuml, 2, System(/usr/local/bin/sipsak -M -O desktop -B "Num:${DB(clip/teil-${CALLERIDNUM})} - Uml:${DB(umleitung/status-${CALLERIDNUM})}" -s sip:${CALLERIDNUM}@192.168.1.${CALLERIDNUM} -H 192.168.1.2)
exten => numuml, 3, wait, 1
exten => numuml, 4, hangup

[sipphones]

exten => _6X, 1, GotoIf($[${EXTEN}:foo${SCHLEIFE}=2]?10:2)
exten => _6X, 2, Set(SCHLEIFE=${SCHLEIFE}-${EXTEN})
exten => _6X, 3, GotoIf($[${DB(umleitung/status-${EXTEN})}=aus]?4:${DB(umleitung/teil-${EXTEN}-${DB(umleitung/status-${EXTEN})})},1)
exten => _6X, 4, Dial(SIP/${EXTEN},,oC)
exten => _6X, 5, GotoIf($[${DIALSTATUS}=BUSY]?${DB(umleitung/teil-${EXTEN}-busy)},1:6)
exten => _6X, 6, hangup

exten => _6X, 10, busy
exten => _6X, 11, hangup

[capi-in]
exten => _2xxx[02-4], 1, Goto(default,${EXT-${EXTEN}},1)
exten => _9xxxx[0-1], 1, Goto(default,${EXT-${EXTEN}},1)
exten => _2xxx[5-9],1,Hangup()
exten => _2xxx1.,1,Dial,SIP/${EXT-26661}
exten => 9xxxx2, 1,Dial,SIP/${EXT-${EXTEN}}

[capi-out]
exten => _XXX., 1, NoCDR()
exten => _XXX., 2, GotoIf($[0+${SCHLEIFE:1:2}>=60]?10:3)
exten => _XXX., 3, GotoIf($[${DB(clip/teil-${CALLERIDNUM})}=aus]?4:5)
exten => _XXX., 4, SetCallerPres(prohib_not_screened)
exten => _XXX., 5, Dial(${EXT-${CALLERIDNUM}}${EXTEN})
exten => _XXX., 10, Dial(${EXT${SCHLEIFE:0:3}}${EXTEN})

[mailbox_own]
exten => 88,1,answer
exten => 88,n,wait,1
exten => 88,n,voicemailmain,s${CALLERIDNUM}
exten => 88,n,hangup

[default]
include => "fast alle Kontexte"

In [clipuml] kann ich per kurzwahl einen umleitungsstatus setzen. die dazugehörige nummer steht in der astDB-Datenbank und wird für den Kontext [sipphones] benötigt.
Im Prinzip sollen alle Gespräche, die als Ziel ein SIP-Phone haben durch die Schleife durch und abfragen, ob eine Umleitung aktiv ist. Ist sie aktiv, soll aus der astDB die Nummer abgefragt werden und quasi mittels
Goto(default,"Nummer",1)
angewählt werden. (Eine Telefonnummer steht normal drin (0170xxx), ein SIP-Phone als Kurzwahl (60-64) und die Mailbox ebenso (88).

Was dieser Plan kann, ist:
Ich kann von einem SIP-Phone aus direkt nach ISDN raus wählen (mit/ohne CLIP, Auswahl der Absendernummer, Auswahl der ISDN-Karte)
Ich kann von einem SIP-Phone ein anderes SIP-Phone erreichen, wenn es keine Umleitung aktiv hat.

Problem!:
Wenn eine Umleitung aktiv ist, erkennt er das auch und geht im Falle von ISDN-Umleitungen bis zum Dial-Command, um mir dann mitzuteilen, dass der Befehl ungültig sei. (Wie gesagt, vorher, selbe syntax, ohne probleme rausgewählt)
Bei einer Umleitung auf ein anderes SIP-Phone (bsp: 62->60) fängt er bei
exten => 62,1, ...
an und durchläuft den Kontext und steigt am Ende mit dem Befehl
Goto(default,60,1)
aus. Auf der Cli sagt er mir dann aber, dass extension 60 ungültig sei.

Kann mir nicht irgendjemand helfen, wie ich möglichst unkompliziert mehrere Umleitungen einbauen kann und/oder was ich hier falsch mache?
Ich benutze Asterisk 1.2.11 auf Suse 10.0
 
Dort wo Du bei GotoIFs mit alphanumerischen ("an" und "aus") Werten arbeitest ändere mal die Zeilen analog dieser und arbeite mit Anführungszeichen:


exten => 59, 1, GotoIf($["${DB(clip/teil-${CALLERIDNUM})}"="aus"]?istaus,1:istan,1)


Gruß,
Tin
 
Danke für deine Antwort. Aber das Problem bei mir ist nicht eine falsch aufgelöste Expression. Die sind immer genau so, wie ich sie mir wünsche. Ja es werden ja sogar die Ziele fürs Goto richtig aus der AstDB ausgelesen.
Im Falle von Goto (default,6X,1) meckert er, dass es doch invalid sei und bei bei Goto(default,06221xxxx,1) macht er was er soll und geht in den neuen Kontext. Nur um mir dann aber mitzuteilen, dass der Dial-Befehl Fehler aufweisen würde. Was er nicht tut. Auf der CLI sieht er exakt identisch aus, wenn ich direkt von dem Telefon aus die Nummer wähle.

verzweifelt

Ruad
 
Also ich kapier den logischen Ablauf noch nicht ganz, das Problem taucht in [capi-out] auf ? Dort sehen die Dials ein wenig komisch aus, z.B. einmal mit EXT- und einmal EXT ohne Bindestrich

exten => _XXX., 5, Dial(${EXT-${CALLERIDNUM}}${EXTEN})
exten => _XXX., 10, Dial(${EXT${SCHLEIFE:0:3}}${EXTEN})

ist das so gewollt? Wo laufen die hin ?
 
Das dringendere Problem taucht in [sipphones] auf. Ich denke, dass dort der Hund begraben ist, aber um deine Frage zu beantworten:
${Calleridnum} gibt ja den Account des SIP-Phones preis (60 -64)
${EXT-(60-64)} enthält als globale Variable CAPI/ISDN*/'nummer':
${Schleife} hingegen sieht immer nach dem Schema aus
'-6*-6*-....'
OB ich nun ${EXT-${SCHLEIFE:1:2}} mache oder ${EXT${SCHLEIFE:0:3}} sollte doch egal sein. Der Übersichthalber hätte ich es natürlich wie im ersteren Fall machen können. Das Ergebnis ist aber schlicht das gleiche.
 
Zuletzt bearbeitet:
Ich schaffe es einfach nicht mich in Deinen Dialplan einzulesen, sorry...
Ist es richtig, dass Du 2 verschiedene Probleme hast? Eins davon das Dial in [sipphones] oder von welchem redest Du, wo die Fehlermeldung kommt?

[Edit] verstehe das nun zumindest, die globalen Variablen heißen EXT-60 etc.
Wenn EXT eine globale Variable ist, müßte sie m.W.n. auch mit ${EXT} referenziert werden, also eine geschweifte Klammer direkt nach dem T von EXT.
 
Nene, das ist schon richtig.
Es gibt keine globale Variable ${EXT}. Es gibt ${EXT-'ISDN-nummer'} und ${EXT-'SIP-Account'}.
Ich habe nunmer festgestellt, dass eigentlich alles funktioniert an meinem Wählplan.
Alle SIP-Accounts können sich untereinander anrufen (60,62,63,64)
Alle SIP-Accounts können über ISDN heraustelefonieren.
Wenn ich eine Umleitung bei einem der SIP-Accounts aktiv habe, steht in einem Datenbankeintrag eine Nummer,(Telefonnummer, SIP-Kurzwahl oder Mobilbox-kurzwahl). Diese Nummer wird bei aktiver Rufumleitung abgefragt und in einen "Goto-Kontext" gepackt ( Goto (default,'Nummer',1))
Das funktioniert bei allen Geräten, wenn nicht die Accounts 60 und 62 betroffen sind. (sprich sie sind der Apparat mit aktiver Umleitung oder Ziel einer Umleitung).
Bei den Apparaten 63 und 64 klappt das alles eigentlich wunderbar. Das ist ja das mysteriöse. Es scheint, als seien die Nummern 60 und 62 böse für Asterisk.

Beispiel gefällig?
Code:
-- Executing GotoIf("SIP/63-081c3dc8", "0?10:2") in new stack
   -- Goto (default,62,2)
   -- Executing Set("SIP/63-081c3dc8", "SCHLEIFE=-62") in new stack
|1") in new stackGotoIf("SIP/63-081c3dc8", "0?4:60
,1) -- Goto (default,60
' in context 'default', but no invalid handlerst_pbx_run: Channel 'SIP/63-081c3dc8' sent into invalid extension '60
Hier ist beim Account 62 eine Umleitung auf 60 gesetzt. Ergebnis ist die letzte Zeile.
Durch den selben Code geht aber nun folgender Ruf:
Code:
Extension Changed 62 new state InUse for Notify User 64
   -- Executing GotoIf("SIP/62-081e4f48", "0?10:2") in new stack
   -- Goto (default,63,2)
   -- Executing Set("SIP/62-081e4f48", "SCHLEIFE=-63") in new stack
   -- Executing GotoIf("SIP/62-081e4f48", "0?4:64|1") in new stack
   -- Goto (default,64,1)
   -- Executing GotoIf("SIP/62-081e4f48", "0?10:2") in new stack
Extension Changed 62 new state InUse for Notify User 60
Extension Changed 62 new state InUse for Notify User 63
   -- Goto (default,64,2)
   -- Executing Set("SIP/62-081e4f48", "SCHLEIFE=-63-64") in new stack
   -- Executing GotoIf("SIP/62-081e4f48", "1?4:|1") in new stack
   -- Goto (default,64,4)
   -- Executing Dial("SIP/62-081e4f48", "SIP/64||oC") in new stack
   -- Called 64
   -- SIP/64-081bf2f8 is ringing
Beim Gerät 63 ist eine Umleitung auf 64 aktiv und 60 ruft 63 an. Das Ergebnis: Das Telefon klingelt.
Ähnlich analog verhält es sich, wenn bei den beteiligten (60,62) eine Umleitung auf ISDN kommt. Dann kommt auch ein invalid Code. 63 und 64 hingegen leiten auch auf ISDN um. Wohlgemerkt der selbe Code.

Vielleicht probier ich einfach mal alle Accounts auf 70er umzustellen. Dann muss ich aber ganz laut lachen, wenn das tut. :(
 
ist das jetzt ein copy&paste error, weil da fehlt ja das ,1)

-- Goto (default,60
 
Schau mal links in der Zeile. Dort ist das fehlende ',1)'
Ich denke, dass das ein Darstellungsproblem von meinem Windows SSH-Client ist.
Schau mal eine Zeile drüber, dort ist das ja auch so.
Aber mal anders.. bei dem korrekten Durchlauf wird das auch korrekt angezeigt.
Was soll das denn nun wieder??
 
Bekommst Du diese Zeile:
Extension Changed 62 new state InUse for Notify User 64

bei den abbrechenden calls nicht? oder hast Du sie nur nicht mit reinkopiert hier? Sehen die Client-Einträge alle gleich aus in der sip.conf? (type= , subscribe= usw.)

Ich stochere auch nur rum, aber vielleicht hängt es ja damit irgendwie zusammen, irgendeinen Unterschied muß es ja geben...
 
Sag mal, wie erkenne ich, ob eins von den Snoms vielleicht kaputt ist?
Weil ich hab jetzt alle Nummern von 60er auf 30er umgesponnen. Jeweils 30 und 32 haben wieder verrückt gespielt. Dann habe ich die 30 und 32 auf 35 und 36 umgestellt. In der Hoffnung, dass die Zahlen irgendwie kaputt sind. Aber es ist immer noch der selbe Fluch. Dabei kommt ja eigentlich das Gerät noch gar nicht zum Zuge, aber dennoch spielen die Accounts auf den Telefonen verrückt.

Ich versuch jetzt mal die zwei Telefone gegen die andren beiden umzutauschen und die Accounts zu wechseln (ich hoffe ihr wisst, was ich meine)

zu deinen Angaben TinTin:
ich hab sie nur nicht reinkopiert, sie kommen nach dem Abbruch, um dann kurz darauf wieder in Idle zu wechseln.
Die SIP-Accounts sehen komplett identisch aus. Natürlich bis auf Benutzernamen und Nummer.
 
Ich würde versuchen mit 3stelligen extensions zu arbeiten.
 

Zurzeit aktive Besucher

Neueste Beiträge

Statistik des Forums

Themen
244,858
Beiträge
2,219,651
Mitglieder
371,572
Neuestes Mitglied
#Kuddel#
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.