Vermitteln wie bei Systemanlagen

reflexsoft

Neuer User
Mitglied seit
17 Apr 2007
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

versuche jetzt schon einige Zeit das Vermitteln wie bei normalen Telefonanlagen (Hicom etc.. ) abzubilden. Soll heissen; ein Anruf kommt rein, ich nehme ihn an, gehe in Rückfrage, wähle die neue Nummer. Sobald es klingelt kann ich auflegen oder ich warte bis die Gegenseite sich meldet, lege dann auf. Gespräch vermittelt!
Genau dieses Verhalten möchte ich auch auf dem Asterisk haben.

Wenn ich es richtig gesehen habe, muss ich beim "attended transfer" warten bis die Gegenseite sich meldet und kann dann erst auflegen.
Gibt es eine Möglichkeit dieses Verhalten in Asterisk hinzubekommen?? evtl. patch?

Grüße Joerg
 
Hi,

Snom Telefone verwenden und gut ist.

Gruß, Werner
 
Hi,

das war mir eigentlich schon klar :) Habe hier ein 300,320,360 stehen.
Wahrscheinlich erfordert das aber noch spezielle Einstellungen.

Habe die Teile im groben jetzt so konfiguriert:
Dialog-Info Call Pickup: On (Eher unwichtig,oder?)
Trennen beim Auflegen: On
Transferieren durch Auflegen: On (Schliessen sich die beiden nicht irgendwie aus??)

Gibt es da noch irgendwas zu beachten?

Im Prinzip läuft ja die Vermittlung, nur muss ich warten bis die Gegenstelle abgenommen hat.

Grüße und schon mal Danke,
Joerg
 
reflexsoft schrieb:
Im Prinzip läuft ja die Vermittlung, nur muss ich warten bis die Gegenstelle abgenommen hat.
"Transfer" -> Nummer wählen -> "Häkchen-Taste" und auflegen
 
Das wäre ja dann der "blind transfer".
Ich möchte gerne die selbe Vorgehensweise wie bei einer alten Telefonanlage.
Ich gehe in "Rückfrage" wähle die neue Nummer, ich höre dann das Freizeichen,
und egal ob der gerufene drangeht oder ich nach dem ersten klingen auflege. Das Gespräch soll vermittelt werden.

Ich habe jetzt folgenden Zustand:

Ich lege den Ruf ins Halten, wähle, habe Klingelzeichen und wenn ich den Hörer auflege wird nicht vermittelt.

Vielleicht habe ich das eben ein bisschen unglücklich ausgedrückt...

Grüße Joerg
 
Das geht m.W. nicht anders. Vielleicht hat sonst noch jemand einen Vorschlag.
 
Während des laufenden Gespräches HOLD drücken. Nummer wählen die Du erreichen willst. Anruf ankündigen. Transfer drücken und bestätigen.

Fertig.

Falls der Angerufene das Gespräch nicht haben will auflegen und den wartenden wieder per HOLD aus der Warteschleife holen.
 
ähm, Pluto...

reflexsoft schrieb:
Ich gehe in "Rückfrage" wähle die neue Nummer, ich höre dann das Freizeichen,
und egal ob der gerufene drangeht oder ich nach dem ersten klingen auflege. Das Gespräch soll vermittelt werden.
Hier spielt die Musik ;)
 
hallo,

tja, ich scheine eine abstruse Vorstellung von Vermitteln zu haben. ;)
Ich wundere mich nur, dass nicht viel mehr Leute dieses Verhalten haben wollen,
da es diese Funktionsweise eigentlich schon seit etlichen Jahren (vielleicht sogar schon ein Jahrzent gibt)

Trotzdem vielen Dank erstmal, vielleicht hat ja noch jemand doch noch eine Lösung. Werde sie dann posten!

Grüße,
Joerg
 
reflexsoft schrieb:
tja, ich scheine eine abstruse Vorstellung von Vermitteln zu haben. ;)
Nicht unbedingt. Früher konnten wir das auch mal (Siemens Hicom/HiPath)

reflexsoft schrieb:
Ich wundere mich nur, dass nicht viel mehr Leute dieses Verhalten haben wollen,
da es diese Funktionsweise eigentlich schon seit etlichen Jahren (vielleicht sogar schon ein Jahrzent gibt)
Wir haben uns damit abgefunden...
 
tja, ich scheine eine abstruse Vorstellung von Vermitteln zu haben.

ich nehme mal reher an, dass man im sog. Land der unbegrenzten Möglichkeiten anders telefoniert ... jedenfalls haben entsprechende Fragen im digium Forum immer recht wenig Echo gebracht

Man kann sich sowas selber basteln - unter kreativer Verwendung von Konferenzräumen und Manager Skripten
 
Ähm, ist das nicht die Standard-Transferfunktion von asterisk? Die in der features.conf eingestellt wird? Ich hab das genau so.. und ich kann auflegen und es wird dann weiter transferiert...

Es wird dabei natürlich nicht die Transferfunktion der Telefone benutzt, sondern der Transfer über z.b. * eingeleitet. Es müssen also DTMF Töne übertragbar sein. Außerdem läuft der RDP-Stream dann immer über Asterisk,
weil er ja das * mitkriegen muss.

Dazu muss der Dial, der dich anruft, als Option ein t haben. Mehr Infos dazu unter

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

interressant auch der TRANSFERCONTEXT im obigen Link.

Falls es jemanden interressiert, ich habe dieses asterisk-transferverhalten komplett in dialplan-logik "nachgebaut" (unter verwendung von konferenzen), weil ich da noch ein paar sachen ändern wollte. Mich hat z.B. genervt, das wenn der anrufer auflegt, während der Angerufene Rücksprache hält und dann auflegt, der vermittelte nur nen tuten hört und nicht weiß ob es jetzt nen problem gab oder der andere aufgelegt hat - ich wollte da ne message abspielen!
 
Hallo Jobisoft,

ich bin auf jeden Fall an deinen dialplan interresiert!
Hatte es zwischenzeitlich schon aufgegeben nach dieser Art des Vermitteln zu forschen. Erst recht nachdem ich mir auch schon ein paar Nächte mit Asterisk - Quellcode um die Ohren geschlagen habe. :) Die o.g. Art der Vermittlung scheint berücksichtigt zu sein, komme aber nicht an den Punkt im Quellcode vorbei, wo dieses Verhalten abgefangen wird. :noidea:

Aber vielleicht ist die ganze Sache mit deinem Dialplan ohnehin besser, wäre klasse wenn du den Teil hier mal posten könntest.


Grüße Joerg
 
Also hier ist er, aber der ist "nicht schön", besonders die sache mit dem ringtone beim blindtransfer :) Aber besser hab ich es nicht geschafft. Außerdem hatte ich zum Zeitpunkt der programmierung nicht gewusst, das Variablen durch Set(_bla=blub) einen Dial überleben können, deswegen nutze ich die Extension, um variablen zu übergeben. Und von macros hatte ich auch nur begrenzt Ahnung. Aber was solls, es funktioniert.

So sieht jetzt mein Dial aus (interne nummern sind zweistelig)

Code:
exten => _XX,1,GotoIF($["${MATH(${CVTR}+0,i)}"=""]?clear:inc)			; This will produce a warning, but i do not care
exten => _XX,2(clear),Set(CVTR=10,g)						; If nan set to 10
exten => _XX,3(inc),Set(CVTR=${MATH(${CVTR}+1,i):0:2},g)			; Inc and limit to 99, 100 -> 10
exten => _XX,4,Set(ThisCall=${CVTR})
exten => _XX,5,MeetMeCount(${ThisCall}|count)
exten => _XX,6,Gotoif,$["${count}" > "0"}]?inc 					; Check again if conf is empty
exten => _XX,9,Dial(SIP/${EXTEN},${ring-directcalling},G(mytransfer^*${ThisCall}01^1))

wobei ganz hinten das 01 für t (angerufene darf transferrieren) und das 10 für T (anrufer darf transferrieren) steht

Damit mehrere Gespräche gleichzeitig laufen können habe ich die konferenzen 10-90 für gesprächsräume reserviert, dir nacheinander benutzt werden... (CVTR = custom voice transmission room *lalala*)

Das eigentliche transferrieren mache ich durch einen kick aus der Konferenz, gefolgt von einer automatischen einwahl in eine andere konferenz damit dann nicht immer "sie wurden gekickt" ertönt, musst du das mit einer leeren Datei übersprechen. Bridge() und Transfer() wolten bei mir nicht funktionieren.

Zusätzlich wird ein 5 Sekunden dialton als Datei benötigt, der als background nach "es wird transferrierd" ertönt. Playtones hab ich nicht hinbekommen, weil ich ja wollte das der Ton aufhört, sobald eine Nummer eingegeben wird.

Um den Blindtransfer hinzukriegen (der vermittler legt vor Gesprächsaufbau auf) benutze ich ein blindtransfer.agi, das dann die zielperson per callfile in die conferenz des wartenden einwählt, dabei kommt es zu einem kurzen Stotterklingeln beim antransferrierten, weil ein Dial beendet wird und ein neuer anfängt. Wenn der antrannsferrierte genau in der pause abhebt, hört er ein freizeichen. mein dialplan ist dann in nem busy-loop und klingelt ihn nochmal an, sobald er aufgelegt hat

Bei Fragen einfach melden :)


Code:
;
; Rinttimes - Länge der Klingelzeiten
;
ring-blindtransfer=40		; Nachdem ein Transfer iniziert wurde, kann der Mitarbeiter auflegen und verbindet noch
				; vor Gesprächsaufbau die Teilnehmer, wie lange soll dann das Telefon läuten?
ring-attentransfer=40		; Bei einem Attended Transfer, wie lange bis der Mitarbeiter automatisch wieder mit dem
				; Anrufer verbunden werden soll?
ring-directcalling=40		; Wenn ein Anschluss (von intern oder extern) angerufen wird, wie lange solls klingeln?









; Transfering
; ============================================================================

[blindtransfer-ring]
exten => s,1,Answer()				; Wichtig, this gets thrown into conf, caller hears ringing
exten => s,n,SetLanguage(de)			; This is one BIG fake, I did not get the ring-tone from the
exten => s,n,Playtones(ring)			; actual dial, so i put in another member in the conf, which
exten => s,n,Wait(1000)				; gives us dialtone - must be terminated when picked up!
exten => s,n,Hangup()
exten => _XX,1,SetLanguage(de)
exten => _XX,n,Meetme(${EXTEN},Dq1,${EXTEN})
exten => _XX,n,Hangup()

[macro-killring]
exten => s,1,MeetMeAdmin(${ARG1},k,3)

[blindtransfer]
exten => _XX*XX,1,Set(BusyLoop=0)		; Wir brauchen BusyLoop, weil der angetransferrierte in genau dem Moment
exten => _XX*XX,2,SetLanguage(de)		; das Telefon abheben kann, nachdem der ursprüngliche Dial beendet wurde
exten => _XX*XX,3,Set(CloseMe=${EXTEN:3})	; und bevor der neue Dial gestartet wurde, dann haben wir busy, wir 
						; wiederholen also bei busy den Anruf				
exten => _XX*XX,4,Dial(SIP/${EXTEN:0:2},${ring-blindtransfer},M(killring^${CloseMe}))		; The Makro terminates the ring tone
exten => _XX*XX,5,Macro(killring,${CloseMe})
exten => _XX*XX,n,Playback(vm-theperson)				; Timeout of Blindtransfer, play message
exten => _XX*XX,n,SayNumber(${EXTEN:0:2})
exten => _XX*XX,n,Playback(vm-isunavail)	
exten => _XX*XX,n,Goto(500)	
exten => _XX*XX,105,Gotoif($[ ${BusyLoop} > 10 ]?itisbusy)		; LoopMax
exten => _XX*XX,n,Wait(5)						; Sleep
exten => _XX*XX,n,Set(BusyLoop=${MATH(${BusyLoop}+1,i)})		; Inc
exten => _XX*XX,n,Goto(5)						; Dial again
exten => _XX*XX,n(itisbusy),Macro(killring,${CloseMe})
exten => _XX*XX,n,Playback(vm-theperson)
exten => _XX*XX,n,SayNumber(${EXTEN:0:2})
exten => _XX*XX,n,Playback(vm-isonphone)	
exten => _XX*XX,n,Goto(500)	
exten => _XX*XX,500,MeetMeCount(${CloseMe}|count)			; Timout, kill caller
exten => _XX*XX,n,Gotoif,$["${count}" = "0"}]?Exit			; Check again if is empty, no need to kill it
exten => _XX*XX,n,MeetMeAdmin(${CloseMe},K)			        ; I hung up, close the new conference and move the new partner into the old conf (by auto fall through)
exten => _XX*XX,n(Exit),Hangup()

[transferring]
exten => _*XX0*XX,1,Set(TransRoom=${EXTEN:5})
exten => _*XX0*XX,2,Set(TransDest=${EXTEN:1:2})
exten => _*XX0*XX,3,Dial(SIP/${TransDest},${ring-attentransfer},gdG(mytransfer^*${TransRoom}*${TransDest}0^1))	
exten => _*XX0*XX,4,Playback(vm-theperson)
exten => _*XX0*XX,5,SayNumber(${TransDest})
exten => _*XX0*XX,6,Playback(vm-isunavail)	
exten => _*XX0*XX,7,Goto(*,1)
exten => _*XX0*XX,104,Playback(vm-theperson)
exten => _*XX0*XX,105,SayNumber(${TransDest})
exten => _*XX0*XX,106,Playback(vm-isonphone)	
exten => _*XX0*XX,107,Goto(*,1)			

exten => *,1,Goto(transfer-leg,*${TransRoom}*000,return)		; Abort the dial by pressing *

exten => h,1,DeadAGI(blindtrans.agi|${TransDest}|${TransRoom})		; Blindtransfer, Call TransDest and send into TransRoom
exten => h,2,Hangup()

[transfer-leg]
exten => _*XXX,1,Set(TransRoom=${EXTEN:1:2})
exten => _*XXX,n,Set(Mode=${EXTEN:3})					; Mode = transfer alowed true/false
exten => _*XXX,n,SetLanguage(de)
exten => _*XXX,n,Goto(i,meetme)						; Skip the test the first time

exten => _*XX*XX0,1,Set(TransDest=${EXTEN:4:3})
exten => _*XX*XX0,n,Set(CloseMe=${TransDest})
exten => _*XX*XX0,n,Meetme(${TransDest},Dq1,${TransDest})		; Do not allow multi-transferring
exten => _*XX*XX0,n(return),Noop(return)
exten => _*XX*XX0,n,Set(TransRoom=${EXTEN:1:2})		
exten => _*XX*XX0,n,Set(Mode=1)						; Keep the tranfer-status
exten => _*XX*XX0,n,Goto(i,1)						; Return to originating room

exten => *,1,Background(pbx-transfer)					; Single-Exit-Digit der Conf
exten => *,2,Background(custom/dial)
exten => *,3,Goto(i,1)							; 
exten => _X,1,Goto(i,1)							; Intercept all DTMF

exten => _XX,1,Goto(transferring,*${EXTEN}0*${TransRoom},1)		; Mode does not need to be passed, case it is clear that we are allowed

exten => i,1,Playback(beeperr)
exten => i,n,MeetMeCount(${TransRoom}|count)
exten => i,n,Gotoif,$["${count}" = "0"}]?userleft			; Sollte unser Gesprächsraum leer sein, hat der ursprüngliche Anrufer aufgelegt
exten => i,n(meetme),Noop(meetme)
exten => i,n,Set(CloseMe=${TransRoom})
exten => i,n,Set(MeetMeMode=${IF($[ ${Mode} = 1]?DMXq1:DMq1)}) 
exten => i,n,Meetme(${TransRoom},${MeetMeMode},${TransRoom})
exten => i,n,Hangup()
exten => i,n(userleft),Noop(userleft)
exten => i,n,Playback(custom/File-10)
exten => i,n,Hangup()

exten => h,1,MeetMeCount(${CloseMe}|count)
exten => h,2,Gotoif,$["${count}" = "0"}]?4				; Check again if is empty, no need to kill it
exten => h,3,MeetMeAdmin(${CloseMe},K)				        ; I hung up, close the new conference and move the new partner into the old conf (by auto fall through)
exten => h,4,Hangup()

[mytransfer]
;*XXXX = *AABB, AA=CallingRoom, BB = transfercode, t = 01, T = 10 additiv
exten => _*XXXX,1,Goto(transfer-leg,${EXTEN:0:3}${EXTEN:3:1},1)		; T
exten => _*XXXX,2,Goto(transfer-leg,${EXTEN:0:3}${EXTEN:4:1},1)	        ; t
exten => _*XX*XX0,1,Goto(transfer-leg,*${EXTEN:1:2}*${EXTEN:4},1)	; *cr*transferdest
exten => _*XX*XX0,2,Goto(transfer-leg,*${EXTEN:1:2}*${EXTEN:4},1)

Und hier das blindtransfer.agi

Code:
#!/usr/bin/php -q
<?php

if (!defined('STDIN')) {
    define('STDIN', fopen('php://stdin', 'r'));
}
if (!defined('STDOUT')) {
    define('STDOUT', fopen('php://stdout', 'w'));
}
if (!defined('STDERR')) {
    define('STDERR', fopen('php://stderr', 'w'));
}

while ( !feof(STDIN) )
{
   $temp = fgets( STDIN );

   if ($parm_debug_on)
       fputs( $stdlog, $temp );

   // Strip off any new-line characters
   $temp = str_replace( "\n", "", $temp );

   $s = explode( ":", $temp );
   $agivar[$s[0]] = trim( $s[1] );
   if ( ( $temp == "") || ($temp == "\n") )
   {
       break;
   }
}

$myDest = $argv[1];
$myRoom = $argv[2];

 $handle = fopen ("/var/spool/asterisk/$myDest-$myRoom-blind.call", "w");
 fputs($handle,"Channel: LOCAL/*$myRoom"."1"."@transfer-leg\n");
 fputs($handle,"MaxRetries: 0\n");
 fputs($handle,"RetryTime: 50\n");
 fputs($handle,"WaitTime: 30\n");
 fputs($handle,"Context: blindtransfer\n");
 fputs($handle,"Extension: $myDest*$myRoom\n");
 fputs($handle,"Priority: 1");
 fclose($handle);

 $handle = fopen ("/var/spool/asterisk/$myDest-$myRoom-ring.call", "w");
 fputs($handle,"Channel: LOCAL/$myRoom@blindtransfer-ring\n");
 fputs($handle,"MaxRetries: 0\n");
 fputs($handle,"RetryTime: 50000\n");
 fputs($handle,"WaitTime: 30\n");
 fputs($handle,"Context: blindtransfer-ring\n");
 fputs($handle,"Extension: s\n");
 fputs($handle,"Priority: 1");
 fclose($handle);

 system("mv /var/spool/asterisk/$myDest-$myRoom-ring.call /var/spool/asterisk/outgoing/$myDest-$myRoom-ring.call");
 system("mv /var/spool/asterisk/$myDest-$myRoom-blind.call /var/spool/asterisk/outgoing/$myDest-$myRoom-blind.call");

?>

Ich hatte langeweile ... wie gesagt, asterisk macht genau das gleiche wenn die transferfunktion der features.conf benutzt wird ... ich wollte nur die message wenn der anrufer auflegt und ein paar mehr beeps haben.
 
Zuletzt bearbeitet:
Ich wollte nur kurz nochmal erwähnen, das mein dialplan absolute spielerei ist, das was du möchtest (a ruft b an, b geht in rückfrage und ruft c an, legt aber auf bevor c dranggeht, -> a hört das Rufzeicheichen für c, c hebt ab, a spricht direkt mit c) ist mit bordmittel von asterisk möglich! Du darfst halt nur nicht die Tansferfunktion der telefone, sondern musst die Transferfunktion von asterisk nutzen.

Wollte nur sichergehen .... du musst dich durch mein dialplan nicht durchbeißen, nur wenn du den transfer wirklich absolut anpassen möchtest. Mein mytransfer macht an zwei Stellen ein beep mehr als der build-in-asterisk und bringt die "user-has-left-mesage". Zusätzlich habe ich damit mein "einseitiger lag nach attended transfer"-problem gelöst.

Ok? *grins* Sollst ja nicht Stunden um Stunden umsonst vor der Kiste verbringen. Probier erstmal den build-in-attended-transfer aus.

Liebe Grüße
John
 
Mit der 7.1.6 Firmware geht das mit Snom 3x0 am Asterisk 1.2.18 auf Anhieb ohne weitere Bastelei, die Rufumleitung übrigens auch. Das wird alles über SIP-Signalisierung abgehandelt... Inkusiv blinkender Leitungstasten, Makeln und 3-er-Konferenz.

:) oli
 
Was ihr sucht, sollte das hier sein: http://bugs.digium.com/view.php?id=8413
Ich habs selber noch nicht getestet, weil ich noch mit 1.2 arbeite, aber in den nächsten Wochen werd ich wohl auf 1.4 umsteigen.
Dann werd ich gleich diesen Patch mit einspielen.


*Edit*:
Wie auf der von geposteten Seite zu lesen, wurde der Patch schon in die Hauptversion integriert.
D.h. in der aktuellen 1.4er Version geht das schon.
 
Zuletzt bearbeitet:
Wenn ich es richtig sehe ist der Patch dort in trunk gegangen, und zu der Zeit wurde schon an 1.6 gearbeitet. In 1.4 sollte die Funktionalität aus dem Patch also noch nicht drin sein.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,046
Beiträge
2,244,990
Mitglieder
373,451
Neuestes Mitglied
Ayzham
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.