.titleBar { margin-bottom: 5px!important; }

AutoClipRouting auch für's Festnetz?

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von tomster, 6 Feb. 2007.

  1. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    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...
     
  2. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    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
     
  3. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    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
     
  4. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    ich werde heute abend mal ein bsp. verfassen
     
  5. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    Hui! Das wär ja die Bombe!

    Ich sag jetzt schon Mal Danke.
     
  6. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    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
     
  7. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    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
     
  8. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    #8 tomster, 8 Feb. 2007
    Zuletzt bearbeitet: 8 Feb. 2007
    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.
     
  9. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    hast du dazu mal einen konsolenlog?
     
  10. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    #10 tomster, 9 Feb. 2007
    Zuletzt bearbeitet: 9 Feb. 2007
    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
     
  11. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    ein dem context der raus ruft fehlt die h extension

    exten => h,1,Macro(setAutoCliprouting)

    entscheidet ob gespeichert wird oder nicht
     
  12. tomster

    tomster Mitglied

    Registriert seit:
    6 Dez. 2004
    Beiträge:
    238
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    bavaria superior
    Ok, diese Zeile hab ich nun in den default-context geschrieben. Jetzt geht es!
    Danke!