[Gelöst] while Schleife

caipiranha

Neuer User
Mitglied seit
6 Nov 2005
Beiträge
12
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich nutzte momentan noch Asterisk 1.4.23.2. In der Asterisk Datenbank habe ich mittels database put 0301234567890 "Firma xy - Vorname Nachname" einen Eintrag angelegt. Das sind also in diesem Fall 13 Ziffern.

Damit ich prüfen kann, ob es im Telefonbuch die Nummer gibt, verwende ich folgendes:
Code:
Set(Num=${CALLERID(num):0:14})
Verbose(Es wird geprüft ob die Nr 14 stellig ist und im Telefonbuch vorkommt. Wenn ja dann zu wählen springen)
GotoIf(${DB_EXISTS(Telefonbuch/${Num})}?dial1)

Set(Num=${CALLERID(num):0:13})
Verbose(Es wird geprüft ob die Nr -${Num}-13 stellig ist und im Telefonbuch vorkommt. Wenn ja dann zu wählen springen)
GotoIf(${DB_EXISTS(Telefonbuch/${Num})}?dial1)

es geht dann immer mit einer Ziffer weniger weiter

Es wird geprüft, ob die Nummer n-stellig ist und im Telefonbuch vorkommt. Das funktioniert auch perfekt. Allerdings ist das eben recht viel Code.

Ich habe dann z. B. noch database put 030123456 "Firma xy" eingetragen.
Wenn ich nun einen Anruf von jemanden aus der Firma erhalte, z. B. 030123456-1234, also mit der Nebenstelle 1234, dann merkt das Skript, dass im Telefonbuch 030123456 vorkommt und gibt den Anrufername "Firma xy" aus.

Nun zur eigentlichen Frage. Gibt es eine Möglichkeit, die ${CALLERID(num) immer um eine Stelle abzuschneiden (mit einer Schleife) und in eine Variable zu speichern?
Es gibt unter http://www.voip-info.org/wiki/view/Asterisk+cmd+While ein Beispiel, wie mittels while ein Wert heruntergezählt wird.

Aber ist auch möglich:
while
Variable1 = ${CALLERID(num)
Befehl um von Variable1 die letzte Zahl abzuschneiden
Dan prüfen mittels GotoIf(${DB_EXISTS(Telefonbuch/${Variable1})}?dial1), ob die Variable1 in der AstDB vorkommt
wenn ja, dann EndIf -- ansonsten die Schleife von vorne und von der Variable1 wieder eine Ziffer abschneiden.

Viele Grüße,
Caipi
 
Zuletzt bearbeitet:
Hallo,

ich würde jetzt aus dem Bauch heraus so etwas versuchen:

Code:
Set(i=${LEN(${Num})})
While($[${i} > 0])
Set(i=$[${i} - 1])
Set(Num=${Num:0:${i}}
GotoIf(${DB_EXISTS(Telefonbuch/${Num})}?dial1)
EndWhile()

Allerdings hab ich noch nie ausprobiert, so wie in Zeile 4 eine Variable als Länge für Substring zu verwenden. :noidea:

In anderen Sprachen wäre so etwas wie Set(Num=${Num:0:-1}) möglich, im Zusammenhang mit Asterisk habe ich das noch nirgends gesehen, aber vielleicht funktionierts trotzdem.
 
Hallo rentier-s,

vielen Dank für das Skript!
So wie du es geschrieben hast, funktioniert es gleich. Leider konnte ich erst jetzt testen... Werde das Thema auf gelöst setzen.

Viele Grüße,
Caipi
 
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.