Asterisk/DISA: wie kann ich ein Gespräch abbrechen?

WrMulf

Mitglied
Mitglied seit
2 Okt 2004
Beiträge
553
Punkte für Reaktionen
0
Punkte
16
Der Titel sagt es bereits: ich möchte ohne Auflegen (und neu Wählen oder neuen Callback anzufordern) zurück in den DISA-Context, um ein weiteres Gespräch zu führen. Läßt sich sowas überhaupt realisieren und wenn ja, wie müsste die Extension aussehen, um z.B. auf "##" zu reagieren und ein Gespräch abzubrechen und einen neuen Wählton zu liefern? Bisher hab ich den Eindruck, dass Asterisk gar nichts (mehr)mitkriegt, wenn ich weitere Zeichen per DTMF sende, wenn erstmal eine Verbindung steht.

Ich freue mich auf viele hilfreiche Tipps.

Gruß,
Robert/WrMulf
 
Eine gute Frage .... hab sie mir auch schon gestellt, aber noch nicht nach einer Antwort gesucht.
 
allesOK schrieb:
Eine gute Frage .... hab sie mir auch schon gestellt, aber noch nicht nach einer Antwort gesucht.

ich werde bei nächster Gelegenheit mal im ersten Schritt testen, ob ich es schaffe zurück in den DISA-Context zu springen, wenn der Angerufene auflegt. Das sollte noch am ehesten möglich sein, wenn auch nicht trivial, da nach Hangup keine weiteren Kommandos greifen (wenn ich mich recht erinnere).

Gruß,
Robert/WrMulf
 
Vllt mit DeadAgi
 
Hi
das geht auf jedenfall wenn der gesprächspartner das gespräch beendet hat (oder die verbindung andereitig nicht zustandegekommen ist).

ein kurzes beispiel von mir - ist aber noch nicht perfekt!!

Erklärung: mit dem goto,hangup|${hangupcause}|1
kommt man in den hangup-context - der einem sagt warum die verbindung weg ist (z.b. Besetzt). von dort aus springe ich wieder in meinen DISA-context.

Sicherlich kann man die hangupcause-behandlung auch weglassen...

unter dem link [http]http://networking.ringofsaturn.com/RemoteAccess/isdncausecodes.php
[/http] kann man die causecodes nachlesen.
ich erlaube nur unter bestimmten fällen (normales beenden = code 0, nummer nicht vergeben = 1 , besetzt = code 17) das neuwählen.

sofern ich "playback(0)" verwende ist eine datei 0.wav vorhanden. Der inhalt ist in etwa so:
0.wav = Die Verbindung wurde beedet
1.wav = Nummer nicht vergeben.
17.wav = Der Teilnehmer ist besetzt.
neuwaehlen.wav = Sie können jetzt neu wählen oder Auflegen.

Bei den anderen Hangup-causes hab ich das noch nicht vervollständigt - aber das kommt ja auch nicht so oft vor. Auf jedenfall bekomme ich mit SayDigits die Fehlernummer angesagt (und weiss damit dass ich doch mal dafür den fehlertext als wav erzeugen sollte).


Code:
[line out]
;timeout nach 60 sekunden - damit mann auch weiterkommt wenn keiner rangeht!
exten = 0,1,Dial(SIP${EXTEN:1},60,tT)
exten = 0,2,goto,hangup|${hangupcause}|1

[hangup]
;http://networking.ringofsaturn.com/RemoteAccess/isdncausecodes.php
;Normal beendet!?
exten => 0,1,Playback(0)
exten => 0,2,Wait(0.5)
exten => 0,3,Playback(neuwaehlen)
exten => 0,4,goto(hfc-dialtone,s,1)

;define AST_CAUSE_UNALLOCATED 1
exten => 1,1,Playback(1)
exten => 1,2,Wait(0.5)
exten => 1,3,Playback(1)
exten => 1,4,Wait(0.5)
exten => 1,5,Playback(neuwaehlen)
exten => 1,6,goto(hfc-dialtone,s,1)
;define AST_CAUSE_NO_ROUTE_TRANSIT_NET 2
exten => 2,1,SayDigits(2)
exten => 2,2,congestion()
;define AST_CAUSE_NO_ROUTE_DESTINATION 3
exten => 3,1,SayDigits(3)
exten => 3,2,congestion()
;define AST_CAUSE_CHANNEL_UNACCEPTABLE 6
exten => 6,1,SayDigits(6)
exten => 6,2,congestion()
;define AST_CAUSE_CALL_AWARDED_DELIVERED 7
exten => 7,1,SayDigits(7)
exten => 7,2,congestion()
;define AST_CAUSE_NORMAL_CLEARING 16
exten => 16,1,SayDigits(16)
exten => 16,2,congestion()
;AST_CAUSE_USER_BUSY 17 BESETZT
;exten => 17,1,Playback(busy-hangovers)
exten => 17,1,Playback(17)
exten => 17,2,Playback(neuwaehlen)
exten => 17,3,goto(hfc-dialtone,s,1)
;define AST_CAUSE_NO_USER_RESPONSE 18
exten => 18,1,SayDigits(18)
exten => 18,2,congestion()
;define AST_CAUSE_NO_ANSWER 19
exten => 19,1,SayDigits(19)
exten => 19,2,congestion()
;define AST_CAUSE_CALL_REJECTED 21
exten => 21,1,SayDigits(21)
exten => 21,2,congestion()
;define AST_CAUSE_NUMBER_CHANGED 22
exten => 22,1,SayDigits(22)
exten => 22,2,congestion()
;define AST_CAUSE_DESTINATION_OUT_OF_ORDER 27
exten => 27,1,SayDigits(27)
exten => 27,2,congestion()
;define AST_CAUSE_INVALID_NUMBER_FORMAT 28
exten => 28,1,SayDigits(28)
exten => 28,2,congestion()
;define AST_CAUSE_FACILITY_REJECTED 29
exten => 29,1,SayDigits(29)
exten => 29,2,congestion()
;define AST_CAUSE_RESPONSE_TO_STATUS_ENQUIRY 30
exten => 30,1,SayDigits(30)
exten => 30,2,congestion()
;define AST_CAUSE_NORMAL_UNSPECIFIED 31
exten => 31,1,SayDigits(31)
exten => 31,2,congestion()
;define AST_CAUSE_NORMAL_CIRCUIT_CONGESTION 34
exten => 34,1,SayDigits(34)
exten => 34,2,congestion()
;define AST_CAUSE_NETWORK_OUT_OF_ORDER 38
exten => 38,1,SayDigits(38)
exten => 38,2,congestion()
;define AST_CAUSE_NORMAL_TEMPORARY_FAILURE 41
exten => 41,1,SayDigits(41)
exten => 41,2,congestion()
;define AST_CAUSE_SWITCH_CONGESTION 42
exten => 42,1,SayDigits(42)
exten => 42,2,congestion()
;define AST_CAUSE_ACCESS_INFO_DISCARDED 43
exten => 43,1,SayDigits(43)
exten => 43,2,congestion()
;define AST_CAUSE_REQUESTED_CHAN_UNAVAIL 44
exten => 44,1,SayDigits(44)
exten => 44,2,congestion()
;define AST_CAUSE_PRE_EMPTED 45
exten => 45,1,SayDigits(45)
exten => 45,2,congestion()
;define AST_CAUSE_FACILITY_NOT_SUBSCRIBED   50
exten => 50,1,SayDigits(50)
exten => 50,2,congestion()
;define AST_CAUSE_OUTGOING_CALL_BARRED      52
exten => 52,1,SayDigits(51)
exten => 52,2,congestion()
;define AST_CAUSE_INCOMING_CALL_BARRED      54
exten => 54,1,SayDigits(54)
exten => 54,2,congestion()
;define AST_CAUSE_BEARERCAPABILITY_NOTAUTH 57
exten => 57,1,SayDigits(57)
exten => 57,2,congestion()
;define AST_CAUSE_BEARERCAPABILITY_NOTAVAIL     58
exten => 58,1,SayDigits(58)
exten => 58,2,congestion()
;define AST_CAUSE_BEARERCAPABILITY_NOTIMPL 65
exten => 65,1,SayDigits(65)
exten => 65,2,congestion()
;define AST_CAUSE_CHAN_NOT_IMPLEMENTED      66
exten => 66,1,SayDigits(66)
exten => 66,2,congestion()
;define AST_CAUSE_FACILITY_NOT_IMPLEMENTED      69
exten => 69,1,SayDigits(69)
exten => 69,2,congestion()
;define AST_CAUSE_INVALID_CALL_REFERENCE 81
exten => 81,1,SayDigits(81)
exten => 81,2,congestion()
;define AST_CAUSE_INCOMPATIBLE_DESTINATION 88
exten => 88,1,SayDigits(88)
exten => 88,2,congestion()
;define AST_CAUSE_INVALID_MSG_UNSPECIFIED   95
exten => 95,1,SayDigits(95)
exten => 95,2,congestion()
;define AST_CAUSE_MANDATORY_IE_MISSING 96
exten => 96,1,SayDigits(96)
exten => 96,2,congestion()
;define AST_CAUSE_MESSAGE_TYPE_NONEXIST 97
exten => 97,1,SayDigits(97)
exten => 97,2,congestion()
;define AST_CAUSE_WRONG_MESSAGE 98
exten => 98,1,SayDigits(98)
exten => 98,2,congestion()
;define AST_CAUSE_IE_NONEXIST 99
exten => 99,1,SayDigits(99)
exten => 99,2,congestion()
;define AST_CAUSE_INVALID_IE_CONTENTS 100
exten => 100,1,SayDigits(100)
exten => 100,2,congestion()
;define AST_CAUSE_WRONG_CALL_STATE 101
exten => 101,1,SayDigits(101)
exten => 101,2,congestion()
;define AST_CAUSE_RECOVERY_ON_TIMER_EXPIRE 102
exten => 102,1,SayDigits(102)
exten => 102,2,congestion()
;define AST_CAUSE_MANDATORY_IE_LENGTH_ERROR 103
exten => 103,1,SayDigits(103)
exten => 103,2,congestion()
;define AST_CAUSE_PROTOCOL_ERROR 111
exten => 111,1,SayDigits(111)
exten => 111,2,congestion()
;define AST_CAUSE_INTERWORKING 127
exten => 127,1,SayDigits(127)
exten => 127,2,congestion()

Gruß
Thorsten
 
thorsten.gehrig schrieb:
das geht auf jedenfall wenn der gesprächspartner das gespräch beendet hat (oder die verbindung andereitig nicht zustandegekommen ist).

...

[sehr stark gekürzt]

Das war eine gute Idee, funktioniert einwandfrei. Ich bin nochmal fündig geworden, habe es aber noch nicht ausprobiert. Es gibt eine Option zu DIAL, die es erlaubt per "*" aufzulegen. (Gekürzter) Auszug aus "http://www.voip-info.org/tiki-index.php?page=Asterisk+cmd+Dial":

o t: Allow the called user to transfer the call
o T: Allow the calling user to transfer the call
o r: Generate a ringing tone for the calling party, passing no audio from the called channel(s) until one answers. Use with care and don't insert this by default into all your dial statements as you are killing call progress information for the user.
o m: Provide Music on Hold to the calling party until the called channel answers. This is mutually exclusive with option 'r', obviously.
o M(x): Executes the macro (x) upon connect of the call
o h: Allow the callee to hang up by dialing *
o H: Allow the caller to hang up by dialing *
o C: Reset the CDR (Call Detail Record) for this call. This is like using the NoCDR command
o P(x): Use the PrivacyManager, using x as the database (x is optional)
o g: When the called party hangs up, exit to execute more commands in the current context.
o A(x): Play an announcement (x.gsm) to the called party.
o S(n): Hangup the call n seconds AFTER called party picks up.
o D(digits): After the called party answers, send digits as a DTMF stream, then connect the call to the originating channel.
o L(x[:y][:z]): Limit the call to 'x' ms, warning when 'y' ms are left, repeated every 'z' ms) Only 'x' is required, 'y' and 'z' are optional. The following special variables are optional for limit calls: (pasted from app_dial.c)
o f: forces callerid to be set as the extension of the line making/redirecting the outgoing call. For example, some PSTNs don't allow callerids from other extensions than the ones that are assigned to you.

mit der Option "H" kann der Anrufer ein Gespräch mit * beenden, mit "h" der Angerufene. Kombiniert mit deinem Tipp kann man sich endlos in einem DISA (oder anderem) Context bewegen.

Gruß,
Robert/WrMulf
 
Hi
das mit dem "hH" hat bei mir leider nicht funktioniert - zumindest in einem schnellen Test. Wenn du damit erfolg hast dann schreibe mir das nochmal...

Gruß
Thorsten
 
thorsten.gehrig schrieb:
das mit dem "hH" hat bei mir leider nicht funktioniert - zumindest in einem schnellen Test. Wenn du damit erfolg hast dann schreibe mir das nochmal...

Kann ich bestätigen, funktioniert bei mir leider auch nicht. Also suche ich weiter nach einer Lösung....

Gruß,
Robert/WrMulf
 
WrMulf schrieb:
Kann ich bestätigen, funktioniert bei mir leider auch nicht. Also suche ich weiter nach einer Lösung....

Ich habs! Ich hab den SIP-Provider mit "canreinvite=yes" konfiguriert und im Dial-Kommando zusätzlich zu "H" auch "tT" aufgenommen, damit Asterisk weiter im "media stream" auf Kommandos lauscht. Damit klappts!

Gruß,
Robert/WrMulf
 
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.