Wählen von SIP-URIs mit Asterisk

tomster

Mitglied
Mitglied seit
6 Dez 2004
Beiträge
238
Punkte für Reaktionen
0
Punkte
0
Auch wenn ich es bislang nicht gebraucht habe, war ich doch überrascht, dass Asterisk "standardmäßig" keine SIP-URIs wählen kann. Es wird alles ab dem @-Zeichen abgeschnitten und (in meinem Fall) an den mISDN-Channel übergeben. Logischerweise kann aber ISDN damit wenig anfangen.
Auf http://macnugget.org/projects/asterisk/page7 hab ich dann ein Beispiel gefunden, welches quasi einen URI-Check der gewählten Rufnummer durchführt.
Also hab ich den Code Mal testweise in meine extensions.conf eingebaut. Durch das Vorwählen des "*" sollen dabei Komplikationen während des "normalen" Betriebs ausgeschlossen werden.
Code:
[macro-uridial]

;Script-Konstanten
MYDOMAIN => 192.168.0.121
MYFQDN => 192.168.0.121

exten => s,1,NoOp(Outbound SIP URI call ${ARG1})
exten => s,2,SetCIDNum(089123456)
exten => s,3,Dial(SIP/${ARG1})
exten => s,4,Congestion()

[sip-uri-check]

exten => _*.,1,NoOp(Incoming Call from extension ${CALLERID} for ${EXTEN}@${SIPDOMAIN})
exten => _*.,2,GotoIf($[${LEN(${SIPDOMAIN})} = 0]?10)
exten => _*.,3,GotoIf($[${SIPDOMAIN} = ${MYDOMAIN}]?10)
exten => _*.,4,GotoIf($[${SIPDOMAIN} = ${MYFQDN}]?10)
exten => _*.,5,GotoIf($[${SIPDOMAIN} = ${MYFQDN}:5060]?10)
exten => _*.,6,NoOp(@${SIPDOMAIN} is remote, forwarding...)
exten => _*.,7,Macro(uridial,${EXTEN:1}@${SIPDOMAIN})
exten => _*.,8,HangUp()
exten => _*.,10,Goto(standard,${EXTEN},1)
exten => h,1,HangUp()
Leider haut es nicht hin, wie nachfolgende Ausgabe am CLI belegt.

Code:
    -- Executing NoOp("SIP/11-b5e11a60", "Incoming Call from extension "tomster" <11> for *[email protected];user=phone") in new stack
    -- Executing GotoIf("SIP/11-b5e11a60", "0?10") in new stack
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:183 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected $end, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
sip.goober.com;user=phone =
                            ^
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:187 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.
    -- Executing GotoIf("SIP/11-b5e11a60", "0?10") in new stack
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:183 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected $end, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
sip.goober.com;user=phone =
                            ^
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:187 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.
    -- Executing GotoIf("SIP/11-b5e11a60", "0?10") in new stack
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:183 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected TOK_COLON, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
sip.goober.com;user=phone = :5060
                            ^
Feb  7 11:08:21 WARNING[9959]: ast_expr2.fl:187 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.
    -- Executing GotoIf("SIP/11-b5e11a60", "0?10") in new stack
    -- Executing NoOp("SIP/11-b5e11a60", "@sip.goober.com;user=phone is remote| forwarding...") in new stack
    -- Executing Macro("SIP/11-b5e11a60", "uridial|[email protected];user=phone") in new stack
    -- Executing NoOp("SIP/11-b5e11a60", "Outbound SIP URI call [email protected];user=phone") in new stack
    -- Executing SetCIDNum("SIP/11-b5e11a60", "089123456") in new stack
    -- Executing Dial("SIP/11-b5e11a60", "SIP/[email protected];user=phone") in new stack
Feb  7 11:08:21 WARNING[9959]: chan_sip.c:1998 create_addr: No such host: sip.goober.com;user=phone
Feb  7 11:08:21 NOTICE[9959]: app_dial.c:1056 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
  == Everyone is busy/congested at this time (1:0/0/1)
    -- Executing Congestion("SIP/11-b5e11a60", "") in new stack
  == Spawn extension (macro-uridial, s, 4) exited non-zero on 'SIP/11-b5e11a60' in macro 'uridial'
  == Spawn extension (macro-uridial, s, 4) exited non-zero on 'SIP/11-b5e11a60'
Zunächst vermute ich, dass der übergebene $ mit dem Anhängsel ;user=phone zu Problemen führt. Jedoch konnte ich Asterisk weder mit usereqphone=no noch mit einer anderen Variable dazu überreden dieses Anhängsel wegzulassen. Schlussendlich findet er wohl deshalb auch noch den host sip.goober.com;user=phone nicht. Selbstredend, dass in der sip.conf unter [general] srvlookup=yes gesetzt ist.
Hat jemamd eine Idee wie man * dieses Anhängsel wegbekommt? Nur um zu schauen, ob das Makro dann durchläuft.


--edit--

OK, hab das mit user=phone gefunden. Ich hatte entsprechende Check-Box auf dem Snom-Telefon aktiviert. Schäm...
Und goober-Accounts scheinen nicht von ausserhalb zu erreichen zu sein...
 
Zuletzt bearbeitet:
Jetzt läuft es zwar, aber im CLI wird weiterhin gemosert:
Code:
Feb  9 16:08:05 WARNING[15291]: ast_expr2.fl:183 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected $end, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
sip.goober.com =
                 ^
Feb  9 16:08:05 WARNING[15291]: ast_expr2.fl:187 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.
Keine Ahnung wo das eigentlich herkommt.

Und goober-Kontakte sind DOCH über SIP zu erreichen...
 
Hallo rollo,

das hatte ich inzwischen auch gefunden, bringt mich aber bei der Lösung nicht viel weiter. Ich hab das Ausgangsbeispiel verwendet, da ich ja einen automatischen URI-Check erreichen will, und nicht nur die URI-Wahl bei entsprechender Vorwahl (in deinem Bsp. 333). Unterm Strich funktioniert es ja, nur die Warn-Meldungen stören mich.
Nun ja, wenn ich wieder etwas mehr Zeit habe, dann mach ich mich nochmal drüber.
 
Das Beispiel sollte auch ohne Vorwahl funktionieren, ich wollte seinerzeit nicht den ganzen Dialplan für den Test umbauen.

jo
 
Nun gut, zu guter Letzt habe ich das Macro doch noch so hinbekommen, dass es funktioniert.
Leider schaut es aber bei eingehenden Anrufen schlechter aus. Die werden zwar brav signalisiert, aber es wird wieder nur der Teil vor dem @-Zeichen übertragen. Damit steht dann auch in der Anrufliste nur die ID, nicht aber der Domain-Teil.
Hat da wer einen Ansatz?
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,864
Beiträge
2,303,155
Mitglieder
378,516
Neuestes Mitglied
jpttpee