Rufnummer im Diplay anzeigen bei besetzt

dasgute

Neuer User
Mitglied seit
20 Jan 2007
Beiträge
82
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,

ich habe hier Grandstream GXP 2020 und eine Asterisk Anlage im Einsatz.

Damit im Betrieb bei Besetzt auch für den Anrufer ein Besetztzeichen kommt habe ich

"Disable Call-Waiting" auf "Yes" gesetzt.

Somit meldet das Gerät auch sofort ein Busy und es klingelt keine zweite Leitung (Das Gerät unterstütz ja 6). Nur leider wird keine Rufnummer desjenigen im Display angezeigt der versuchte mich zu erreichen. Asterisk meldet dem Anrufer auch korrekt ein besetzt. Muß ich dann die Nummer irgendwie über z.B. invite zum Telefon schicken? Ist das so komplitziert?

Wie erreiche ich das Verhalten das wenn mich jemand anruft und es ist besetzt ich die Anrufernummer dann als "Missed Call" sehen kann?

Vielen Dank für Eure Hilfe.
 
Hallo,

ne direkte Loesung habe ich fuer Dein Problem auch nicht, da ich noch Call-Waiting noch nie ausgeschaltet habe.

Evtl. kannst Du aber mit ein bisschen Asterisk-Magie soetwas zumindest ansatzweise selber zusammenstricken.

Die einfachste Loesung waere es wahrscheinlich einfach Call-Waiting auszustellen und in Asterisk mit ChanIsAvail zu ueberpruefen, ob das Telefon belegt ist. Falls ja, nur ganz kurz waehlen (Dial mit sehr kurzem Timeout) und dann ein Besetzt-Zeichen abspielen.

Dies kann evtl. aber zu einem kurzen Freizeichen fuer den Anrufer fuehren. Musst Du evtl. ausprobieren, ob das ertraeglich ist und ob man das ueberhaupt merkt.

Ansonsten koenntest Du ebenfalls ueberpruefen, ob das Telefon besetzt ist und die Nummer evtl. irgendwo abspeichern. Dann erstellst Du noch eine Hangup-Extension und versuchst dann die gespeicherten Nummern ans Telefon zu schicken. Das geht meines Wissens nach nur per DIAL. Da der Channel nach dem ersten Dial direkt zerstoert wird, da kein Audio vorhanden ist, kannst Du mit folgendem Trick mehrere CallerIDs mehr oder weniger gleichzeitig uebertragen.

Code:
context fillmissedcalls {
        _missedX. => {
                CALLERID(num)=${EXTEN:6};
                Dial(SIP/phone,1);
        }
};

context in_dem_dein_dial_befehl_steht {
        h => Dial(LOCAL/missed123456@fillmissedcalls&LOCAL/missed123457@fillmissedcalls);
}

Damit schickt er 123456 und 123457 direkt nach dem Ende eines Telefongespraechs an Dein Telefon.

Das Beispiel kannst Du natuerlich nach Belieben noch an weitere Telefone anpassen. Du musst nur irgendwo die eingehenden Nummern zwischenspeichern.

Das Call-Limit fuer das Telefon darf natuerlich in diesem Fall nicht zu niedrig sein, weil dort ja alle "Gespraeche" fast gleichzeitig eintreffen.

Viel Erfolg,
Lars
 
Hallo,
das sind ja super Ideen. Könnte man das auch mittels CDR auswertung machen? Da müsste doch auch der busy call geloggt sein? Gibt es da evtl ne Möglichkeit via Exten auf CDR zuzugreifen?
Eine anndere Möglichkeit wäre evtl. eine Nutzung der Asdb und dort missed calls zwischen zu speichern.

Wäre sowas machbar/sinnvoll?
 
Zuletzt bearbeitet:
Also CDR-Auswertung hoert sich fuer mich nicht so prickelnd an. Ich wuesste jetzt spontan keine Moeglichkeit, wie man da einfach an die Datensaetze rankommen koennte.

Ich wuerde erstmal einfach, in der Extension, in der die Telefone angewaehlt werden, eine Abfrage mit ChanIsAvail mit Option s machen und dann bei frei normal waehlen und ansonsten ein Dial mit Timeout 1 machen. Das sollte mit Abstand die leichteste Loesung sein und ausserdem stimmen dann die Zeiten im Telefon Missed Calls Log.

Erst wenn das kein zufriedenstellendes Ergebnis bringen sollte, kannst Du ja rumprobieren, ob Du die Nummern irgendwo zwischenspeichern kannst. Ob das jetzt ne globale Variable, die Asterisk DB oder eine externe DB ist, ist relativ unerheblich, denke ich.

Wenn das Missed Call Log auch garnicht zwangslaeufig im Telefon erscheinen soll, sondern es im Computer auch reichen soll, koenntest Du Dir auch das von mir programmierte Telefonbuch anschauen, wenn Dir der Rest oben zu kompliziert erscheint: http://www.almosthappy.de/gsphonebook/

Wenn Du noch irgendwelche konkreten Fragen bei der Umsetzung haben solltest, kannst Du ja gerne nochmal nachfragen,
Lars
 
Hallo,

ich habe das ganze jetzt versucht mit Chanavail zu realisieren.

Zum testen habe ich das ganze im Dialplan so eingestellt das eingehende Anrufe einfach aufgelegt werden wenn der Channel benutzt (Option s) wird.

Das scheint aber so nicht zu funktionieren denn es klingelt munter auf Leitung 2 meines GXP 2020.

Code:
exten=>_89,1,ChanIsAvail(SIP/${EXTEN}|js)
exten=>_89,2,Dial(SIP/${EXTEN},30,t)
exten=>_89,101,Hangup()

Könnte es eventuell sein das für den Asterisk wegen der mehreren Leitungen des GXP 2020 einfach der Channel als verfügbar erscheint und einfach ne 2. Leitung klingelt?
Die Option "js" sollte doch wenn der Channel in Benutzung ist einfach zur 101 "jumpen".

Weiß jemand Rat? Vielen Dank schon mal.
 
ich habe das ganze jetzt versucht mit Chanavail zu realisieren.

Zum testen habe ich das ganze im Dialplan so eingestellt das eingehende Anrufe einfach aufgelegt werden wenn der Channel benutzt (Option s) wird.

Das scheint aber so nicht zu funktionieren denn es klingelt munter auf Leitung 2 meines GXP 2020.

Mmmh. Mal eben getestet und ich habe keine Probleme mit der Funktion. Ich habe folgenden Code benutzt:
Code:
        780 => {
                ChanIsAvail(SIP/phone|s);
                NoOp(${AVAILCHAN});
                NoOp(${AVAILORIGCHAN});
                NoOp(${AVAILSTATUS});
        }

Wenn noch kein Gespraech auf SIP/phone ist, dann sind die ersten beiden Variablen mit sinnvollen Werten gefuellt und AVAILSTATUS steht auf 0. Wenn ein Gespraech laeuft, dann sind die ersten beiden Variablen leer und AVAILSTATUS steht auf 2.

Code:
exten=>_89,1,ChanIsAvail(SIP/${EXTEN}|js)
exten=>_89,2,Dial(SIP/${EXTEN},30,t)
exten=>_89,101,Hangup()

Ich war ja noch nie ein Freund dieser komischen Jump-Konstrukte :) Kannst ja vielleicht mal ohne 'j' probieren und schauen, ob die Variablen korrekt gesetzt werden oder nicht.

Könnte es eventuell sein das für den Asterisk wegen der mehreren Leitungen des GXP 2020 einfach der Channel als verfügbar erscheint und einfach ne 2. Leitung klingelt?

Ne. Das sollte keinen Unterschied machen.

Die Option "js" sollte doch wenn der Channel in Benutzung ist einfach zur 101 "jumpen".

j - Support jumping to priority n+101 if no channel is available

Evtl. ist auch einfach Deine 101 falsch und der springt zu 102. Aber so ein If-Konstrukt ohne Jump ist auch nett :)

Tschuess,
Lars
 
Hallo,

also nach längerem Rumprobieren hab ich es hinbekommen. So sieht es bei mir aus.

Code:
;DW intern Bereich 13X - regulär

exten=>_1234561[3-7],1,Set(CHANNEL(language)=de)
exten=>_1234561[3-7],n,ChanIsAvail(SIP/${EXTEN:6}|js)
exten=>_1234561[3-7],n,TrySystem(/data/invers_uni.sh ${CALLERID(num)} >/dev/null 2>&1 &) ;reverse lookup
exten=>_1234561[3-7],n,Set(CALLERID(num)=0${CALLERID(num)})
exten=>_1234561[3-7],n,GotoIf($[${DB_EXISTS(umleitung/${EXTEN:6})}]?uml)
exten=>_1234561[3-7],n,Dial(SIP/${EXTEN:6},${localdialtimeout},t)
exten=>_1234561[3-7],n,Set(vmbox=${EXTEN:6})
exten=>_1234561[3-7],n,Goto(dialStates,${DIALSTATUS},1)
exten=>_1234561[3-7],n(uml),Set(zielnummer=${DB(umleitung/${EXTEN:6})})
exten=>_1234561[3-7],n,Goto(rufumleitung-wahl,${zielnummer},1)
exten=>_1234561[3-7],103,Dial(SIP/${EXTEN:6},1,t)
exten=>_1234561[3-7],n,Answer
exten=>_1234561[3-7],n,Playtones(Busy)
exten=>_1234561[3-7],n,Wait(15)
exten=>_1234561[3-7],n,Hangup()

Ist jetzt noch ein bisschen mehr von meinem Code mit drin aber das funktioniert nun exakt so bei mir. Man könnte das alles bestimmt noch bisschen eleganter machen aber es geht.

Die Option "js" war definitiv notwendig.

Vielen Dank
 
also nach längerem Rumprobieren hab ich es hinbekommen. So sieht es bei mir aus.

Gut das es dann jetzt doch geklappt hat. So aus reinem Interesse: Wie lange erhaelt der Anrufer ein Freizeichen, wenn besetzt ist?

Aber noch ein bzw. zwei Anmerkungen:

Code:
exten=>_1234561[3-7],n,Answer
exten=>_1234561[3-7],n,Playtones(Busy)
exten=>_1234561[3-7],n,Wait(15)
exten=>_1234561[3-7],n,Hangup()

Dafuer wuerde ich Dich ja hassen, wenn ich bei Dir anrufe :)
Also das Gespraech anzunehmen (und damit evtl. Kosten zu verursachen), nur um ein Besetzt-Zeichen abzuspielen? Tstststs....
Man kann das eigentlich immer auch ohne Abheben erreichen. Falls Du VoIP auch Upstream benutzt, dann sollte eigentlich ein Busy() reichen. Falls Du ISDN benutzt, kann man das ueber die Variable HANGUPCAUSE (oder so aehnlich) und ein Hangup() erreichen.
Wie/ob das bei nem analogen Upstream geht, weiss ich nicht, aber ich vermute mal, dass das nicht bei Dir zutrifft.

Die Option "js" war definitiv notwendig.

Da melde ich mal Skepsis an :) Also dass 's' notwendig ist, ist keine Frage. Aber das ganze sollte eigentlich auch uebersichtlicher mit Labels und ohne 'j' funktionieren:

Code:
exten=>_1234561[3-7],n,ChanIsAvail(SIP/${EXTEN:6}|s)
exten=>_1234561[3-7],n,GotoIf($["${AVAILCHAN}" = ""]?besetzt)
exten=>_1234561[3-7],n,NoOp(Leitung ist frei)
...
exten=>_1234561[3-7],n(besetzt),NoOp(Es wird gesprochen)
...

OK, sieht immer noch nicht schoen aus, aber zumindest sind keine fixen "Zeilennummern" mehr drin. Wenn Du's schoener haben willst, musst Du AEL benutzen :)

Lars
 
Hallo,

das mit dem 1 Sekunde klingeln und dann besetzt funktioniert zumindest für meine Zwecke gut, aber natuergemäß nicht perfekt. Hereinkommende Anrufe via Handy oder Festnetztelefonie bekommen quasi sofort ein Besetztzeichen. Bei einem Test mit software Sip-Client konnte ich kurz ein Klingeln wahrnehmen bevor dann sofort ein Besetzt kam.

Stimmt das mit dem Answer und den Playtones ist ziemlich einfältig gelöst. Dafür schäme ich mich auch ein bisschen aber ich hab mir nicht besser zu helfen gewusst. Das werde ich noch ändern. :)

Das "js" brauchte ich eigentlich nur wegen dem Springen zur (in meinem Fall) 103. Klar das das immer müßig ist. Beim ändern der exten muß man drauf achten das auch die Ansprungmarke noch passt. So wie beschrieben ist es einfach eleganter.

Mit extensions.ael hab ich bisher noch kaum Erfahrung. Ich nutze ausschließlich die etensions.conf.

HANGUPCAUSE klingt sehr interessant. Das sollte ich mal forcieren, aber auch hier ist meine Erfahrung begrenzt und ich werde mal die Forum-Suchfunktion "quälen".

Habe mir auch mal das GS Phonebook angeschaut. Das ist echt ne coole Sache. Da bin ich vor geraumer Zeit schon mal drauf gestoßen. Am interessantesten finde ich die IDLE-Screen Geschichte (display CallerID from remote phones on GS idle screen). Sowas suche ich schon lange und hab vergeblich versucht das zu implementieren (Verwende 1.1.6.46) Bei Grandstream isses ja so ne Sache mit der Dokumentation. Ich denk das wird aber mal ein Thema für nen eigenen Thread.
 
das mit dem 1 Sekunde klingeln und dann besetzt funktioniert zumindest für meine Zwecke gut, aber natuergemäß nicht perfekt. Hereinkommende Anrufe via Handy oder Festnetztelefonie bekommen quasi sofort ein Besetztzeichen. Bei einem Test mit software Sip-Client konnte ich kurz ein Klingeln wahrnehmen bevor dann sofort ein Besetzt kam.

Das hoert sich gut an.

Das "js" brauchte ich eigentlich nur wegen dem Springen zur (in meinem Fall) 103. Klar das das immer müßig ist. Beim ändern der exten muß man drauf achten das auch die Ansprungmarke noch passt. So wie beschrieben ist es einfach eleganter.

Darueber kann man streiten :) Also ich hasse ja feste Zeilennummern :) Erinnert mich irgendwie an BASIC beim C64...

Mit extensions.ael hab ich bisher noch kaum Erfahrung. Ich nutze ausschließlich die etensions.conf.

Falls Du mal Zeit und Musse hast, kannst Du Dir das ja mal anschauen. Wenn Du mich fragst, lohnt sich das. Aber - wie gesagt - ich bin ja auch kein Fan der Zeilennummerierung.

HANGUPCAUSE klingt sehr interessant. Das sollte ich mal forcieren, aber auch hier ist meine Erfahrung begrenzt und ich werde mal die Forum-Suchfunktion "quälen".

http://www.voip-info.org/wiki/view/Asterisk+cmd+Hangup

Ein "Hangup(17)" sollte ein Besetzt-Zeichen signalisieren.

Habe mir auch mal das GS Phonebook angeschaut. Das ist echt ne coole Sache. Da bin ich vor geraumer Zeit schon mal drauf gestoßen. Am interessantesten finde ich die IDLE-Screen Geschichte (display CallerID from remote phones on GS idle screen). Sowas suche ich schon lange und hab vergeblich versucht das zu implementieren (Verwende 1.1.6.46) Bei Grandstream isses ja so ne Sache mit der Dokumentation. Ich denk das wird aber mal ein Thema für nen eigenen Thread.

Falls Du Dir das wirklich anschauen willst, tritt mir vorher nochmal in den Hintern. Das Idle Screen Feature habe ich inzwischen so ueberarbeitet, dass man die XML-Dateien dynamisch relativ flexibel mit PHP erstellen kann. Und viele Screen-Update-Signale wurden entfernt, da die mit der korrigierten Firmware 1.1.6.46 nicht mehr noetig sind. Ich war nur bisher zu faul einen neuen Release zu machen. Das ganze hat noch Probleme mit dem GXP-2010 durch einen Firmware-Fehler. Grandstream weiss darueber Bescheid, aber wer weiss, wann sie das korrigieren. GXP-2020 und GXP-2000 betrifft das aber nicht.

Tschuess,
Lars
 
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.