Problem beim Anruftransfer

leseratte10

Mitglied
Mitglied seit
23 Apr 2012
Beiträge
406
Punkte für Reaktionen
2
Punkte
18
Hallo,

mit folgenden Einträgen in features.conf und extensions.conf habe ich einen Call-Transfer realisiert:

Code:
transf => ##,peer,Macro,transfertoall

Code:
[macro-transfertoall]
exten => s,1,Set(__DYNAMIC_FEATURES=transf)
exten => s,n,Dial(SIP/21&SIP/22&SIP/23&SIP/24,,mtTkKc)

Das bedeutet, wenn man während des Anrufs ## drückt, wird der Anruf an alle anderen Telefone weitervermittelt.
Leider aber nicht an das Telefon, was den Transfer ausgelöst hat. Denn das steckt noch im Gespräch und hört nur Stille.

Wie bringe ich Asterisk dazu, die "halbe" Verbindung zum Telefon zu trennen, damit das auch wieder klingelt? "Hangup()" würde ja auch die Verbindung zum Anrufer trennen, der aber weiterverbunden werden soll...

Leseratte10
 
Zuletzt bearbeitet:
Was Du da machst ist sowieso nicht optimal. Zum einen sind Macros deprecated, zum anderen ist applicationmap für Funktionen wie Macro, Goto und so Zeug eigentlich nicht geeignet.

Imho wird die beste Lösung sein, das ganze über AGI abzuarbeiten. Damit kannst Du den internen Channel trennen und danach direkt das Sammel-Dial absetzen.

Je nach Endgerät bleibt noch das Problem, das dieses evtl. Busy bleibt, so lange der Hörer nicht aufgelegt wurde.
 
Wenn der Anruf beendet wird, verbleibt das Endgerät noch 5 Sekunden im "besetzt"-Status. Das würde ich lösen, indem ich einfach "MusicOnHold(,5)" vor dem Dial ausführe. Hängt der Anrufer halt 5 Sekunden länger in der Warteschleife.

Gibts da denn irgend welche Beispiele, wie man das mit AGI umsetzt? Damit hab ich mich noch gar nicht beschäftigt ...
 
Ein fertiges Skript für Deine Anwendung wirst Du wahrscheinlich nicht finden, kommt auch drauf an, welche Skriptsprache Du nehmen magst. Ich kann nur PHP, das hier hat mir seinerzeit als Vorlage gedient.

Mir ist noch was eingefallen, wie es auch ohne AGI funktionieren könnte. Du müsstest zu Beginn des Gesprächs eine mehrfach vererbbare Channel-Variable mit dem Channelname des lokalen Clients setzen. Abgehend ist das ja einfach, ankommend zB. über eine Subroutine mittels U Flag im Dial. Damit müsste sich der Channel nachher mit
System(asterisk -rx 'channel request hangup ${chname}') trennen lassen.

Dann solltest Du aber auf jeden Fall im Feature statt Macro ein Dial mit einem Local Channel als Ziel machen.
 
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.