Externe Anrufe an voheriges SIP zurückholen

AndreasKo

Neuer User
Mitglied seit
7 Dez 2007
Beiträge
19
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich versuche gerade ein Problem in meinem Wählplan zu lösen.

Folgender Maßen soll es sein:
....
- ein Anrufer wird extern weitervermittelt
- wenn der Empfänger nicht erreichbar ist, soll der Anruf zurückkommen
- der zurückkommende Anruf soll an die Person gehen, die ihn auch vermittelt hat

Und genau beim letzten Punkt sehe ich mein Problem.
Wie kann ich mir (contextübergreifend) merken, welche interne Nummer das Gespräch nach außen vermittelt hat, um das Gespräch über ${DIALSTATUS} zurück zu holen, falls der externe nicht erreichbar ist.

Der Channel ist doch bereits zerstört, wenn man ein Gespräch über CAPI nach außen versucht hat zu vermitteln, oder? Ergo müsste die interne Nummer über eine globale Variable "gesichert" werden, da Channelvariablen "verfallen" wären.

Evtl. hat einer von euch einen Denkanstoß für mich.

Schonmal danke im voraus!

MfG

Andreas
 
Hi betateilchen,

da ich leider tagsüber keine Möglichkeit habe das ganze zu testen, wollte ich gerne wissen, ob z.B. die globale Variable von weiteren "Weiterleitungen" wieder überschrieben wird und somit die Zurückverfolgung nicht mehr gegeben ist.

MfG

Andreas
 
Hallo Andreas,

nach dem erfolglosen Verbindungsversuch hast Du noch alle Channel-Variablen zur Verfügung.
Code:
exten => _X.,n,Dial(SIP/${EXTEN}@${provider})
exten => _X.,n,Goto(DS-${DIALSTATUS}|1)
exten => DS-ANSWER,1,NoOp()  ; nach erfolgreicher Verbindung Ende
exten => DS-.,1,Dial(SIP/${originalexten})

Du musst Dir also lediglich den ursprünglichen Teilnehmer in einer Channel-Variablen merken und kannst problemlos beim Verbindungsfehler den alten Teilnehmer rufen.
 
Hi Mathias,

so etwas in der Richtung hatte ich auch gedacht. ;)
Also muss ich für jedes interne SIP eine Variable erstellen, weil ja auf den anderen SIPs in der zwischenzeit wieder Anrufe augelaufen sein könnten.

Ich melde mich nochmal, wenn das alles so geklappt hat!

Danke schonmal für die Hilfe
Andreas
 
Ich habe den Gedanken aufgegriffen und realisiert. Teilweise können ja auch beide Gesprächspartner vermitteln (Gespräch zwischen 2 internen Teilnehmern). Daher gehe ich wie folgt vor:
Code:
[dial]
...
exten => _X.,n,GotoIf($[${BLINDTRANSFER}0]":notransfer)
exten => _X.,n,Set(Fallback=${CUT(Call||2)})                   ; Anruf-Ziel hat verbunden
exten => _X.,n,ExecIf($["${BLINDTRANSFER}"="${CHANNEL}"]|Set|Fallback=${CUT(Call||1)}) ; Anrufer hat verbunden
exten => _X.,n(notransfer),...
...
exten => _X.,n,Set(_Call=${CALLERID(number)}-${EXTEN})  ; Variable für Transfer-Fallback
exten => _X.,n,Dial(SIP/${EXTEN}|120|tT)
exten => _X.,n,Goto(DS-${DIALSTATUS}|1)
exten => _X.,n(hangup),hangup(${cause})

exten => DS-CANCEL,1,Goto(${CUT(Call||2}|hangup)
exten => _DS-.,1,GotoIf($[${EXISTS(${fallback})}]?${fallback}|1)
exten => DS-BUSY,2,Set(cause=17)
exten => DS-NOANSWER,2,Set(cause=18)
exten => _DS-.,2,Set(cause=41)
exten => _DS-.,3,Goto(${CUT(Call||2}|hangup)

Somit fällt der Ruf immer zum ursprünglichen Teilnehmer zurück.
 
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.