Weiterleitung von FN auf Handy, callback vom Handy auf Asterisk mit Zusammenschalt.

basejumper

Neuer User
Mitglied seit
10 Jun 2008
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich wuerde gerne eingehende Anrufe, die ueber das Festnet an mein Handy weitergeleitet werden, durch callback des Handies an Asterisk, zum Laufen bringen.

Also:
1.eingehender externer Anruf ans Festnetz
2. Weiterleitung des Anrufs ans Handy
3.Nummer wird signalisiert, Handy lehnt ab, Asterisk haelt die Verbindung
4.Callback Signalisierung, Handy ruft zurueck
5.Asterisk schaltet Handy und Anrufer zusammen.

Bei http://www.mobil-treff.de/ habe ich dazu nichts gefunden was Asterisk direkt betritfft wie im Thread zuvor beschrieben.

Also Asterisk Beispiel Configs waeren hier super.

Vielen Dank schonmal fuer Eure Hilfe und Zeit
 
Verstehe ich das richtig, A Teilnehmer soll in der Asterisk gehalten werden, Handy bekommt einen Ping anruf, ruft dann die Asterisk an und wird mit A Teilnehmer verbunden?

Evt geht das ja mit der MeetMe Funktion. Der Anrufer wird in den Raum gestellt und du landest auch darin, man kann das ganze ja auch zeitverzögert machen jenachdem wie lange das wählen dauert.
 
Zuletzt bearbeitet:
eine fertiege anleitung gibt es schon, aber nicht für asterisk.
Zu die nennen das Base homezone, schau hier. http://www.mobil-treff.eu/

Kannst dich ja mal ransetzten und einen anfang machen helfe dir gerne bei der vollendung.
 
So habe mich gleich mal dran gemacht.
Erscheint mir nicht all zu schwer.

Hier die Meetme.conf
Code:
[rooms]
conf => 1234

Und die wichtigen teile aus der Extension.conf:
Code:
[isdn]
;exten => 2000,1,misdn_set_opt(!e:vt0) 

exten => 8777,1,Set(FROM_DID=8777)
exten => 8777,n,Answer()
exten => 8777,n,Dial(mISDN/g:ISDNAnschluss/016216577932,6,m(test))
exten => 8777,n,MeetMe(1234)

exten => 3412,1,Set(FROM_DID=3728412)
exten => 3412,n,Answer()
exten => 3412,n,NoOP(${CALLERID(num)})
exten => 3412,n,GotoIf($[${CALLERID(num)} = 016216577932]?ja:nein)

exten => 3412,n(ja),MeetMe(1234,A)

exten => 3412,n(nein),Playback(tt-monkeys)
exten => 3412,n,Hangup()

Somit mache ich einen Ping Call und beide sind dann in der Konferenz drinne sobald ich zurückrufe.
So sollte es sehr gut klappen. Das einzigste was noch fehlt ist eine Beschränkung auf 2 Calls in der Konferenz. Ob das geht weiß ich nicht.
 
Zuletzt bearbeitet:
Der erste teil kommt in die Extensions, du must einfach nur noch deine nummer ersetzten am anfang,
natürlich darfst du diese auch nicht unterdrücken sonst ergibt das ja keinen sinn ;)
Die audio Datein must du auch noch ändern da ich gerade in der Bahn sitzte konnte ich jetzt die richtiegen ringtöne nicht raussuchen.
Ach ja nen nettes sache währe auch noch wenn du den Musik on hold also der Parameter M bei Meetme dir selber anlegst so kannst du anstatt musik ja eine druchsgaen machen,
wie z.B. warten sie einen Augenblick sie werden verbunden.....
Da mit den Parametern d gearbeitet wird ist die Konferenz Dynamisch, also braucht nicht angelegt werden in der meetme.conf

Desweiteren muss in der asterisk DB oder wie auch immer die heist ein eintrag gemacht werden

geht entweder über die CLI oder

du rufst dich an und machst das über die Extensions.conf exten => s,n,Set(DB(ANZAHL/ANRUF=0)

Extensions.conf


Code:
[eingehende-nummer]
exten => s,1,GotoIf($[017733333= ANSWER]?50,1:nein) ;deine nummer (017733333) wenn die ist übergebe zu 50
exten => s,n(nein),NoOP(${DB(ANZAHL/ANRUF)} personen sind in der leitung)
exten => s,n,GotoIf($[ ${DB(ANZAHL/ANRUF)} = 0]?ja:70,nein) ;prüfe ob jemand schon wartet
exten => s,n(ja),System(mv /tmp/meinenummer.call /var/spool/asterisk/outgoing/) ; wenn keiner wartet übergebe callfile
exten => s,n,Set(DB(ANZAHL/ANRUF)=${MATH(${DB(ANZAHL/ANRUF)}+1,int)})  ;setzte nummer auf wartet
exten => s,n,NoOP(${DB(ANZAHL/ANRUF)} ----)
exten => s,n,Answer() ; nimmt denn call an
exten => s,n(meet),MeetMe(1234,dM) ;übergibt in die meetme
exten => s,n,Hangup()

exten => 50,1,GotoIf($[ ${MATH(${DB(ANZAHL/ANRUF)} = 1]?s,meet:nein) ;schaut ob die person noch da ist und 
exten => 50,n(nein),Playback(der teilnehmern hat schon aufgelegt.wav)  ;wenn nicht da ist wird audio datei abgespielt
exten => 50,n,Goto(h,nein)

exten => 70,1(nein),Answer()
exten => 70,n,Playback(besetztzeichen.wav) ;ka wie das heist im moment
exten => 70,n,Goto(h,nein)

exten => h,1,Set(${DB(ANZAHL/ANRUF)}=${MATH(${DB(ANZAHL/ANRUF)}-1,int)}) 
exten => h,n(nein),Hangup()




Hier die callfile diese kannst du hinlegen wo du willst must nur weiter oben den link anpassen.
In meinem Beispiel /tmp/meinenummer.call


;Hier die callfile

Code:
Channel: SIP/017733333@sipgate
Callerid: 00387yyyyyy 
Context: hangup_test 
Extension: s 
SetVar: CALLERIDNUM=00387yyyyyy 
MaxRetries: 1 
Retrytime: 30 
WaitTime: 10 
Priority: 1



Viel Spaß, Ich hoffe der skript funktioniert konnte ihn selber noch nicht ausprobieren da ich im moment noch unterwegs bin ...


Das ganze kann man ja auch mit mehreren machen, also große konferenzen, mit erinnerung usw ^^
 
Zuletzt bearbeitet:
Hi Leute,

sorry war einige Zeit nicht da, deshalb habe ich eure Antworten erst jetzt gerade gesehen.

Vielen Dank schonmal dafuer.Werde es mal ausprobieren und dann hier im Forum nochmal schreiben wie es gelaufen ist.Kann aber ein bischen dauern.

Jedenfalls nochmal danke und bis dann

base
 
Hast Du es inzwischen getestet?
 
Hi,

ich bin auch grade auf der Suche nach solch einer Lösung, habe den Thread hier per Zufall gefunden :)

Ich werds gleich mal ausprobieren - mir ist nur noch nicht alles klar - muss da erstmal durchblicken.

gruß
micha
 
Schrei wenn es nicht geht dann helfe ich dir ;)
 
@ Fredjam

ok - fang ich gleich mal mit an - danke :)

in der meinenummer.call gibt es:

Callerid: 00387yyyyyy

und

SetVar: CALLERIDNUM=00387yyyyyy


Ich bin ebenfalls bei sipgate - was hat es damit auf sich - sprich welche Nummer muss ich da eintragen ? Die unter der ich bei Sipgate angemeldet bin, in meinem Falle eine 01801...... ?

------------

Dann eine ganz banale Frage für die ich mich eigentlich schäme, aber ich finde nichts zu dem Thema:

Code:
exten => 746XXXX,1,Dial,SIP/30|30|r
exten => 746XXXX,2,Goto,r-${DIALSTATUS}|1
exten => r-BUSY,1,voicemail,b30
exten => r-BUSY,2,Hangup
exten => r-NOANSWER,1,voicemail,u30
exten => r-NOANSWER,2,Hangup

das ist das Pattern für eingehende Anrufe, in dem ich Asterisk mitteile einen eingehenden Anruf auf die 30 ( in meinem Fall zum testen ein Softphone) zu schicken.

Funktioniert natürlich.

Wie bring ich Asterisk aber nun bei das er einen extern auflaufenden Anruf einfach an eine interne Nummer schicken soll ? Also nicht die 30 (Softphone), sondern bspw. auf diesen Konferenzraum der intern bereits erreichbar ist ?

Code:
[intern]
exten => 5555,1,Answer()
exten => 5555,n,Wait(1)
exten => 5555,n,Playback(conf-thereare)
exten => 5555,n,MeetMeCount(1234)
exten => 5555,n,Playback(conf-peopleinconf)
exten => 5555,n,MeetMe(1234)
exten => 5555,n,Hangup()

gebe ich oben nach "Dial" einfach die 5555 an funktioniert das nicht. Ist bestimmt voll banal, aber das raff ich nicht und finde auch nichts dazu ?

Würde mich freuen wenn du mir an den zwei Stellen schon mal weiterhelfen würdest :)

gruß
micha
 
Also die
Callerid: 00387yyyyyy
SetVar: CALLERIDNUM=00387yyyyy

diese beiden sollten am besten die festnetz nummer die du bei sipgate hast.
bei mir ist das eine 0211xxxxxx nummer....

und dein 2tes problem ist auch ganz einfach.

einfach mit dem befehl goto

also das sieht dann so aus.

[zentrale]
exten => 746XXXX,1,Answer()
exten => 746XXXX,n,Goto(intern,5555,1)



so einfach ist das ;)

http://www.das-asterisk-buch.de/2.1/programmierer-howto.html#programmierer-howto-labels-und-goto
 
@ Fredjam

Ich sag ja -manchmal sieht man den Wald vor lauter Bäumen nicht :)
Ich danke dir.

Das Problem ist das ich jetzt gar nicht testen kann, weil ich grade bemerkt als ich die meinenummer.call getestet habe, das Asterisk den Call munter aufbaut, aber wenn ich den Call dann beende klingelt es munter weiter !?!?!

[Mar 10 16:09:13] WARNING[4908]: chan_sip.c:13056 handle_response: Remote host can't match request CANCEL to call '[email protected]'. Giving up.

http://www.ip-phone-forum.de/showth...hlight=Remote+host+can't+match+request+CANCEL

Ich hab gelesen das das Problem wohl nicht sehr oft vorkommt, und einige sagen man solle ein 1.06er aufsetzen.

http://www.ip-phone-forum.de/showthread.php?p=1254311

in dem Thread nutzt einer die Vorgängerversion von meiner (1.4.23.1)

Muss ich mal sehen ob ich ein 1.06er installiere oder noch eine Vorgängerversion ?
 
@ Fredjam

also - nachem ich nun das Problem gelöst habe mit 1.4 (es klingelt weiter trotz auflegen) und heute bei 1.6 rausgefunden habe warum kein Call eingeht hab ich die letzte Stunde schon mal den eigentlichen Ping Call ausführen lassen, also per Hand in das spool Verzeichnis geschoben.

Das funzt schon mal :)

Morgen früh geh ich mal bei und versuch den Rest noch hinzubekommen, komme bestimmt nochmal mit Fragebn um die Ecke :rolleyes:
 
@ Fredjam

Code:
  == Using SIP RTP CoS mark 5
    -- Executing [XXXXX@von-voip-provider:1] Goto("SIP/XXXXX-b78561f0", "eingehende Nummer,s,1") in new stack
    -- Goto (eingehende Nummer,s,1)
    -- Executing [s@eingehende Nummer:1] GotoIf("SIP/XXXXX-b78561f0", "0?50,1:nein") in new stack
    -- Goto (eingehende Nummer,s,2)
    -- Executing [s@eingehende Nummer:2] NoOp("SIP/XXXXX-b78561f0", " personen sind in der leitung") in new stack
[Mar 13 16:02:39] WARNING[6436]: ast_expr2.fl:441 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
  = 0
  ^
[Mar 13 16:02:39] WARNING[6436]: ast_expr2.fl:445 ast_yyerror: If you have questions, please refer to doc/tex/channelvariables.tex in the asterisk source.
    -- Executing [s@eingehende Nummer:3] GotoIf("SIP/XXXXX-b78561f0", "?ja:70,nein") in new stack
    -- Goto (eingehende Nummer,70,1)
    -- Executing [70@eingehende Nummer:1] Answer("SIP/XXXXX-b78561f0", "") in new stack
    -- Executing [70@eingehende Nummer:2] Playback("SIP/XXXXX-b78561f0", "besetzt") in new stack
    -- <SIP/XXXXX-b78561f0> Playing 'besetzt.gsm' (language 'de')
    -- Executing [70@eingehende Nummer:3] Goto("SIP/XXXXX-b78561f0", "h,nein") in new stack
    -- Goto (eingehende Nummer,h,2)
    -- Executing [h@eingehende Nummer:2] Hangup("SIP/XXXXX-b78561f0", "") in new stack
  == Spawn extension (eingehende Nummer, h, 2) exited non-zero on 'SIP/XXXXX-b78561f0'
[Mar 13 16:02:41] WARNING[6436]: func_math.c:188 math: Supply all the parameters - just this once, please
    -- Executing [h@eingehende Nummer:1] Set("SIP/XXXXX-b78561f0", "=") in new stack
    -- Executing [h@eingehende Nummer:2] Hangup("SIP/XXXXX-b78561f0", "") in new stack
  == Spawn extension (eingehende Nummer, h, 2) exited non-zero on 'SIP/XXXXX-b78561f0'

Hi,

das ist das Ergebnis - komme da nicht so recht weiter - hast du eine Idee was es noch sein kann ? Habe ihn mit dem GOTO Befehl dann in eingehende Nummer geschickt.

Anbei nochmal die Einträge in der extensions.conf:

Code:
[von-voip-provider]
;exten => XXXXX,1,Dial(SIP/2000&SIP/2001,20)
;exten => XXXXX,2,VoiceMail(2000,u)
exten => XXXXX,1,Goto(eingehende Nummer,s,1)

[eingehende Nummer]
exten => s,1,GotoIf($[zuerkennendeNummer= ANSWER]?50,1:nein) ;deine nummer (017733333) wenn die ist �bergebe zu 50
exten => s,n(nein),NoOP(${DB(ANZAHL/ANRUF)} personen sind in der leitung)
exten => s,n,GotoIf($[ ${DB(ANZAHL/ANRUF)} = 0]?ja:70,nein) ;pr�fe ob jemand schon wartet
exten => s,n(ja),System(mv /tmp/meinenummer.call /var/spool/asterisk/outgoing/) ; wenn keiner wartet �bergebe cexten => s,n,Set(DB(ANZAHL/ANRUF)=${MATH(${DB(ANZAHL/ANRUF)}+1,int)})  ;setzte nummer auf wartet
exten => s,n,NoOP(${DB(ANZAHL/ANRUF)} ----)
exten => s,n,Answer() ; nimmt denn call an
exten => s,n(meet),MeetMe(1234,dM) ;�bergibt in die meetme
exten => s,n,Hangup()

exten => 50,1,GotoIf($[ ${MATH(${DB(ANZAHL/ANRUF)} = 1]?s,meet:nein) ;schaut ob die person noch da ist und
exten => 50,n(nein),Playback(aufgelegt)  ;wenn nicht da ist wird audio datei abgespielt
exten => 50,n,Goto(h,nein)

exten => 70,1(nein),Answer()
exten => 70,n,Playback(besetzt) ;ka wie das heist im moment
exten => 70,n,Goto(h,nein)

exten => h,1,Set(${DB(ANZAHL/ANRUF)}=${MATH(${DB(ANZAHL/ANRUF)}-1,int)})
exten => h,n(nein),Hangup()

Er landet immer in "70" - egal ob die Nummer übereinstimmt oder nicht :confused:
 
Also da hier ja 2 Ansätze in dem Thread enthalten sind, definiere ich nochmal was ich eigentlich basteln will :)

Teilnehmer X ruft auf einer Nummer an - dessen Rufnummer völlig egal, ich spiele ihm dann ein Soundfile vor: "Bitte warten, ich verbinde Sie".

Sobald Teilnehmer X also gehalten wird, verschiebe ich das File meinenummer.call. Mein Handy klingelt einmal und Asterisk legt wieder auf. Ich sehe die Nummer vom Asterisk und rufe mit meiner von Asterisk angerufenen Handynummer zurück und sobald mein Call reinkommt, werde ich mit dem Teilnehmer X verbunden.

Das ist eigentlich das was ich basteln möchte.

Wenn ich deinen Source richtig verstehe muss bereits jemand in der Konferenz sein, oder ?
 
Ich hab mal versucht das so zu lösen das ich intern eine Nummer kreiert habe und die auch in den Konferenzraum 1234 geleitet habe.

bevor ich also jetzt den Call reingebe ist jemand bereits im Raum und "wartet" weil ich mit nem Softphone dahinverbunden habe.

Da scheint aber ein Syntaxfehler zu sein, den ich nicht erkenne:

Code:
    -- Executing [s@eingehende-nummer:2] NoOp("SIP/XXXXX-095cb9c0", " personen sind in der leitung") in new stack
[Mar 14 13:35:44] WARNING[8322]: ast_expr2.fl:435 ast_yyerror: ast_yyerror():  syntax error: syntax error, unexpected '=', expecting $end; Input:
  = 0
  ^
[Mar 14 13:35:44] WARNING[8322]: ast_expr2.fl:439 ast_yyerror: If you have questions, please refer to doc/tex/channelvariables.tex in the asterisk source.

Die Zeile davor führt er scheinbar noch aus.

dann kommt dieser syntax error :confused:


Hat noch einer eine Idee ?
 
@ Fredjam

Ich vermute es hat mit dieser Aussage hier von dir zu tun:


"Desweiteren muss in der asterisk DB oder wie auch immer die heist ein eintrag gemacht werden

geht entweder über die CLI oder

du rufst dich an und machst das über die Extensions.conf exten => s,n,Set(DB(ANZAHL/ANRUF=0)"

Aber da versteh ich nicht was gemeint ist ?
 
bin vielleicht wieder ein stück weiter,...

hab die Zeile mal geändert in:

Code:
exten => s,n,GotoIf($[ ${DB(ANZAHL/ANRUF)} == 0]?ja:70,nein)

also 2 "Gleichheitszeichen" hingesetzt, nun geht der Call durch und wird auch verbunden mit demjenigen der in der Konferenz wartet.

Allerdings ist es ihm jetzt auch egal WER da anruft, also es findet keine Überprüfung statt auf die Nummer, er lässt jeden in die Konferenz.

Ich bin kein Progger - merkt man das :p
 
Habs jetzt erstmal aufgegeben :)

Komme nicht so recht weiter - hat noch einer eine Idee ?
 
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.