Ansage des Anrufers mit Abweisemöglichkeit?

kaoz123

Neuer User
Mitglied seit
16 Jul 2005
Beiträge
178
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin da irgendwie nicht fündig geworden...

Ich suche eine Möglichkeit, folgendes Szenario zu realisieren:
Anrufer wird mit Asterisk verbunden, hört MOH während des Dial-Befehls. Soweit, so klar.
Der Angerufene soll jedoch eine Ansage bekommen (z.B. "Anruf von ${CALLERIDNUM}"), bei der er dann noch vor Übergabe des Gesprächs entscheiden kann, ob er den Anruf annimmt, ihn auf die Mailbox leitet oder ihn an die nächste Priorität im Dialplan weitergibt: "Wenn Sie das Gespräch annehmen möchten, dann drücken Sie 1, für die Mailbox 2 und für die Weiterleitung an die nächste Nummer die 3".
Das bleibt transparent für den Anrufer, da er nur schöne Musik hört.
 
extensions.conf
Code:
[mycontext]
exten => _X.,n,Dial(SIP/mysipcontext,20,rM(screen^${CALLERIDNUM}))   ;screen^ARG1

[macro-screen] ;das bekommt der Angerufene zu hoeren
exten => s,1,Wait(0.5)
exten => s,n,Playback(anrufvonnummer) ;anrufvonnumer.gsm "Sie haben einen Anruf von Nummer"
exten => s,n,SayDigits(${ARG1})
exten => s,n,Read(ACCEPT,auswahl,1) ;auswahl.gsm "Moechten Sie den Anruf annehmen, dann druecken Sie 1, fuer die Weiterleitung zum Handy die 2 und zur Weiterleitung an den Anrufbeantworter die 3" (eine einstellige Zahl wird akzeptiert)
exten => s,n,GotoIf($[${ACCEPT}=1]?Akzept:WeiterAbfrag) ;wenn Eingabe=1 dann zu Akzept springen sonst WeiterAbfrag
exten => s,n,Hangup ;hier wird hoffentlich nie reingesprungen
exten => s,n(WeiterAbfrag),GotoIf($[${ACCEPT}=2]?Festnetz:Anrufbeant) ;wenn Eingabe=2 dann zu Festnetz sonst AB
exten => s,n(WeiterAbfrag+1),NoOp("WeiterAbfrag+1") ;nur zum debuggen
exten => s,n,Hangup ;Trunk/Leg zum Angerufenen aufhaengen
exten => s,n(Anrufbeant),SetVar(MACRO_RESULT=GOTO:weiterleitung-anrufbeantworter^s^1) ;springe zum Context,Exten,Prio
exten => s,n(Anrufbeant+1),NoOp("Anrufbeant+1") ;nur zum debuggen
exten => s,n(Anrufbeant+2),Hangup ;Trunk/Leg zum Angerufenen aufhaengen
exten => s,n(Festnetz),SetVar(MACRO_RESULT=GOTO:weiterleitung^s^1) ;springe zum Context,Exten,Prio
exten => s,n(Festnetz+1),NoOp("Festnetz+1") ;nur zum debuggen
exten => s,n(Festnetz+2),Hangup ;Trunk/Leg zum Angerufenen aufhaengen
exten => s,n(Akzept),NoOp(${ACCEPT}) ;Anruf wird durchgestellt

[weiterleitung]
exten => s,1,Dial(IAX2/handycontext,25,r)
exten => s,3,VoiceMail(u1@default)
exten => s,4,Hangup

[weiterleitung-anrufbeantworter]
exten => s,1,VoiceMail(bu1@default) ; Busy-Nachricht
exten => s,2,Hangup

Funktioniert (erst) in Asterisk 1.2!
 
Hast du inzwischen eine funtkionierende Lösung gefunden ?

Ich habe das obige mal ausprobiert. Jedoch ergibt sich bei mir das Problem, daß nicht aufgelegt wird, wenn ich den Anruf nicht annehmen will.
* sagt zwar "Executing Hangup("SIP/qscpcn-8aa7", "") in new stack" aber danach werden die beiden Teilnehmer verbunden.

EDIT:

Leider funzt auch der "Read"-Befehl nicht.
Egal, was ich drücke, es steht immer da User entered ''.

Habe testweise mal "Authenticate" reingetan - da funzt die Erkennung. Leider verbindet mich * jedoch auch wenn ich dreimal das falsche PW eingebe.

EDIT:

Das mit dem Read habe ich hinbekommen. Waren 2 Probleme:
a) Über QSC haut´s mit dem DTMF wohl nicht so recht hin
b) Habe eine "noanswer"-Option reingetan

Das Problem, daß die beiden Channels verbunden werden, auch wenn man nicht "1" eingibt, bleibt jedoch bestehen.
Habe es auch mal mit "MACRO_RESULT =CONTINUE" versucht - jedoch auch ohne Erfolg. Wird wohl von meiner *-Version (1.0.10) noch nicht unterstützt.
Und bei "Hangup" werden die Chanels trotzdem verbunden. :-(
 
Ähm... Das war die funktionierende Lösung...

Wenn ich nichts eingebe, dann landet der Anrufer auf der Mailbox, da einfach der Dial-Befehl im Hauptkontext "ausläuft".

Dein Problem ist also nicht das Skript, sondern die Nichterkennung der Tonwahleingaben. Ich nutze alaw als Codec und einen Provider, der die MFV-Töne nicht filtert. :wink:
 
Die Töne und auch deren Erkennung funzen jetzt.
Dennoch werde ich (nach dem Hangup-Befehl, der auch laut Konsole ausgeführt wird - wie ich oben auch geschrieben habe) verbunden.
 
http://voip-info.org/wiki/view/Asterisk+cmd+Dial
Dial macros

Introduced in/for Asterisk 1.2, see bug/patch 2905

You can now add args to the macro by using a '^' char

Dial(Zap/1|60|M(mymacro^cat^dog^bark))

Also, the macro can set the MACRO_RESULT variable to do the following:

ABORT - Hangup both legs of the call
BUSY
CONTINUE - Hangup the called party and continue on in the dialplan from where you called Dial
GOTO:<context>^<exten>^<priority> - Transfer the call.

Note: If you want the call to be bridged upon completion of the macro, you should NOT set the MACRO_RESULT variable to anything. IF MACRO_RESULT is not defined, the thread of execution falls off the end of the macro and bridges the call. Setting it to CONTINUE causes the call NOT to be bridged, and execution to resume at n+1 priority in the calling context. Of course setting it to BUSY or GOTO has the implied results (and of course the call is not bridged).
(I found this a bit confusing because my mental model expected some kind of explicit case for "bridge the call", such as setting MACRO_RESULT to "BRIDGE" or "CONNECT" or something like that. It's the ABSENCE of any value that causes the call to be bridged.)
 
Ja, das habe ich auch gelesen.
Das hat mich ja auf die Idee mit dem "CONTINUE" gebracht - welches dann jedoch nicht funzte. Ebenso wenig wie "Hangup". Wat will man machen, geht wohl erst ab 1.2 richtig. Da ich aber nicht weiß, ob und wie gut 1.2 mit Bristuff läuft, muß ich noch warten...
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
244,695
Beiträge
2,216,696
Mitglieder
371,315
Neuestes Mitglied
jack-mack
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.