Externe DW mit Pin und verschiedene Funktionen

Hallo Leute,

ich versuche ein Script zu erstellen, was durch eine Pin Authentifizierung mehrere Funktionen ausführt.
Soweit habe ich dies auch umgesetzt, jedoch brauche ich nun Eure Unterstützung

Die ersten beiden Funktionen sind Klar, jedoch beim DISA schaffe ich den Call nach draußen nicht,
es kommt die Fehlermeldung

[Feb 23 14:56:19] NOTICE[4293]: chan_sip.c:27724 handle_request_subscribe: Received SIP subscribe for peer without mailbox: YhU0FURVX260667
[Feb 23 14:56:21] NOTICE[2376]: chan_sip.c:27724 handle_request_subscribe: Received SIP subscribe for peer without mailbox: WRpHSpu3J347892
[Feb 23 14:56:26] WARNING[6125][C-00002fc0]: pbx.c:4759 pbx_substitute_variables_helper_full: Error in extension logic (missing ']')
[Feb 23 14:56:26] WARNING[6125][C-00002fc0]: ast_expr2.fl:470 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected ',', expecting $end; Input:
EXTEN},
      ^
[Feb 23 14:56:26] WARNING[6125][C-00002fc0]: ast_expr2.fl:474 ast_yyerror: If you have questions, please refer to https://wiki.asterisk.org/wiki/display/AST/Channel+Variables
    -- Executing [897@disa:1] Goto("SIP/L9DvWKhSYzlb3MS-00006f28", "main,EXTEN") in new stack
[Feb 23 14:56:26] NOTICE[6125][C-00002fc0]: pbx.c:4943 pbx_extension_helper: Cannot find extension 'main' in context 'disa'
[Feb 23 14:56:26] WARNING[6125][C-00002fc0]: pbx.c:12322 pbx_parseable_goto: Priority 'EXTEN' must be a number > 0, or valid label
  == Spawn extension (disa, 897, 1) exited non-zero on 'SIP/L9DvWKhSYzlb3MS-00006f28'

Was auch noch nicht geht, ich würde im DISA gerne eine andere CID haben, vielleicht könnt Ihr mir da auch gleich helfen.

Hier das Script:

exten => s,1,Answer ; Kanal beantworten
same => n,Playback(agent-pass) ; Ansage abspielen
same => n,Read(PIN,,4) ; Pin mit 4 Stellen Abfragen und in Variable PIN speichern
same => n,GotoIf($[ \${PIN}\ = \5555\ ]?Ansage,1) ; Wenn der PIN 1234 ist dann weiter auf das Ansagesystem
same => n,GotoIf($[ \${PIN}\ = \6666\ ]?Monkey,1) ; Wenn der PIN 1234 ist dann weiter auf das Ansagesystem
same => n,GotoIf($[ \${PIN}\ = \7777\ ]?DISA,1) ; Wenn der PIN 1234 ist dann weiter auf das Ansagesystem
same => n,Playback(vm-invalidpassword) ; Wenn Passwort falsch, Ansage "Passwort falsch"
same => n,Hangup ; ansonsten auflegen

exten => Ansage,1,NoOp(**** weiter ins Ansagesystem ***)
exten => Ansage,n,Goto(main,*50,1)

exten => Monkey,1,NoOp(**** Spiele Monkeys ***)
exten => Monkey,n,Playback(tt-monkeys)

exten => DISA,1,NoOp(HAHA)
exten => DISA,n,DISA(no-password,disa)
exten => DISA,n,Hangup(${HANGUPCAUSE})
exten => DISA,_XX.,1,Goto(main,$[EXTEN},1)

Merci für die Hilfe

@Linuxuser
Wenn ich auf Anhieb richtig sehe, müsste Deine Sprungmarke für DISA anders formululiert werden.

Müsste das nicht

same => n(DISA),1,NoOp(HAHA) usw. heißen anstelle von

exten => DISA,1,NoOp(HAHA)

Gruß
Michael

Hallo Michael,

hoffe, dass ich es richtig angepasst habe, geht leider aber nicht:

same => n(DISA),1,NoOp(HAHA)
exten => DISA,n,DISA(no-password,disa)
exten => DISA,n,Hangup(${HANGUPCAUSE})
exten => DISA,_XX.,1,Goto(main,$[EXTEN},1)

-- Executing [s@Umleitung:3] Read("SIP/L9DvWKhSYzlb3MS-0000701d", "PIN,,4") in new stack
-- Accepting a maximum of 4 digits.
-- User entered '7777'
-- Executing [s@Umleitung:4] GotoIf("SIP/L9DvWKhSYzlb3MS-0000701d", "0?Ansage,1") in new stack
-- Executing [s@Umleitung:5] GotoIf("SIP/L9DvWKhSYzlb3MS-0000701d", "0?Monkey,1") in new stack
-- Executing [s@Umleitung:6] GotoIf("SIP/L9DvWKhSYzlb3MS-0000701d", "1?DISA,1") in new stack
-- Goto (Umleitung,DISA,1)

[Feb 26 14:51:31] WARNING[23338][C-00003033]: pbx.c:6643 __ast_pbx_run: Channel ‘SIP/L9DvWKhSYzlb3MS-0000701d’ sent to invalid extension but no invalid handler: context,exten,priority=Umleitung,DISA,1
– Remote UNIX connection
– Remote UNIX connection disconnected

Da muss ich dann leider passen. Was ich noch festgestellt habe:
Wenn ich Dein Skript aus dem ersten Post so übernehme, komme ich bis zum DISA-Wählton. Allerdings bricht die Verbindung dann ab, sobald ich irgendeine weitere Ziffer wähle. (Das Hangup habe ich auskommentiert, weil sich für mich nicht erschließen will, wieso Du da auflegst).

Wenn ich exten => DISA,n(DISA(no-password,disa) ersetze durch exten => DISA,n(DISA(no-password,main), dann bekomme ich zumindest nach Wahl der ersten Ziffer eine Fehleransage, was mich darauf bringt, dass der Kontext disa falsch sein könnte. Mehr kann ich Dir dazu aber leider nicht sagen.