AutoClipRouting auch für's Festnetz?

tomster

Mitglied
Mitglied seit
6 Dez 2004
Beiträge
238
Punkte für Reaktionen
0
Punkte
0
Der Hersteller 2N bietet für seine GSM-Gateways ein, in meinen Augen, sehr interessantes Feature: Auto-Clip-Routing.
Das bedeutet, dass sich das Gatewaymodul nicht nur die angerufene=gewählte Nummer merkt, sondern auch die Extension des Anrufenden=Wählenden. Erreicht der Anrufer den Gesprächspartner nicht (z.B. weil der gerade nicht am Platz ist, oder er den Anruf wegdrückt), dann weiß das Gateway wer versucht hat das Gespräch aufzubauen. Ruft nun der Angerufene zurück, wird das Gespräch direkt an den Apparat des (ursprünglichen) Anrufers weitergeleitet.

Eben dieses Feature wäre aber auch am Festnetz interessant. Wir übermitteln bei ausgehenden Gesprächen standardmäßig die Hauptrufnummer. Ruft man diese Nummer an/ zurück, dann landet mal logischerweise an der Zentrale. Leider weiß die Telefonfee dort in den seltensten Fällen wer den Rückrufenden erreichen wollte und das Rumgeplärre innerhalb des Büros geht los. Da ich zwar die Dialplansyntax einigermaßen verstehe, aber keinen Plan von astDB oder agi-Scripten habe stelle ich frecherweise die Frage:

Hat schon jemand etwas Ähnliches realisiert, bzw, könnte mir einen durchaus kräftigen Schubs in die richtige Richtung geben? Ich glaube dieses Feature könnte auch dem einen oder anderen Asteriskee hilfreich erscheinen...
 
realisiert nicht aber eine lösungsidee;

Schreibe doche einfach die informationen in die Datenbank und überprüfe bei eingehenden anrufen ob infromationen vorhanden sind oder nicht
 
Ned bös sein, aber diese Idee hatte ich auch. Nur eben "keinen Plan wie man die astDB verwendet" (s.o.). voip-info.org ist da etwas dürftig.

Mag ja sein, dass man mit:
exten => _XYZ,1,DBput${EXTEN}:${CALLERIDNUM}
exten => _XYZ,2,Dial,blablubb

schon etwas erreichen kann. Aber, wie man nun eine entsprechende Funktion dahinter bringt ist mir schleierhaft. Daher meine Anfrage
 
ich werde heute abend mal ein bsp. verfassen
 
Hui! Das wär ja die Bombe!

Ich sag jetzt schon Mal Danke.
 
sorry, habe zur Zeit nicht gerade viel zu tun; habe mal schnell was zusammen geschrieben

Code:
[ausgehend]

exten => _0XXX.,1,noop(externen teilnehmer anrufen)
exten => _0XXX.,n,Set(NUMMER=${EXTEN})
exten => _0XXX.,n,Dial(bla)

exten => h,1,Macro(setAutoCliprouting)

[ankommend]

exten => 20,1,noOp()
exten => 20,n,Set(dialstring=SIP/20)
exten => 20,n,Macro(checkAutoCliprouting)
exten => 20,n,Dial(${dialstring})

[macro-setAutoCliprouting]

exten => s,1,noOp(macro::setAutoClipRouting)
exten => s,n,GotoIf($["${NUMMER}" = ""]?100)
exten => s,n,Goto(s-${DIALSTATUS},1)

exten => s,100,noOp()


exten => s-NOANSWER,1,Goto(set,1)

exten => s-CHANUNAVAIL,1,Goto(donotset,1)

exten => s-BUSY,1,Goto(set,1)

exten => s-CANCEL,1,Goto(set,1)

exten => _s-.,1,Goto(donotset,1)


exten => set,1,DBput(autocliprouting/${NUMMER}=${CALLERIDNUM})

exten => donotset,1,noOp()


[macro-checkAutoCliprouting]

exten => s,1,noop()
exten => s,n,Set(db=${DB_EXISTS(autocliprouting/${CALLERIDNUM})})
exten => s,n,GotoIf($["${db}" != "0"]?setstring:donothing)

exten => s,100(setstring),Set(dialstring=LOCAL/${DB(autocliprouting/${CALLERIDNUM})}@local)
exten => s,n,noOp(${dialstring})
exten => s,200(donothing),noOp(no route set)

kurz erklärt:

-wenn du einen externen Teilnehmer anrufst wir eine Hilfsvariable nummer gesetzt;
-wenn du auflegst wird das macro setAutoCliprouting aufgerufen
-darin kannst du definieren wann ein eintrag gesetzt werden soll

-wenn ein anruf ankommt wird erst einmal de normale Teilnehmer in dialstring definiert
-danach das macro checkAutoCliprouting aufgerufen
-wenn es einen wert in der db findet wird die Variable dialstring ersetzt
-dann dialsting angerufen


Sorry, habe das gerade schnell zusammen getippt, ist sicher noch schöner zu lösen
 
Vielen Dank!
Werd's heute Nacht/ Morgen gleich Mal ausprobieren. Muss nur schauen, wie ich dieses Feature neben den mISDN-Channels auch noch SIP und GSM beibringe. Wird a bissl kompliziert, denk ich
 
Schaut ja eigentlich prima aus. Nur funzt es bei mir nicht.
Ich weiß leider nicht woran es liegt, aber ein show database zeigt keine Einträge. Erst dachte ich, dass mein Eintrag einer gesetzten CALLERID dazwischenfunkt:

exten => _XXX.,1,noop(Externen Teilnehmer anrufen und AutoClip setzen)
exten => _XXX.,n,Set(NUMMER=${EXTEN})
exten => _XXX.,n,Set(CALLERID(num)=089123456)
exten => _XXX.,n,Dial(mISDN/g:incoming/${EXTEN})
exten => h,1,Macro(setAutoCliprouting)

Aber auch ein Auskommentieren ändert nix.
 
Zuletzt bearbeitet:
hast du dazu mal einen konsolenlog?
 
So schaut's aus. Also vom Executen des setClip-Macros ist nix zu erkennen. Ich ruf via mISDN meine Handynummer an, lass es ein paar Mal läuten und lege am SIP-Telefon auf:
Code:
-- Executing NoOp("SIP/11-b5fcfc20", "Externen Teilnehmer anrufen und AutoClip setzen") in new stack
    -- Executing Set("SIP/11-b5fcfc20", "NUMMER=0171123456") in new stack
    -- Executing Set("SIP/11-b5fcfc20", "CALLERID(num)=089123456") in new stack
    -- Executing Dial("SIP/11-b5fcfc20", "mISDN/g:incoming/0171123456") in new stack
P[ 1] * CALL: g:incoming/0171123456
P[ 1]  --> * dad:0171123456 tech:mISDN/1-u50 ctx:incoming
P[ 1] update_config: Getting Config
P[ 1] I SEND:SETUP oad:089123456 dad:0171123456 pid:94
P[ 1]  --> bc_state:BCHAN_CLEANED
P[ 1]  --> * SEND: State Dialing pid:94
    -- Called g:incoming/0171123456
P[ 1] I IND :SETUP_ACKNOWLEDGE oad:089123456 dad:0171123456 pid:94 state:CALLING
P[ 1] I IND :ALERTING oad:089123456 dad:0171123456 pid:94 state:CALLING_ACKNOWLEDGE
P[ 1] Set State Ringing
P[ 1] We have no inband Data, the other end must create ringing
    -- mISDN/1-u50 is ringing
P[ 1] * IND : HANGUPLI> pid:94 ctx:incoming dad:0171123456 oad:0171123456 State:ALERTING
P[ 1]  --> cause:16
P[ 1]  --> out_cause:16
P[ 1]  --> state:ALERTING
P[ 1] I SEND:DISCONNECT oad:089123456 dad:0171123456 pid:94
P[ 1]  --> bc_state:BCHAN_ACTIVATED
P[ 1] Channel: mISDN/1-u50 hanguped new state:CLEANING
  == Spawn extension (default, 0171123456, 4) exited non-zero on 'SIP/11-b5fcfc20'
    -- Executing Hangup("SIP/11-b5fcfc20", "") in new stack
  == Spawn extension (default, h, 1) exited non-zero on 'SIP/11-b5fcfc20'
 Extension Changed 11 new state Idle for Notify User 14
 Extension Changed 11 new state Idle for Notify User 13
 Extension Changed 11 new state Idle for Notify User 12
 Extension Changed 11 new state Idle for Notify User 15
 Extension Changed 11 new state Idle for Notify User 19
 Extension Changed 11 new state Idle for Notify User 10
 Extension Changed 11 new state Idle for Notify User 11
P[ 1] ec_disable65*CLI>
P[ 1] Sending Control ECHOCAN_OFF
P[ 1] I IND :RELEASE oad: dad: pid:94 state:CLEANING
P[ 1] hangup_chan
P[ 1] No need to queue hangup
P[ 1] Cannot hangup chan, no ast
P[ 1] release_chan: bc with l3id: 90032
P[ 1] I SEND:RELEASE_COMPLETE oad: dad: pid:94
P[ 1]  --> bc_state:BCHAN_CLEANED
Mit "Wegdrücken" am Handy kann ich es nicht gescheit probieren, weil seit dem Rumpfuschen an der extensions.conf asterisk wohl nicht mehr erkennt, dass der angerufene Handyteilnehmer auf ablehnen gedrückt hat und es im Hörer ders SIP-Phones beständig weiter-tutet. Aber das ist ein anderes Problem ;-)

--edit--

Nachdem ich chan_misdn auf rc29 upgedatet habe, geht a bissl was weiter. Allerdings kann ich noch keinen Zusammenhang erkennen. Ich beobachte und melde Neuerungen.
Code:
-- Executing NoOp("SIP/11-09af11e0", "Externen Teilnehmer anrufen und ggfls. AutoClip setzen") in new stack
    -- Executing Set("SIP/11-09af11e0", "NUMMER=0171xx") in new stack
    -- Executing Set("SIP/11-09af11e0", "CALLERID(num)=089xx") in new stack
    -- Executing Dial("SIP/11-09af11e0", "mISDN/g:incoming/0171xx") in new stack
P[ 1] * CALL: g:incoming/0171xx
P[ 1] I SEND:SETUP oad:089xx dad:0171xx pid:17
    -- Called g:incoming/0171xx
P[ 1] I IND :SETUP_ACKNOWLEDGE oad:089xx dad:0171xx pid:17 state:CALLING
P[ 1] channel already in use:1
P[ 1] I IND :PROCEEDING oad:089xx dad:0171xx pid:17 state:CALLING_ACKNOWLEDGE
    -- mISDN/1-u10 is proceeding passing it to SIP/11-09af11e0
P[ 1] channel already in use:1
P[ 1] I IND :ALERTING oad:089xx dad:0171xx pid:17 state:PROCEEDING
    -- mISDN/1-u10 is ringing
P[ 1] I IND :DISCONNECT oad:089xx dad:0171xx pid:17 state:ALERTING
P[ 1]  --> Inband Info Avail, not sending RELEASE
    -- mISDN/1-u10 is busy
P[ 1] * IND : HANGUP    pid:17 ctx:incoming dad:017xx oad:0171xx State:DISCONNECTED
P[ 1] I SEND:RELEASE oad:089xx dad:0171xx pid:17
  == Everyone is busy/congested at this time (1:1/0/0)
P[ 1] I IND :RELEASE_COMPLETE oad: dad: pid:17 state:CLEANING
P[ 1] Cannot hangup chan, no ast
Feb  9 11:33:47 WARNING[10385]: pbx.c:2415 __ast_pbx_run: Timeout, but no rule 't' in context 'default'
    -- Executing Hangup("SIP/11-09af11e0", "") in new stack
  == Spawn extension (default, h, 1) exited non-zero on 'SIP/11-09af11e0'
war vorher noch ein "We have no inband Data, the other end must create ringing" zu erkennen, kommt da jetzt wenigstens kein Gemecker und ich erhalte ein paar Zeilen weiter "Inband Info Avail, not sending RELEASE". Allerdings stört mich das "Cannot hangup chan, no ast". Evtl. kann deshalb das Makro nix auswerten... Nur ein Gedanke
 
Zuletzt bearbeitet:
ein dem context der raus ruft fehlt die h extension

exten => h,1,Macro(setAutoCliprouting)

entscheidet ob gespeichert wird oder nicht
 
Ok, diese Zeile hab ich nun in den default-context geschrieben. Jetzt geht es!
Danke!
 

Neueste Beiträge

Statistik des Forums

Themen
244,872
Beiträge
2,219,904
Mitglieder
371,593
Neuestes Mitglied
Häuslebauer_BW
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.