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

Wie kann ich einen Anruf kostenlos abweisen?

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von merkc, 21 Sep. 2006.

  1. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    Mein Sohn ist seit ein paar Tagen im Internat. Ich würde ihm gerne die Möglichkeit geben, dass er von seinem Handy aus einen "Lockruf" an meinen * macht, damit * ihn dann in der Telefonkabine zurückrufen kann. (die telefonkabine hat keine callerID)
    jetzt soll das ganz so aussehen, dass er grad ein besetzt zeichen bekommt.

    mein derartiger versuch klappt nicht. tote hose auf der anruferseite, ausserdem scheinen dabei kosten zu entstehen.


    extensions.conf:

    [callback-in]
    exten => 123232,1,GotoIf($[${CALLERIDNUM} = Anonymous]?callback-withoutcallid,s,1:callback-withcallid,s,1)

    [callback-withcallid]
    exten => s,1,AGI(callback-bash.agi)
    exten => s,2,Wait,1
    exten => s,3,NoOp(Jetzt sollte das Besetzt Zeichen kommen...)
    exten => s,4,Congestion
    exten => s,5,Busy
    exten => s,6,Hangup
    ;exten => s,102,Congestion
    exten => s,105,Hangup
    exten => s,106,Busy

    wahrscheinlich muss es ganz anders aussehen... aber immerhin läuft die callback geschichte jetzt :)

    thnx
    chris
     
  2. udosw

    udosw Aktives Mitglied

    Registriert seit:
    20 März 2004
    Beiträge:
    1,114
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    Hannover
    Hallo Merkc,

    ich habe das so gelöst (bitte verwende auch die Code-Tags, das #-Zeichen im Editor) - ich habe mal deine Contect-Namen eingesetzt:

    Code:
    [callback-in]
    exten => s,1,Ringing
    exten => s,n,NoOp(${CALLERIDNUM})
    exten => s,n,Set(callfile=/etc/asterisk/call/${TIMESTAMP}.call)
    exten => s,n,system(echo "Channel: Sip/XXXXXXXXX@dein-provider" > ${callfile})
    exten => s,n,system(echo "Context: callback_now"           >> ${callfile})
    exten => s,n,system(echo "Extension: s"                         >> ${callfile})
    exten => s,n,system(echo "MaxRetries: 3"                       >> ${callfile})
    exten => s,n,system(echo "RetryTime: 5"                        >> ${callfile})
    exten => s,n,system(echo "WaitTime:                            >> ${callfile})
    
    exten => s,n,system(/etc/asterisk/call/touchplus ${callfile})
    
    exten => s,n,system(mv ${callfile} /var/spool/asterisk/outgoing)
    
    exten => s,n,SetVar(PRI_CAUSE=21) ;21 = Rejected
    exten => s,n,Hangup
    
    [callback_now]
    exten => s,1,Answer
    exten => s,n,DigitTimeout,5
    exten => s,n,ResponseTimeout,10
    exten => s,n,DISA,no-password|intern
    exten => s,n,Hangup
    
    Entscheidend ist das Ringing (klingeln nach aussen signalisieren) und etwas später das Hangup. Das entspricht dann dem "Wegdrücken" beim Handy. PRI_CAUSE ist Bristuff spezifisch. Voraussetzung ist natürlich, dass der Ruf über ISDN reinkommt.

    Datei /etc/asterisk/call/touchplus:
    Code:
    #! /bin/bash
    touch -t `awk "BEGIN{t = systime()+20;print strftime(\"%Y%m%d%H%M.%S\",t)}"` $1
    
    Der Contect 'callback_now' ruft dann dort an und stellt einen Wählton zur Verfügung.

    Udo
     
  3. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    cool. danke.
    ich verwende ausschliesslich SIP, daher kann ich die ISDN Einstellungen nicht überprüfen. Aber ein:

    exten => s,1,Ringing
    exten => s,n,AGI(whatever.agi)
    exten => s,n,Busy
    exten => s,n,Hangup

    funzt auch. ... das mit dem vorherigen Ringing kannte ich noch nicht. Nochmals vielen Dank dafür!
    Deine awk / DISA Lösung ist gut, nur in meinem Fall leider nicht brauchbar, da ich zwei Telefonzellen in einem Internat zurückrufen muss :) ... und somit brauche ich eine allgemeine und eine ganz spezielle Lösung, die nur auf die Bedürfnisse meines Sohns ausgerichtet sind :)

    Die DISA Variante verwende ich bereits meine Handyflat, um günstig ins Ausland telefonieren zu können :)

    thnx again,
    chris (merk) -- daher das merkc :)
     
  4. skid

    skid Neuer User

    Registriert seit:
    17 Feb. 2006
    Beiträge:
    67
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Das mit Ringing ist mir auch neu. Wenn ich das jedoch einbaue legt er bei mir am Handy (von dort initiiere ich den Callback) nicht auf, sondern es kommt die Ansage "Der gewünschte Gesprächspartner ist zur Zeit nicht erreichbar..."
     
  5. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    Hab's noch nicht von einem dt. Handy aus probieren können. Bin mal wieder "in den Alpen" :) ... werde es erst am kommenden Wochenende ausprobieren können... Oktoberfestzeit :)
    chris
    PS: von einer dt. voip festnetznummer (sipgate) funzt es auf jeden fall.
     
  6. skid

    skid Neuer User

    Registriert seit:
    17 Feb. 2006
    Beiträge:
    67
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Naja ich habe so die Vermutung, dass es an meiner GMX Flatrate liegt. Ich meine, dass es mit Sparvoip mal korrekt funktioniert hat.
     
  7. oliverbuck

    oliverbuck Guest

    Mit Carpo als Lockruf-Nr. bah ich die besten Erfahrungen gemacht. GMX ging bis im Juni auch gut, dann aber nicht mehr...
     
  8. skid

    skid Neuer User

    Registriert seit:
    17 Feb. 2006
    Beiträge:
    67
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Naja ich hab das bei GMX jetzt mit einem "Busy" vor dem "Hangup" gelöst, so zeigt mein K750i wenigstens ein Besetzt an, aber leider geht mein Handy eben nicht komplett auf den Startbildschirm zurück, so dass ich immer noch eine Taste drücken muss, bevor der Rückruf reinkommen kann. Bei nem Samsung (Modell weiß ich grad leider nicht) geht das jedoch, das scheint wohl mit dem Belegt anders umzugehen?

    Naja viell. muss ich für den Lockruf einfach mal nen anderen Anbieter einstellen.

    Grüße Skid
     
  9. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    Am Donnerstag war ja hier im Form alles mögliche über die nicht-Erreibarbkeit von 1und1 zu lesen... war ja bei mir auch der Fall. Nundenn. 1und1 und GMX sind der selbe Konzern... und seit Donnerstag will er meine DTMF-Töne nicht mehr akzeptieren.
    Die einzige Einschränkung, die dazu bemerken muss: Am Mittwoch war ich noch in München, nun bin ich wieder in der Schweiz. Bloss: Ich verwende hier exakt die gleiche Hardware, nur dass ich über andere Ports gehe... Davon sollte es aber nicht abhängen.
    Ich komme erst in ca. 8 Tagen wieder nach Muc... also bis dann kann ich nichts konkretes sagen. NUR: Sparvoip akzeptiert definitiv keine DTMF Töne. Da habe ich rumgetestet, bis zum Umfallen.
    gruss
    chris m.
     
  10. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    Widerruf Sparvoip akzept nicht...

    Es ist schon total verrückt, wie das ganze von Asterisk aufgenommen wird.

    Eine Anrufweiterleitung! (sipgate.de) mit DISA funktioniert nur mit dem 711er Codec und rfc2833. Aber Achtung! gleicht kommts... unten weiterlesen!

    Ein Rückruf über Sparvoip oder einen anderen Provider funktioniert nur mit dem 711er Codec und rfc=inband. Ansonsten erkennt er die DTMF Töne nicht an.

    im voip-info.org steht, dass wenn man DTMF Töne senden will, der 2833er nicht geht, sondern nur der inband dtmfmode. Alles schön und gut...
    Die Praxis erweist sich, dass wenn ich irgendwo dtmfmode=rfc2833 drinnen habe, KEIN Provider später mehr mit dtmfmode=inband arbeitet... saudoof.

    Gelöst habe ich das ganze, indem ich jetzt überall dtmfmode=inband stehen habe UND den asterisk NEU STARTEN musste. Ein einfaches sip reload resp. extensions reload war nicht genug. Das Zeugs muss sich also irgendwo "festsetzen" im System.

    Damit ich jetzt aber wieder die Anrufweiterleitung machen kann, brauche ich beim DISA Befehlt den rfc2833 (obwohl im voip-info.org steht, dass der keine DTMF Töne mag....).

    gelöst habe ich das ganze folgendermassen:
    exten => s,1,Answer
    exten => s,2,Set(LANGUAGE()=de)
    exten => s,3,SIPDtmfMode(rfc2833) ; <---------------
    exten => s,4,Playback(please-enter-your)
    exten => s,5,Playback(telephone-number)
    exten => s,6,Set(TIMEOUT(response)=10)
    exten => s,7,Set(TIMEOUT(digit)=5)
    exten => s,8,DISA,no-password|dialout_now
    exten => s,9,Hangup
    exten => s,109,Busy




    PS: Das mit dem Hangup beim Callback / Rückruf funktioniert übrigens jetzt wieder nicht mehr... FRUST !

    gruss
    chris
     
  11. divB

    divB Mitglied

    Registriert seit:
    14 Juli 2006
    Beiträge:
    324
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    @udosw: Darf ich fragen, wie das funktionieren soll?
    Verstehe ich das richtig, dass es damit möglich sein soll, über den Asterisk kostenlos zu telephonieren? Und das, obwohl z.B. eine Telephonzelle keine CallerID hat?
    Das wäre phantastisch und würd ich mir auch "für Notfälle" einbauen, falls ich kein Handy/Guthaben/Geld mithab.

    Aber ich frag mich wie das gehen soll. Der Anruf kommt per ISDN rein. Das Ringing() signalisiert dem Anrufer ein einfaches Klingeln. Dann wird eine Callfile geschrieben, in der aber weder eine Nummer noch sonstwas drinnen steht, dann wird aufgelegt.

    Die Callfile springt eigentlich nur zu "callback_now". Wieso existiert hier ein Channel? Es wurde nichts gewählt!
    Und vor allem: es wird ein Answer() ausgeführt, d.h. der Gebührenzähler des Anrufenden müsste spätestens hier zum Laufnen anfangen oder?

    Geh ich richtig in der Annahme, dass hinter dem DISA noch die Dial()-Anweisung fehlt, die angerufen werden soll?
     
  12. merkc

    merkc Neuer User

    Registriert seit:
    6 Jan. 2006
    Beiträge:
    135
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Verwalter
    Ort:
    Luzern, München & NYC
    Hallo divB,
    also, der Anruf kommt vom HANDY rein, das natürlich eine CallerID aufzeigt.
    * Und gerade an dieser CallerID erkennt das AGI Script, dass es nicht das Handy, sondern die Telefonzelle zurückrufen soll.
    * Des weiteren arbeite ich derzeit ausschliesslich mit SIP und nicht mit ISDN.
    * Es fallen keine Gebühren an, da ich mit Sparvoip innerhalb Deutschlands telefoniere.
    * Beim Hinklingeln verwerde ich übrigens NICHT den Answer cmd.

    alles klar?
    gruss,
    chris

    PS: Was die anderen Jungs und Mädels da draussen verwenden, weiss ich natürlich nicht.


    Hier noch mein callback-bash.agi
    v-server:/var/lib/asterisk/agi-bin # more callback-bash.agi
    #!/bin/bash

    callbackAllow="/etc/asterisk/callback.settings"
    callpath="/var/spool/asterisk/tmp/"
    callfile=$callpath"call`date +%Y%m%d_%H%M%S`"
    date=`date +%Y%m%d-%H%M%S`
    logfile=/var/log/asterisk/full

    mkdir -p $callpath
    i=0

    read -a name

    while [ "${name[0]}" != "agi_callerid:" ]
    #while true
    do
    read -a name

    #debug info:
    #echo $date" : name[0]=${name[0]}" >> $logfile
    #echo $date" : name[1]=${name[1]}" >> $logfile

    i=`expr $i + 1`
    if [ $i -ge 20 ] ; then
    break
    fi
    done

    # debug infos hinzugefuegt
    search=
    rtest=
    ptest=
    callerid=
    #restricted=false
    ask4pass=false
    #callbackAllow=true

    # debug info:
    #echo $date" : name[0]=${name[0]}" >> $logfile
    #echo $date" : name[1]=${name[1]}" >> $logfile

    #echo "Hier komme ich noch hin..." >> $logfile
    if [ ${name[0]} = "agi_callerid:" ] ; then

    # debug info:
    #echo "ich bin jetzt in der Zuteilung der Variabeln" >> $logfile

    callerid=`echo ${name[1]} | sed 's/+//g'`
    search=`grep "$callerid" $callbackAllow`
    rtest=`grep "restricted=true" $callbackAllow`
    ptest=`grep "ask4pass=true" $callbackAllow`

    # debug info:
    echo $date" : restricted=$restricted ; ask4pass=$ask4pass ; callerid=$callerid ; rtest=$rtest ; ptest=$ptest ; search=$search ; name=${name[0]} ; callbackAllow=$callbackAllow ; ende!" >> $logfile

    if [ -n "$rtest" ] && [ -n "$ptest" ]
    then
    restricted=true
    ask4pass=true
    password=`echo $search | sed 's/.*://g'`

    elif [ -z "$rtest" ] && [ -n "$ptest" ]
    then
    restricted=false
    ask4pass=true
    if [ -n "$search" ]
    then
    password=`echo $search | sed 's/.*://g'`
    else
    password=`grep "generalpass=" $callbackAllow | sed 's/.*=//g'`
    fi

    elif [ -n "$rtest" ] && [ -z "$ptest" ]
    then
    restricted=true
    ask4pass=false
    password="noPass"

    else
    restricted=false
    ask4pass=false
    password="noPass"
    fi


    echo -n $date" : restricted=$restricted ask4pass=$ask4pass" >> $logfile

    if [ $restricted == false ] || [ $search == 0987654321 ] # Hier muss dann die CallerID von Maximilian rein!
    then
    echo " : accepting incoming call from '$callerid'!" >> $logfile

    touch $callfile
    echo "Channel: Local/0123456789@callback-dial" >> $callfile
    echo "Callerid: $callerid" >> $callfile
    echo "Context: callback-go" >> $callfile
    echo "Extension: s" >> $callfile
    echo "MaxRetries: 0" >> $callfile
    echo "RetryTime: 10" >> $callfile
    echo "SetVar: ask4pass=$ask4pass" >> $callfile
    echo "SetVar: password=$password" >> $callfile

    sleep 5
    mv $callfile /var/spool/asterisk/outgoing
    echo "Ich bin fertig... Maxman Procedure 1" >> $logfile

    # touch $callfile
    # echo "Channel: Local/$callerid@callback-dial" >> $callfile
    # echo "Callerid: $callerid" >> $callfile
    # echo "Context: callback-go" >> $callfile
    # echo "Extension: s" >> $callfile
    # echo "MaxRetries: 4" >> $callfile
    # echo "RetryTime: 10" >> $callfile
    # echo "SetVar: ask4pass=$ask4pass" >> $callfile
    # echo "SetVar: password=$password" >> $callfile
    #
    # sleep 10
    # mv $callfile /var/spool/asterisk/outgoing
    # echo "Ich bin richtig... Maxman Procedure 2" >> $logfile

    elif [ $restricted == false ] || [ -n "$search" ]
    then
    echo " : accepting incoming call from '$callerid'!" >> $logfile

    touch $callfile
    echo "Channel: Local/$callerid@callback-dial" >> $callfile
    echo "Callerid: $callerid" >> $callfile
    echo "Context: callback-go" >> $callfile
    echo "Extension: s" >> $callfile
    echo "MaxRetries: 0" >> $callfile
    echo "RetryTime: 10" >> $callfile
    echo "SetVar: ask4pass=$ask4pass" >> $callfile
    echo "SetVar: password=$password" >> $callfile

    sleep 10
    mv $callfile /var/spool/asterisk/outgoing
    echo "Ich bin richtig... Maxman Procedure 3" >> $logfile
    else
    echo " : incoming call from '$callerid' rejected!" >> $logfile
    fi

    fi
    echo "Ende des Scripts" >> $logfile
    v-server:/var/lib/asterisk/agi-bin #