Statt Besetztzeichen Fehlermeldung

VOIPdani

Mitglied
Mitglied seit
8 Aug 2005
Beiträge
432
Punkte für Reaktionen
0
Punkte
0
Hallo!

Ich benutze das SJphone-289a und wenn ich mit dem an meinem * angemeldeten SJPhone jemanden anrufe, der gerade telefoniert, höre ich kein Besetztzeichen sondern das SJPhone spuckt eine Fehlermeldung ("Busy Call rejected: 486 Busy") aus. Ich versorge bereits 25 Teilnehmer mit Softphones und ich bin es leid immer und immer wieder erklären zu müssen, dass diese Fehlermeldung für ein Besetzt steht.

Besteht die Möglichkeit mittels Asterisk einen Besetztton zu simulieren und somit diese Fehlermeldung zu unterdrücken?

lg Dani
 
Probier es mal mit dem Befehl Busy ;)

exten => _X.,1,Busy
 
chaos2000 schrieb:
exten => _X.,1,Busy

Ist dann nicht jede Extension die in das Pattern _X. fällt gerade Busy??

Mein Ziel ist es ja bereits während des Gesprächs abzufragen ob eine Nummer besetzt ist oder nicht. Drum hilft mir auch die Variable DIALSTATUS da nicht wirklich weiter. Eigentlich möchte ich es so haben wie man es vom Handy bzw. Festnetz gewohnt ist. Ist der gewünschte Teilnehmer besetzt, will ich ein Besetztzeichen hören und keine Fehlermeldung sehen.

lg Dani
 
warum hilft dir dann aber die variable DIALSTATUS nicht?
Das wäre mir neu. Ich habe nach dem Dial-befehl ein macro das mir den dialstatus auswertet - wie z.B. busy

... und der obige Post war ein Bsp ...
 
Weil ich DIALSTATUS erst nach einem Call abfragen kann. Ich will aber die Infos bereits während des Telefonats!
 
Das die auswertung erst nach dem dial erfolgt ist ja auch vollkommen richtig. Wie soll sonst * ermitteln ob besetzt ist oder nicht, ohne zuvor zu wählen?
Sobald der channel vom dialbefehl besetzt ist springt asterisk in die n+1 Prio, wo dann auch die variable DIALSTATUS gesetzt ist.

Bsp:

exten => _X.,1,Dial(SIP/0815)
exten => _X.,2,GotoIf($["${DIALSTATUS}" = "BUSY"]?103)
exten => _X.,3,Hangup

exten => _X.,103,Busy
 
Danke für dein Beispiel, das erfüllt so halbwegs meine Anforderungen.

Das einzige Problem, dass ich noch habe, ist dass das SJPhone 3 (oder mehr?) eigehende Anrufe zulässt, dh. ich muss den Anrufer wegklicken damit ich zu 103 komme. Ist das mit X-Lite bzw. anderen Endgeräten auch so?
 
chaos2000 schrieb:
exten => _X.,1,Dial(SIP/0815)
exten => _X.,2,GotoIf($["${DIALSTATUS}" = "BUSY"]?103)
exten => _X.,3,Hangup

exten => _X.,103,Busy

Warum müßt Ihr das alles so kompliziert machen :?:

exten => _X.,1,Dial,SIP/0815
exten => _X.,2,Goto,r-${DIALSTATUS}|1

exten => _X.,r-BUSY,1,Busy
exten => _X.,r-BUSY,2,Congestion

; Du kannst auch nach ANSWER, CHANUNAVAIL, NOANSWER, ANSWER
; nach dem gleichen Schema auswerten
 
VOIPdani schrieb:
Das einzige Problem, dass ich noch habe, ist dass das SJPhone 3 (oder mehr?) eigehende Anrufe zulässt, dh. ich muss den Anrufer wegklicken damit ich zu 103 komme. Ist das mit X-Lite bzw. anderen Endgeräten auch so?

dann versuch doch mal in der sip.conf:

incominglimit=1

http://www.voip-info.org/wiki-Asterisk+config+sip.conf


@betateilchen

ja, so geht es natürlich auch. ;)
 
ok, dann hätte ich mal alles durchlesen sollen *ascheaufmeinhaupt*

@VOIPdani

dann vesuche es mal mit
CheckGroup(1)
 
Versteh ich das richtig dass mir CheckGroup(1) überprüft ob der Zähler für eine Gruppe mehr als 1 ist?

Wie muss dann mein SetGroup(??) bzw. Set(GROUP()=??) aussehen. Muss ich statt ?? die Variable EXTEN eintragen??
 
Nachdem ich das mit dem SetGroup und CheckGroup nicht wirklich sinnvoll zum Einsatz bringen konnte, hab ich mir folgendes überlegt:

Code:
exten => 8888,1,SetGlobalVar(${CALLS}=${CALLS}+1)
exten => 8888,2,NoOp(${CALLS})
exten => 8888,3,GotoIf($[${CALLS}>=1]?104)  
exten => 8888,4,Dial(SIP/ZelC)
exten => 8888,5,SetGlobalVar(${CALLS}=0)
exten => 8888,6,GotoIf($["${DIALSTATUS}" = "BUSY"]?104)
exten => 8888,7,Hangup
exten => 8888,104,Playtones(busy)

In der globalen Variable CALLS speichere ich ab wieviele Anrufe eingehen. Von der Logik her müsste es passen, aber an der Umsetzung haperts:

Code:
    -- Executing SetGlobalVar("SIP/LetD-0b06", "0=0+1") in new stack
  == Setting global variable '0' to '0+1'
    -- Executing NoOp("SIP/LetD-0b06", "0") in new stack

Wie kann ich die Variable CALLS bei jedem eingehenden Anruf um 1 erhöhen??
 
...das ist nichts anderes als mit SetGroup
addition wird http://www.voip-info.org/wiki-Asterisk+variables (ganz unten) erklärt.

was hindert dich aber an:
Code:
exten => 8888,1,SetGroup(8888) 
exten => 8888,2,CheckGroup(1)
exten => 8888,3,Dial(SIP/ZelC)
exten => 8888,4,Goto,r-${DIALSTATUS}|103

exten => 8888,r-BUSY,103,Busy
exten => 8888,r-BUSY,104,Congestion
 
So, hab mein Problem jetzt wie folgt gelöst:
Code:
;Test: Besetztzeichen simulieren
exten => 8888,1,SetGlobalVar(CALLS=$[${CALLS}+1])
exten => 8888,2,NoOp(${CALLS})
exten => 8888,3,GotoIf($[${CALLS}=1]?104)  
exten => 8888,4,Dial(SIP/ZelC)
exten => 8888,5,SetGlobalVar(CALLS=$[${CALLS}-1])
exten => 8888,6,GotoIf($["${DIALSTATUS}" = "BUSY"]?104)
exten => 8888,7,Hangup
exten => 8888,104,Playtones(busy)

Das mit dem SetGroup() und CheckGroup() funkt bei mir irgendwie nicht so ganz.

lg Dani
 
Das mit dem SetGroup() und CheckGroup() funkt bei mir irgendwie nicht so ganz.

Falls Du das auf deinem Testsystem mit dem 1.0.9 Asterisk (lt. Deiner Signatur) getestet hast, ist das nicht weiter verwunderlich.
 
Hi
die lösung mit playtones busy ist natürlich "nur" die nachbildung des normalen telefons.
ich habe bei mir nach dem dial
exten => xx,9,goto,hangup|${HANGUPCAUSE}|1

und dann
Code:
[hangup]
;http://networking.ringofsaturn.com/RemoteAccess/isdncausecodes.php
;Normal beendet!?
exten => 0,1,congestion()

exten => 17,1,Playback(Teilnehmer_besetzt)
exten => 17,2,congestion()

exten => 19,1,Playback(Teilnehmer_antwortet_nicht)
exten => 19,1,congestion()

Dabei sind (besetzt) und 19 (Keine Antwort) nur ein paar beispiele. So bekommt man auch ein Gassenbesetzt anders mit als ein Besetzt.
Unter dem Link ;http://networking.ringofsaturn.com/RemoteAccess/isdncausecodes.php gibt es eine Aufstellung der ISDN-Fehlercodes. Allerdings muss man bei SIP-Anbietern schauen ob die die selben Codes verwenden...

Ich habe einfach alle Codes von 1 bis 99 mit "Ansage der Fehlernummer" quittiert und kann bei "neuen Fehlernummern" im Log nachschauen und die entsprechende Ansage (für den nächsten identischen Fehlerfall) Aufschalten...

0 = Normal beendet
1 = Nummer nicht vergeben
16 = Normal beendet
17 = Besetzt

Gruß
Thorsten Gehrig
 
Damit wird aber auch ein erfolgloser Anruf für den Anrufer kostenpflichtig :!: Denn das PlayBack (und auch das PlayTones) beinhaltet per default ein Answer, durch das Gebühren entstehen.
 
Ähm - ging es hier um Signalisierungen bei abgehenden Gesprächen - oder von ankommenden? (hab den thread nicht so genau gelesen...).

Aber: wenn der Anschluss ein SIP-Anschluss ist gibt es ja auch Playback(blabla,noanswer) - damit gehen KOSTENLOSE ansagen!
(Nachweisslich per Prepaid-Telefon getestet!)

Gruß
Thorsten
 
Kostenlos!

Zurzeit aktive Besucher

Statistik des Forums

Themen
248,546
Beiträge
2,293,903
Mitglieder
378,051
Neuestes Mitglied
Martpacktron