sip callback.php

ploieel schrieb:
Nur einen kleinen Fehler hat die Sache immer noch: Das Freizeichen steht nicht lange genug zur Verfügung, nur so etwa 8 Sekunden. Vielleicht doch noch irgendwo ein WAIT einfügen?

Da hilft z.B. ein Set(TIMEOUT(response)=30) in [dialout] einzubauen, allerdings nur in neueren Asterisk Versionen (1.2.x), ich weiß nicht genau wann das gefixed wurde, aber in 1.0.9 ging es damit noch nicht, weil bis dahin die TIMEOUT Angaben in DISA einfach ignoriert wurden. Hierzu habe ich aber auch schon etwas in diesem Thread geschrieben, man kann app_disa.c diesbzgl. ändern und Asterisk neu kompilieren. http://www.ip-phone-forum.de/showpost.php?p=353424&postcount=89 . Wie gesagt, bei neueren Asterisk Versionen nicht nötig.
 
Stefan8 schrieb:
Hi zusammen,
ich bin auch mit Feintuning beschäftigt:
1. Wie kriege ich eine größere Verzögerung hin, bis der (erste) Rückruf ausgelöst wird? Teilweise kriegt man noch gar kein Freizeichen signalisiert und dann kommt schon der Rückruf. Das müsste doch im Context ankommend vornedran mit Wait(10) gehen, oder?

Nein, das ist nicht praktikabel, weil Du dann auch 10 Sek. am Telefon bleiben müßtest, denn wenn Du vorher aufhängst beim "Lockruf" kommt er gar nicht mehr zum kopieren des callfiles, der Effekt wäre der gleiche wie ohne das Wait.

Das kann man nur mit einem workaround lösen, indem man zuerst ein callfile auslöst, welche eine local extension auf dem eigenen Server anruft und dort dann ein Wait(10) (oder wie lange auch immer gewartet werden soll) einbaut, nach dessen Ablauf dann das eigentliche callback file kopiert wird.

Beispiel:

zusätzliches callfile "stefan1" in /etc/asterisk/call/ manuell anlegen:
Code:
Channel: Local/5555@default
Context: default
Extension: 5555
MaxRetries: 0
RetryTime: 30
WaitTime: 60
Priority: 1

callfilestefan1 bleibt wie es ist, aber in [ankommend] muß jetzt das neue callfile kopiert werden und es muß im context [default] der extensions.conf einen zusätzlichen Eintrag geben, wo dann der tatsächliche Rückruf ausgelöst wird:

extensions.conf
Code:
[ankommend]
exten => 5855.../01754...,1,System(cp /etc/asterisk/call/stefan1 /var/spool/asterisk/outgoing/) 
exten => 5855.../01754...,2,Hangup 

[default]
exten => 5555,1,Answer
exten => 5555,2,Wait(10)
exten => 5555,3,System(cp /etc/asterisk/call/callfilestefan1 /var/spool/asterisk/outgoing/) 
exten => 5555,4,Hangup


2. Ich möchte Kurzwahlen für den (zweiten) Ruf einführen.
Also z.B. mit 711 auf [email protected], mit 712 auf 072..@gmx und mit 713 auf 070..@iax_voipjet.
Außerdem sollen für den "Rest", der nicht als Kurzwahl definiert ist, Patterns zum Einsatz kommen, um den jeweils günstigsten Provider nehmen zu können. Z.B. dus.net für Mobilanrufe, gmx für Festnetz und Voipjet für den Rest.
Btw: Gabs hier nicht mal einen Thread für Least-Cost-Routing?
Wäre suppi, wenn noch jemand einen Tipp dazu hätte.
Ich gehe im Moment davon aus, dass sich das alles in dialout_now abspielen muss.

Richtig, muß sich alles in [dialout_now] abspielen, z.B: so:

Code:
[dialout_now]

;Kurzwahlen
exten => 711,1,SetCallerID(dus.net Abgangsnummer, falls nötig)
exten => 711,2,Dial(SIP/0160...@dus,60,r) 

exten => 712,1,SetCallerID(49xxxxxxxx)
exten => 712,2,Dial(SIP/072...@gmx,60,r)

;Anrufe zu Mobiltelefonen
exten => _01[5-7].,1,SetCallerID(dus.net Abgangsnummer, falls nötig)
exten => _01[5-7].,2,Dial(SIP/${EXTEN}@dus,60,r)

;Anrufe zu deutschen Festnetznummern
exten => _0[2-9].,1,SetCallerID(49xxxxxxxx)
exten => _0[2-9].,2,ial(SIP/${EXTEN}@gmx,60,r)

;Anrufe international (ohne Nordamerika)
exten => _00[2-9].,1,SetCallerID(was Du willst)
exten => _00[2-9].,2,Dial(IAX2/accountnr@voipjet/011${EXTEN:2},60,r)

;Anrufe Nordamerika
exten => _001.,1,SetCallerID(was Du willst)
exten => _001.,2,Dial(IAX2/accountnr@voipjet/${EXTEN:2},60,r)

exten => h,1,Hangup

;"@dus", "@gmx" und "accountnr@voipjet" mit Einträgen in sip.conf / iax.conf abgleichen

Edit: Hat noch jemand eine Idee, wie man die CallerID bei Gmx ausblenden oder auf einen anderen Wert umsetzen kann? Sonst müsste ich für jede Kombination eine neue Nummer bei Gmx registrieren lassen.

Statt SetCallerID(49xxxxxxxx) schreibst Du, als Beispiel:

Code:
exten => _0[2-9].,1,Set(CALLERID(number)=49xxxxxxx)
exten => _0[2.9].,2,Set(CALLERID(name)=Anonymous)
exten => _0[2-9].,3,Dial(SIP/${EXTEN}@gmx,60,r)

Gruß,
Tin
 
Hey Tin,
hast Du evtl eine Idee zu meinen Fragen vorne?
Ciao
Stefan
 
Stefan8 schrieb:
Hey Tin,
hast Du evtl eine Idee zu meinen Fragen vorne?
Ciao
Stefan

Reicht Dir die Antwort noch nicht? lol
 
Hey Tin,
danke für die Info... Ich hatte natürlich noch vorher auf Aktualisieren gedrückt, und war nichts zu sehen :roll:
Da ist die Haltezeit im Proxy wohl ein bisserl zu lang eingestellt.
Vielen Dank, ich arbeite es gleich durch.
Ciao
Stefan
 
Hallo Tin;

jetzt geht das Callback wieder wie am Anfang dieses Threads. Ich habe ein Wait(10) eingefügt; es bewirkt, dass ich beim Rückruf 10 Sekunden auf das Freizeichen warten muss, bevor dann 10 Sekunden lang das Freizeichen zu hören ist. Innerhalb dieser sagen wir mal knapp 20 Sekunden sollte es möglich sein, die entsprechende Festnetznummer im Handyspeicher herauszusuchen oder einzutippen, und dann auf die grüne Taste für "anrufen" zu drücken.
Nochmals hier der Auszug aus dem entsprechenden context:

Code:
[dialout]
exten => s,1,Answer
exten => s,2,Wait(10)
exten => s,3,DISA,no-password|dialout_now
exten => s,4, Hangup
exten => s,102,Busy
exten => h,1,Hangup

Ich benutze immernoch das Fli4L-Asterisk von Jürgen Röllgen; Putty meldet:

Asterisk 1.0.7-BRIstuffed-0.2.0-RC8

Sobald es etwas neueres gibt, was zum dreier Fli4L passt, werde ich den Router mit Asterisk neu aufsetzen. Ich muss halt Geduld haben, weil ich die Unterstützung für die Capi-Karte UND die HFC-Karte brauche.

Nochmals herzlichen Dank für Deine Unterstützung.

EDIT:

Ich würde gern die andere von Dir vorgeschlagene Version nochmals testen, könnte das so gehen mit meiner Version 1.0.7 (wegen dem response timeout?):

Code:
[dialout]

exten => s,1,Answer
exten => s,2,SetVar(NR=) 
exten => s,3,ResponseTimeout(60) 
exten => s,4,WaitExten 

exten => _X,1,SetVar(NR=${NR}${EXTEN}) 
exten => _X,2,Goto(2,3) 

exten => *,1,Goto(2,2) 

exten => #,1,Dial(SIP/${NR}@gmx,60,tr) 

exten => t,1,Hangup
exten => h,1,Hangup

btw. wenn ich nerve, schlägst Du zu! ;-)

2. EDIT:

Sag bitte einmal (vll. etwas o.t.), könnte man eigentlich die Änderungen in der extensions.conf über winscp auf dem Router einfügen und dann den Asterisk neu starten lassen? Ich habe das ewige imonc-raufgelade und neustart vom Router satt; das dauert und dauert, und der Imonc schmiert immer wieder ab... ;-(

3. EDIT:

die zweite Variante will nicht funktionieren,

Code:
Feb  6 21:50:41 WARNING[6063]: chan_sip.c:6855 handle_response: Forbidden - wrong password on authentication for INVITE to '"50530" <sip:[email protected]>;tag=as13f63bd1'
    -- SIP/sipdiscount-ff00 is circuit-busy
  == Everyone is busy/congested at this time

Hier ist wohl noch etwas Feinarbeit nötig...

4. Edit:
Ja, über winscp sind Änderungen möglich. Ich habe jetzt erst einmal den Ausgangszustand über DISA wieder hergestellt, ohne den Router neu zu starten.

Mit der zweiten Variante (ohne DISA) will der Asterisk ein Passwort übergeben haben, mit dem er sich an der SIP-Tankstelle :) anmelden kann.
Ich werde weiter testen; mit winscp ist das ja alles kein Problem mehr. :)

Und am Schluss kann ich immer noch alle Änderungen in meinen Windows-Grund-Konfigurations-Ordner übernehmen.... ein wirklich geniales Tool! :)
 
Zuletzt bearbeitet:
TinTin schrieb:
Klar geht das auch auf einem vServer - ich mach' das nur über den eigenen Asterisk und mit Flat von GMX auf die Genion Homezone Nummer. Statt GMX kann man natürlich auch die "normale" Sipsnip Flat ohne das Callback nehmen, das bastelt man sich eben selbst...

Gruß,
Tin

Ok.... wie läuft dann aber der Weg von den Anrufen ab....stehe wohl gerade etwas auf dem schlauch....
 
vbbaby schrieb:
Ok.... wie läuft dann aber der Weg von den Anrufen ab....stehe wohl gerade etwas auf dem schlauch....

Bei mir jetzt?

Ich rufe von meinem O2 Loop Handy auf einer Eingangsnummer an, die am Asterisk registriert ist. Asterisk erkennt meine Nummer und weist den Anruf ab (keine Kosten). Als nächstes generiert Asterisk (durch diesen Lockanruf getriggered) ein callfile welches einen Festnetz-Anruf auf mein O2 Genion Handy in der Homezone über die GMX phoneflat platziert - von dort wird umgeleitet auf mein O2 Loop Handy (kostenlos) - ich nehme den Anruf auf dem Loop Handy an und Asterisk stellt mir ein Freizeichen zur Verfügung mit dem ich dann über eine zweite Leitung (wieder GMX) wieder raustelefoniere... Das Ganze sollte auch mit sipsnip gehen, sofern sipsnip 2 gleichzeitige calls über deren phoneflat erlaubt...
 
TinTin schrieb:
Bei mir jetzt?

Ich rufe von meinem O2 Loop Handy auf einer Eingangsnummer an, die am Asterisk registriert ist. Asterisk erkennt meine Nummer und weist den Anruf ab (keine Kosten). Als nächstes generiert Asterisk (durch diesen Lockanruf getriggered) ein callfile welches einen Festnetz-Anruf auf mein O2 Genion Handy in der Homezone über die GMX phoneflat platziert - von dort wird umgeleitet auf mein O2 Loop Handy (kostenlos) - ich nehme den Anruf auf dem Loop Handy an und Asterisk stellt mir ein Freizeichen zur Verfügung mit dem ich dann über eine zweite Leitung (wieder GMX) wieder raustelefoniere... Das Ganze sollte auch mit sipsnip gehen, sofern sipsnip 2 gleichzeitige calls über deren phoneflat erlaubt...

2 Calls sind erlaubt ....
Gibt es dort nur die Möglichkeit mit dem Freizeichen, oder kann man hier auch so etwas wie Kurzwahlen nutzen ?
 
Hallo Günter,

habe Deine "Edits" gar nicht gesehen, da wird man ja leider nicht per email drüber informiert...

ploieel schrieb:
3. EDIT:

die zweite Variante will nicht funktionieren,

Code:
Feb  6 21:50:41 WARNING[6063]: chan_sip.c:6855 handle_response: Forbidden - wrong password on authentication for INVITE to '"50530" <sip:[email protected]>;tag=as13f63bd1'
    -- SIP/sipdiscount-ff00 is circuit-busy
  == Everyone is busy/congested at this time

Hier ist wohl noch etwas Feinarbeit nötig...

Offensichtlich kommt sipdiscount mit Deiner CallerID 50530 nicht zurecht. Hier könnte ein SetCallerID() ohne Inhalt zwischen den Klammern helfen oder mal mit GMX versuchen, dann SetCallerID(49xxxxxxx):

Code:
[dialout]

exten => s,1,Answer
exten => s,2,SetVar(NR=) 
exten => s,3,ResponseTimeout(60) 
exten => s,4,WaitExten 

exten => _X,1,SetVar(NR=${NR}${EXTEN}) 
exten => _X,2,Goto(2,3) 

exten => *,1,Goto(2,2) 

exten => #,1,SetCallerID(49xxxxxxx)
exten => #,2,Dial(SIP/${NR}@gmx,60,tr) 

exten => t,1,Hangup
exten => h,1,Hangup

Das ResponseTimeout wird hier auch mit Asterisk 1.07 greifen.

Gruß,
Tin
 
Hallo Tin,

extensions.conf:

Code:
[dialout]
; zweite Variante ohne dialout_now 
exten => s,1,Answer
exten => s,2,SetVar(NR=) 
exten => s,3,ResponseTimeout(60) 
exten => s,4,WaitExten 

exten => _X,1,SetVar(NR=${NR}${EXTEN}) 
exten => _X,2,Goto(2,3) 

exten => *,1,Goto(2,2) 

exten => #,1,Dial(SIP/${NR}@sipdiscount,60,tr) 

exten => t,1,Hangup
exten => h,1,Hangup

der DTMF-Ruf geht OHNE #-Taste zum Abschluss raus. :)

Funktioniert auch recht problemlos.

putty´s log zeigt:

Code:
fli4l*CLI> set verbose 3
Verbosity is at least 3
    -- Executing System("CAPI[contr1/50530]/3", "cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/") in new stack
    -- started pbx on channel (callgroup=0)!
    -- Executing Hangup("CAPI[contr1/50530]/3", "") in new stack
  == Spawn extension (external-ISDN_eingehend, 50530, 2) exited non-zero on 'CAPI[contr1/50530]/3'
    -- Attempting call on Capi/25:010290162xxxxxxx for s@dialout:1 (Retry 1)
    -- Attempting call on Capi/25:010290162xxxxxxx for s@dialout:1 (Retry 2)
    -- Executing Answer("CAPI[contr1/25]/5", "") in new stack
    -- Executing SetVar("CAPI[contr1/25]/5", "NR=") in new stack
    -- Executing ResponseTimeout("CAPI[contr1/25]/5", "60") in new stack
    -- Set Response Timeout to 60
    -- Executing WaitExten("CAPI[contr1/25]/5", "") in new stack
    -- Executing Hangup("CAPI[contr1/25]/5", "") in new stack
  == Spawn extension (dialout, h, 1) exited non-zero on 'CAPI[contr1/25]/5'
fli4l*CLI>

und dann kommt ein Freizeichen im Handy. putty zeigt leider nichts weiteres an. Wäre schon interessant zu wissen, ob der Call dann über sipdiscount wieder rausgeht...

Die erstere Variante mit dem dialout per DISA gefällt mir jetzt fast noch besser, weil das sogar OHNE den Context "dialout_now" funktioniert...

Ist mir jedoch irgendwie rätselhaft. :) Irgendwas läuft bei mir hier noch schief, vielleicht liegt es an meiner Dokumentation. Es geht hier schon etwas SEHR chaotisch zu mit meiner Testerei. ;-)
 
Nun noch ein letzter Test für heute:

Code:
[dialout]
exten => s,1,Answer
exten => s,2,Wait(10)
exten => s,3,DISA,no-password|dialout_now
exten => s,4, Hangup
exten => s,102,Busy
exten => h,1,Hangup


[dialout_now]
exten => _.,1,SetCallerID(50534)
; exten => _.,2,Dial(Capi/25:${EXTEN},,Tt)
; exten => _.,2,Dial(SIP/${EXTEN}@gmx,60,tr)
exten => _.,2,Dial(SIP/${EXTEN}@sipdiscount,60,tr)
exten => _.,3,Congestion
exten => _.,102,Busy
exten => h,1,Hangup

Wie bekomme ich nun im Putty zu sehen, dass der Ruf über sipdiscount wieder rausgeht? sip show channels zeigt nämlich 0 benutzte channels an... :-(

Trotzdem geht ein Ruf raus und der kommt auch an...
 
Nun habe ich mich auch mal rangemacht an * auf vServer und möchte mir ein Callback basteln......

Leider kommt bei meinem Anruf auf der Nummer 0711218..... leider nur das der Teilnehmer nicht erreichbar ist.....wo liegt hier der Fehler....?

Mein extensions.conf
Code:
[general]
static=yes
writeprotection=no

;----------------------------------------------------------
-------
; Es hat sich als gute Praxis erwiesen, die Inhalte der Dat
ei
; extension.conf modular aufzubauen. Diese Praxis wollen
; wir auch hier anwenden
;
[echotest]
exten => 881,1,answer
exten => 881,2,wait,1
exten => 881,3,playback,demo-echotest
exten => 881,4,echo
exten => 881,5,playback,demo-echodone
exten => 881,6,hangup

[lokal]
; Erreichbarkeit der Nebenstellen 30-39
; untereinander herstellen
static=yes
writeprotection=no

;-----------------------------------------------------------------
; Es hat sich als gute Praxis erwiesen, die Inhalte der Datei
; extension.conf modular aufzubauen. Diese Praxis wollen
; wir auch hier anwenden
;
[echotest]
exten => 881,1,answer
exten => 881,2,wait,1
exten => 881,3,playback,demo-echotest
exten => 881,4,echo
exten => 881,5,playback,demo-echodone
exten => 881,6,hangup

[lokal]
; Erreichbarkeit der Nebenstellen 30-39
; untereinander herstellen

exten => _3X,1,NoCDR()
exten => _3X,n,Dial,SIP/${EXTEN}|55|Ttr

[sipsnip_out]
; Diesen Kontext verwenden wir zum waehlen von abgehenden
; Rufnummern \xfcber den Sipsnip Account 0711218....

exten => _0.,1,Dial,SIP/${EXTEN}@0711218.....|45|

[dialout]
;R\xfcckruf auf Handy ist erfolgt und landet hier
exten => _X.,1,Answer
exten => _X.,2,Wait(15)
exten => _X.,3,DISA,no-password|dialout_now
exten => _X.,4,Hangup
exten => _X.,102,Busy
exten => h,1,Hangup

[dialout_now]
;Zur Rauswahl benutzen wir jetzt hier im Beispielein zweite Sipgatline:
exten => _X.,1,SetCallerID(0711218.....)
exten => _X.,2,Dial(SIP/${EXTEN}@0711218.....,60,tr)
exten => _X.,3,Congestion
exten => _X.,102,Busy
exten => h,1,Hangup

[ankommend]
;exten => 0711218.....,1,Dial,SIP/30|30|r
exten => 0711218...../0176...,1,Wait(1)
exten => 0711218...../0176....,2,System(cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/)
exten => 0711218..../0176.....,3,Wait(1)
exten => 0711218..../0176.....,4,Hangup

;------------------------------------------------------------------
;
; hier kommt der default-Context, in dem alle Geraete in der
; Grundkonfiguration erstmal laufen.
; Alle Geraete koennen sich gegenseitig anrufen

[default]
include => lokal
include => sipsnip_out
mein sip.conf
Code:
[general]
context=default
bindport=5060
bindaddr=84.xxx.xxx.xxx
srvlookup=yes

;-----------------------------------------------------------------------------
;
; hier k\xf6nnen die Anmeldedaten f\xfcr VOIP Provider stehen
; dazu kommen wir in einer spaeteren Lektion
;
register => username:[email protected]/0711218....

[0711218....]
type=peer
username=username
fromuser=username
secret=passwd
host=sipsnip.com
fromdomain=sipsnip.com
insecure=very
canreinvite=no
nat=no
disallow=all
allow=ulaw

[sipsnip_de_in]
type=peer
fromdomain=sipsnip.com
host=sipsnip.com
disallow=all
allow=ulaw
context=ankommend



;-----------------------------------------------------------------------------
;
; hier kommen die Anmeldekontexte f\xfcr die SIPEndger\xe4te 30-39
;


[30]
callerid=Phone 1 <30>
host=dynamic
domain=84.xx.xxx.xxx
user=30
secret=passwd
type=friend
mailbox=30
nat=yes
canreinvite=no
Mein Callfile
Code:
Channel: SIP/0176......@0711218.....
Callerid: 0711218.....
Context: ankommend
Extension: 666
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1
 
Leider kommt bei meinem Anruf auf der Nummer 0711218..... leider nur das der Teilnehmer nicht erreichbar ist.....wo liegt hier der Fehler....?

Wann kommt diese Ansage? Schon beim "Lockruf" um den Callback zu initiieren? Oder wenn Du zurückgerufen wurdest? Oder wenn Du nach dem Rückruf versuchst weiter zu wählen?

Was sagt Asterisk?

Gruß,
Tin
 
die ansage kommt schon beim Lockruf.....

In der CLI steht nichts ....
 
@Tin: Danke nochmal für alles, hat jetzt sehr gut funktioniert.
@vbbaby: willst Du Callback+Rausruf über denselben Provider machen? Bei mir gab es Probleme mit gmx, weil die durch dieselbe CallerID ein Loop vermuten. Habe ich einfach dadurch gelöst, dass ich einen anderen Provider für den Rückruf nehme.
Zur CLI: SET VERBOSE 4, dann siehste vielleicht was
Ciao
Stefan
 
Stefan8 schrieb:
@Tin: Danke nochmal für alles, hat jetzt sehr gut funktioniert.

Gerne :)

@vbbaby & all

Die jeweils aktuelle/neueste Anleitung zu meiner simplen Callback Methode findet man hier


Gruß
Tin
 
Zuletzt bearbeitet:
@tin tin

Die jeweils aktuelle/neueste Anleitung zu meiner simplen Callback Methode findet man hier

Hallo TinTin,

habe mich in dem Forum angemeldet nur leider sind alle Artikel und Beiträge bezüglich Asterisk leer!!??

Ist das Forum nicht mehr aktiv???
 
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.