Wie kann ich einen Anruf kostenlos abweisen?

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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
 

udosw

Aktives Mitglied
Mitglied seit
20 Mrz 2004
Beiträge
1,114
Punkte für Reaktionen
0
Punkte
36
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/[email protected]" > ${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
 

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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 :)
 

skid

Neuer User
Mitglied seit
17 Feb 2006
Beiträge
67
Punkte für Reaktionen
0
Punkte
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..."
 

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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.
 

skid

Neuer User
Mitglied seit
17 Feb 2006
Beiträge
67
Punkte für Reaktionen
0
Punkte
0
Naja ich habe so die Vermutung, dass es an meiner GMX Flatrate liegt. Ich meine, dass es mit Sparvoip mal korrekt funktioniert hat.
 
O

oliverbuck

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

skid

Neuer User
Mitglied seit
17 Feb 2006
Beiträge
67
Punkte für Reaktionen
0
Punkte
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
 

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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.
 

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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
 

divB

Mitglied
Mitglied seit
14 Jul 2006
Beiträge
324
Punkte für Reaktionen
0
Punkte
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?
 

merkc

Neuer User
Mitglied seit
6 Jan 2006
Beiträge
135
Punkte für Reaktionen
0
Punkte
16
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/[email protected]" >> $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/[email protected]" >> $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/[email protected]" >> $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 #
 

Zurzeit aktive Besucher

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
233,347
Beiträge
2,033,055
Mitglieder
351,917
Neuestes Mitglied
regist_for_photo_fuck