[Problem] Ansage bei falsch gewählter Funktion

Traceman

Neuer User
Mitglied seit
20 Jan 2009
Beiträge
23
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich habe einige Ziffernfolgen mit *xxx im Dialplan definiert. Es sind einige nur mit 2 Zeichen ander sind länger erlaubt. Ich möchte für die nicht definierten eine Ansage senden. Bisher zeigt das Telefon einfach "404 - not found" an.

Dazu habe ich mit "exten => e,1,Answer ..." eigentlich eine entsprechende Eintragung im Dialplan, jedoch funktioniert diese nicht.

Kann es am "*" am Anfang der Nummer liegen?

Hardy
 
Moins

Wieso "e" :?:
Invalide Extensions (ungültige Nummern) fange ich hier so ab...
Code:
exten => i,1(start),Verbose(${INVALID_EXTEN})
same  => n,BackGround(invalid,m)
 
Zuletzt bearbeitet:
Hallo koyaanisqatsi,

in der Dokumentation steht zu "e": This extension will substitute as a catchall for any of the 'i', 't', or 'T' extensions, ...

es geht aber leider auch nicht mit "i".

meine extensions.conf aufs nötigste gekürzt:
Code:
[general]
static=yes
writeprotect=no

[standort]
exten => _+ZXX.,1,Macro(dialext,${EXTEN})
exten => _00ZXX.,1,Macro(dialext,+${EXTEN:2})
exten => _0ZXX.,1,Macro(dialext,+49${EXTEN:1})
exten => _ZXX.,1,Macro(dialext,+49341${EXTEN})
exten => _XX,1,Macro(dialint,${EXTEN})

exten => i,1,Answer
 same => n,Playback(invalid)
 same => n,Hangup

[macro-dialext]
exten => s,1,NoOp(ext: ${ARG1})

[macro-dialint]
exten => s,1,NoOp(int: ${ARG1})

[default]


Hardy
 
OK, die "i" Extension wird bei/nach WaitExten() und Background() getriggert.
(Das ist bei mir der Fall)

Bei normalen "Verwählen" triggert also eher...
Code:
exten => _.,1,Verbose(Invalid: ${EXTEN})
Um sie auf den ersten Blick als "special" zu erkennen...
Code:
exten => _.,1(invalide),Verbose(Invalid: ${EXTEN})
Teste sie in der Asteriskkonsole mit...
Code:
dialplan show fantasienummer@standort

Beispiele: (Asteriskkonsole)
Code:
 osmc*CLI> dialplan show [color="red"]irgendwas[/color]@osmc
[ Context 'osmc' created by 'pbx_config' ]
  '_.' =>           1. Verbose(Invalid: ${EXTEN})                 [pbx_config]
 
-= 1 extension (1 priority) in 1 context. =-
osmc*CLI> dialplan show [color="red"]*12[/color]@osmc
[ Context 'osmc' created by 'pbx_config' ]
  '_.' =>           1. Verbose(Invalid: ${EXTEN})                 [pbx_config]
 
-= 1 extension (1 priority) in 1 context. =-
 
Zuletzt bearbeitet:
exten => _. sollte man nicht verwenden.

Um alles ungültige zu erwischen reicht eine exten => _*. in dem Context, in dem auch die anderen Funktionen definiert sind. Dank longest match wird die nur angesprungen, wenn sonst nichts passt.
 
Hallo rentier-s,

danke für den Hinweis. Bei der Einarbeitung in das Thema hatte ich dies schonmal gelesen. Ab ausprobiert hatte ich des trotzdem, und auch festgestellt, daß "_." nicht so günstig ist. Die Suche nach der längsten Übereinstimmung findet aber immer nur in einem Context statt?
Ich hatte die ganzen Sonderfunktionen mit "*" in einer include-Funktion eingebunden. Dabei wurden die Sonderfunktionen nicht mehr gefunden.

Hardy
 
Moin

Um alles ungültige zu erwischen reicht eine exten => _*.
Nöh, nur Integerzahlen, Buchstaben triggert die nicht.
Darum gab ich im Beispiel auch etwas mit Buchstaben an.
Meiner Meinung nach eignet sich _. gerade deswegen sehr wohl als Extension für Invalide.

EDIT:
Diese "Invalide" triggert keine Specials, wie die "h" Extension...
Code:
exten => _[*#a-zA-Z0-9].,1(invalide),Verbose(Invalid: ${EXTEN})
 
Zuletzt bearbeitet:
Nöh, nur Integerzahlen, Buchstaben triggert die nicht.

Laut Doku ". matches one or more characters", also auch Buchstaben.


Wir bräuchten hier aber wenn dann _*[#a-zA-Z0-9]. um alles ungültige mit * am Anfang zu erwischen.
_*.. wäre gleichbedeutend.

Die Suche nach der längsten Übereinstimmung findet aber immer nur in einem Context statt?
Ich hatte die ganzen Sonderfunktionen mit "*" in einer include-Funktion eingebunden.

Richtig. Asterisk sucht immer erst im Original-Context, ob irgendeine exten passt. Wenn nicht wird das erste include durchsucht, falls es dort auch nichts passendes gibt das zwei include und so weiter. Deswegen hatte ich geschrieben, die exten=>_*. muss sich im gleichen Context befinden wie die anderen *XXX
 
@rentier-s: Stimmt, hab ich nicht richtig getestet, statt "dialplan show *ungueltig@kontext" nur "dialplan show ungueltig@kontext"


Zu: _[*#a-zA-Z0-9].
Triggert natürlich auch unbekannte Nummern mit einem * am Anfang.
Darüberhinaus triggert diese Extension auch unbekannte Konstrukte wie....
*1
**1
*1#
*12*34#5
u.s.w.
(Ja, sogar das: u.s.w. :D)

Apropos _.
Wenn z.B. eine h Extension mit nur einer (1) Priorität existiert, dann wird die Zweite Prio in _. gesucht.
Damit kann auch gearbeitet werden, indem in _.,2
die Prüfungen (Conditions) mit GotoIf() loslegen.
Beispiel: Eine in _. abgefangene "${EXTEN}"=="h"
Code:
exten => _.,1(invalide),Verbose(Invalid: ${EXTEN})
same => n,GotoIf($["${EXTEN}"=="h"]?exit_h)
same => n,Set(INVALID_EXTEN=${EXTEN})
same => n,Goto(i,start)
same => n(exit_h),Verbose(exit_h: ${HANGUPCAUSE} ${DIALSTATUS})
exten => t,1(start),Goto(s,restart)
exten => i,1(start),Verbose(Invalid: ${INVALID_EXTEN})
same  => n,BackGround(invalid,m)
same  => n,Goto(s,restart)
exten => h,1,Verbose(Hangup: ${HANGUPCAUSE} ${DIALSTATUS})
Arbeitsweise:
1. Wenn aufgelegt wurde wird h,1 ausgeführt und springt dann automatisch in _.,2
2. _.,2 prüft auf "${EXTEN}"=="h" und wenn wahr...
3. ...geht es mit n(exit_h) weiter

Beachte: h darf dann wirklich nur Priorität 1 und nicht Mehrere haben.

PS: Ohne angelegte h, aber mit _. Extension hab ich erst mitbekommen, dass eine h Extension ausgeführt werden sollte.
 
Zuletzt bearbeitet:
Zu: _[*#a-zA-Z0-9].
Triggert natürlich auch unbekannte Nummern mit einem * am Anfang.

Tut es, aber es würde auch auf 0800330 passen. Hier geht es ja darum *ungültig abzufangen und nicht auch alles ungültige. Also muss der * vorne hin. Wenn zB. mit modularen Contexten gearbeitet wird und das erste include zu den *Funktionen führt, im zweiten include interne und in einem dritten include abgehende Gespräche definiert wären, würde Dein Muster sämtliche Anrufe abfangen.

Wenn z.B. eine h Extension mit nur einer (1) Priorität existiert, dann wird die Zweite Prio in _. gesucht.

Das ist genau der Grund, warum man _. nicht verwendet. Weil es eben für alles passt und so unerwartete Effekte zur Folge haben kann.

Eine _. als fallthrough zu verwenden ist schon ziemlich schräg, meinst Du nicht auch?! Unübersichtlicher geht es kaum, Du weißt nie an welcher Prio Du genau rein fällst, das betrifft ja auch alle anderen extens. Special extension werden genau wie jede andere exten auch sauber von vorne bis hinten definiert und fertig.

h wird übrigens immer am Ende ausgeführt, siehe Doku.
 
Moins

Eine _. als fallthrough zu verwenden ist schon ziemlich schräg, meinst Du nicht auch?!
Ja, finde ich mittlerweile auch.
Schräg find ich vor Allem, dass die h-Extension "ungefragt" in der "_." fortgesetzt wird, wenn sie "zu kurz"* ist. :D
...das wollte ich eigentlich nur verdeutlichen.
Mich hat halt das "sollte nicht verwendet werden" ohne ausreichende Begründung gestört, deswegen hab ich mir das genauer angeschaut, warum das so ist.
Also "_." nicht verwenden und immer schön mit "dialplan show" die Abläufe checken.


* Beziehungsweise: Wenn "_." mehr Prioritäten hat als "h"
 
Zuletzt bearbeitet:
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.