.titleBar { margin-bottom: 5px!important; }

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

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von WrMulf, 18 Jan. 2005.

  1. WrMulf

    WrMulf Mitglied

    Registriert seit:
    2 Okt. 2004
    Beiträge:
    553
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Stuttgart
    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
     
  2. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Eine gute Frage .... hab sie mir auch schon gestellt, aber noch nicht nach einer Antwort gesucht.
     
  3. WrMulf

    WrMulf Mitglied

    Registriert seit:
    2 Okt. 2004
    Beiträge:
    553
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Stuttgart
    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
     
  4. allesOK

    allesOK Mitglied

    Registriert seit:
    24 Mai 2004
    Beiträge:
    732
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Vllt mit DeadAgi
     
  5. thorsten.gehrig

    thorsten.gehrig Mitglied

    Registriert seit:
    14 Juni 2004
    Beiträge:
    490
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  6. WrMulf

    WrMulf Mitglied

    Registriert seit:
    2 Okt. 2004
    Beiträge:
    553
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Stuttgart
    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":

    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
     
  7. thorsten.gehrig

    thorsten.gehrig Mitglied

    Registriert seit:
    14 Juni 2004
    Beiträge:
    490
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  8. WrMulf

    WrMulf Mitglied

    Registriert seit:
    2 Okt. 2004
    Beiträge:
    553
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Stuttgart
    Kann ich bestätigen, funktioniert bei mir leider auch nicht. Also suche ich weiter nach einer Lösung....

    Gruß,
    Robert/WrMulf
     
  9. WrMulf

    WrMulf Mitglied

    Registriert seit:
    2 Okt. 2004
    Beiträge:
    553
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Stuttgart
    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