Wieso geht das nicht? (CLIR on demand)

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
0
Hi!

Ich find einfach den Fehler nicht! Und kann keinen erkennen! Ich will CLIR-on-demand machen, und zwar, wenn man intern eine Nummer ruft, soll CLIR nur für den nächsten Anruf aktiviert werden. Dazu wird ein Flag per AstDB gespeichert.

Die Nummer 102 soll CLIR (nur für diesen Apparat) für den nächsten Anruf aktivieren:

Code:
exten => 102,1,Set(DB(internal_clir/${CALLERID})=1)
exten => 102,2,Playback(own/clir_next)
exten => 102,3,Hangup()

Diese extension gilt bei der Auswahl:
Code:
[...]
exten => _X.,1,Macro(check-clir)
exten => _X.,2,Dial(${TRUNK}/${EXTEN}/bo)
[...]

[macro-check-clir]
exten => s,1,Set(FLAG=${DB(internal_clir/${CALLERID})})
exten => s,2,GotoIf($[${FLAG} = 1] ? 3 : 5)
exten => s,3,SetCallerPres(prohib_not_screened)
exten => s,4,Set(DB(interal_clir/${CALLERID})=0)
exten => s,5,NoOP()

Ich bekomme aber immer diese argh-Meldung:

Code:
Aug 17 22:51:57 WARNING[11358]: ast_expr2.fl:183 ast_yyerror: ast_yyerror(): syntax error: syntax error, unexpected TOK_EQ, expecting TOK_MINUS or TOK_COMPL or TOK_LP or TOKEN; Input:
 = 1
 ^
Aug 17 22:51:57 WARNING[11358]: ast_expr2.fl:187 ast_yyerror: If you have questions, please refer to doc/README.variables in the asterisk source.

Aber ich kann wirklich keinen Fehler finden! Ich hab auch schon x-Mal alles nachkontrolliert.
Die Expression ergibt auf alle Fälle (durch die ominöse Meldung) immer "0" weshalb CLIR nie aktiviert wird.

mfg,
divB
 
Probier doch bitte mal dies hier:
Code:
exten => s,2,GotoIf($["${FLAG}" = "1"] ? 3 : 5)
 
Ich habe in einem anderen Thread gelesen, dass mit den neueren Asterisk der Vergleichsoperator (hier =) nicht mehr von Leerzeichen umgeben sein darf. Bei mir hat es dann funktioniert. Ich hatte die gleiche Fehlermeldung. Die Hochzeichen um die beiden Vergleichenden sind nur dann notwendig, wenn es sein kann, dass Leerzeichen in den Strings stehen. Dann würde das nicht funktionieren, da aber eh nur eins oder vielleicht noch 0 drin steht, kann das zumindest nicht Fehlerquelle sein.
 
Es funktioniert nicht wenn ${FLAG} EMPTY ist.

deswegen immer so prüfen

[${FLAG}huhu=1huhu]
 
Zumindest mit AstDB-Einträgen funktioniert es. Da EMPTY!=xy ist, wird er halt zum label2 gehen. Ist ja auch logisch. Du prüfst, ob es xy ist, das ist es nicht, also kommt als Result-Code 0 raus.

Edit: mit Asterisk 1.2.10
 
Zuletzt bearbeitet:
Auch bei 1.2.10 geht es nicht ohne warning

exten => 854,n,SET(test=)
exten => 854,n,GoToIf($[${test}=1]?e_true:e_false)

So gibt es Warning weil [=1] geprüft wird und das ist syntaktisch falsch.
 
Argh, es geht noch immer nicht!
Mit keinem der beiden Vorschläge, trotzdem danke!

Wenn ich mit CLIR setze, erhalte ich in der Datenbank:

Code:
database show
[...]
/internal_clir/"Zimmer 3" <300>
[...]

Liegt es vielleicht an den Anführungszeichen?
Wenn ja, wie kann ich dem Herr werden?

Und das mit den EMPTY-Werten?
Das kann doch bei so einer "hohen" Sprache doch nicht sein oder?
Gibt es dann wenigstens eine Funktion, die eine Variable immer 0 oder "" setzt, wenn ein Wert in der AstDB nicht vorhanden ist?
Sowas kommt ja schließlich oft vor...
 
"Zimmer 3" <300>
Das ist natürlich als Inhalt einer Variable nervig und ich kann Dir nicht sagen was Asterisk mit den Anführungszeichen bei einem Vergleich macht.

Nimm deswegen CALLERID(number), also nur die Nummer. Das sollte dann funktionieren.

Wie man auf evtl. leere oder nicht definierte Variablen Abfragen macht hatte ich doch bereits geschrieben.
Ein GoToIf auf [=1] ist einfach falsch, deswegen Warning.


CALLERID(number) ist Asterisk 1.2.X, in Deiner uralt Version heißt das anders.
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,866
Beiträge
2,303,227
Mitglieder
378,522
Neuestes Mitglied
Christian_B70