sip callback.php

Hi Tin,

hier mal die Aufgabe und die gesammelten Werke:
Wenn ein Anruf vom Handy 01754.. an die Sipgate-Nr. 018015.. kommt, dann soll durch callfilestefan1 ein Callback über Gmx an die Festnetznummer 49704... ausgelöst werden und wieder über Gmx dann der Zielanruf ausgelöst werden. Später soll bei Anruf von Handy 01604.. auf dieselbe Sipgate-Nummer durch callfilestefan2 ein Callback an die Festnetznummer 49725... ausgelöst werden.

Hier mal nur der erste Teil der Aufgabe.

/etc/asterisk/call/callfilestefan1

Channel: SIP/0704....@49704....
Callerid: 49704....
Context: dialout
Extension: 333
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1

Frage dazu: Wie kann ich die CallerID bzw Nummer setzen? So klappt es nämlich nicht. Was macht die Extension?

Werte aus sip.conf:

;sipgate
[5855...]
type=peer
username=5855...
fromuser=5855...
secret=geheim
host=sipgate.de
fromdomain=sipgate.de
insecure=very
canreinvite=no
nat=no
disallow=all
allow=ulaw

;Gmx
[49704...]
type=peer
username=49704...
fromuser=49704...
secret=geheim
host=sip.gmx.net
fromdomain=sip.gmx.net
insecure=very
caninvite=no
canreinvite=no
nat=no
disallow=all
allow=ulaw

Wesentliches aus extensions.conf:

[ankommend]
exten => 5855.../01754...,1,Wait(1)
exten => 5855.../01754...,n,System(cp /etc/asterisk/call/callfilestefan1 /var/spool/asterisk/outgoing/)
exten => 5855.../01754...,n,Wait(1)
exten => 5855.../01754...,n,Hangup

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

[dialout_now]
;zweite Verbindung (Asterisk nach auswärts)
exten => _.,1,SetCIDName(Stefan 2)
exten => _.,n,SetCIDNum(49704...)
exten => _.,n,Dial,SIP/${EXTEN}@49704...|45|Ttr
exten => _.,n,Congestion
exten => _.,102,Busy
exten => h,1,Hangup

Ciao
Stefan
 
Hallo Stefan,

callfilestefan1:
Code:
Channel: SIP/0704....@49704....
Callerid: 49704....
Context: dialout
Extension: s
SetVar: CALLERIDNUM=49704....
MaxRetries: 3 
Retrytime: 30 
WaitTime: 30
Priority: 1
callfilestefan2:
Code:
Channel: SIP/0725....@49704....
Callerid: 49704....
Context: dialout
Extension: s
SetVar: CALLERIDNUM=49704....
MaxRetries: 3 
Retrytime: 30 
WaitTime: 30
Priority: 1

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

exten => 5855.../01604...,1,System(cp /etc/asterisk/call/callfilestefan2 /var/spool/asterisk/outgoing/) 
exten => 5855.../01604...,2,Hangup 

[dialout]
;Rückruf auf Handy ist erfolgt und landet hier
exten => s,1,Answer
exten => s,2,DISA,no-password|dialout_now
exten => s,3,Hangup
exten => s,102,Busy
exten => h,1,Hangup

[dialout_now]
;zweite Verbindung (Asterisk nach auswärts)
exten => _X.,1,SetCallerID(49704...)
exten => _X.,2,Dial,SIP/${EXTEN}@49704...|45|Ttr
exten => _X.,3,Congestion
exten => _X.,102,Busy
exten => h,1,Hangup
 
Zuletzt bearbeitet:
Oops, habe einen Fehler von Dir übernommen, die channels der callfiles müssen anders aussehen, da Du ja über GMX zurückrufen willst und nicht über sipgate :) Werde es oben auch gleich ändern:

callfilestefan1:

Code:
Channel: SIP/0704....@49704....
Callerid: 49704....
Context: dialout
Extension: s
SetVar: CALLERIDNUM=49704....
MaxRetries: 3 
Retrytime: 30 
WaitTime: 30
Priority: 1
callfilestefan2:

Code:
Channel: SIP/0725....@49704....
Callerid: 49704....
Context: dialout
Extension: s
SetVar: CALLERIDNUM=49704....
MaxRetries: 3 
Retrytime: 30 
WaitTime: 30
Priority: 1
 
Hi Tin,
danke für Deine Antwort.
Rückruf und ID setzen klappt einwandfrei.
Aber mit dem Übertragen der Tastaturtöne über DTMF hapert es noch.
Es kommen nur Besetzzeichen und es passiert nichts. Wird offenbar vom Asterisk nicht erkannt.
Hast Du dazu noch eine Idee? Gabs da schonmal Probleme?
Im Grunde könnte man doch auch einfach eine Kurzwahlliste in dialout_now reinhängen, oder? Würde es evtl. vereinfachen.
Wenn die Sipgate-Nummer noch was anderes tun soll (von anderen Apparaten aus), dann kann ich das ja immer hintendranhängen und dann wieder mit Priority 1 anfangen, wenn ich das richtig sehe, oder?
Danke + Gruß
Stefan
 
Versuche unter [49704...] in der sip.conf:

dtmfmode=rfc2833

hinzuzufügen. Danach sip reload.

Wohin geht der Rückruf? Ist das ein "normaler" Festnetzanschluß?

Im Grunde könnte man doch auch einfach eine Kurzwahlliste in dialout_now reinhängen, oder? Würde es evtl. vereinfachen.

Könnte man machen, aber wenn er überhaupt kein DTMF erkennt, dann nutzt auch eine Kurzwahl nichts...

Wenn die Sipgate-Nummer noch was anderes tun soll (von anderen Apparaten aus), dann kann ich das ja immer hintendranhängen und dann wieder mit Priority 1 anfangen, wenn ich das richtig sehe, oder?

Yep.
 
Hi Tin,
ja, es ist eine beliebige=normale Festnetznummer hier zum Testen vor Ort.
CLI sagt dazu:
Code:
    -- Executing Wait("SIP/217.10.67.5-4081eb00", "5") in new stack
    -- Executing System("SIP/217.10.67.5-4081eb00", "cp /etc/asterisk/call/callfilestefan1 /var/spool/asterisk/outgoing/") in new stack
    -- Executing Hangup("SIP/217.10.67.5-4081eb00", "") in new stack
  == Spawn extension (ankommend, 5855...., 3) exited non-zero on 'SIP/217.10.67.5-4081eb00'
    -- Attempting call on SIP/0704....@49704.... for s@dialout:1 (Retry 1)
       > Channel SIP/49704....-ee37 was answered.
    -- Executing Answer("SIP/49704....-ee37", "") in new stack
    -- Executing Wait("SIP/49704....-ee37", "15") in new stack
    -- Executing DISA("SIP/49704....-ee37", "no-password|dialout_now") in new stack
  == Spawn extension (dialout, s, 3) exited non-zero on 'SIP/49704....-ee37'
    -- Executing Hangup("SIP/49704....-ee37", "") in new stack
  == Spawn extension (dialout, h, 1) exited non-zero on 'SIP/49704....-ee37'
Den rfc2833 hab ich im sip-Kontext hintendrangesetzt und sip reload.
Hast noch eine Idee?
Ciao
Stefan
 
Du hast in [dialout] immer noch ein wait(15) drin. Nimm das mal raus bitte.

[dialout]
exten => s,1,Answer
exten => s,2,DISA,no-password|dialout_now
exten => s,3,Hangup
exten => s,102,Busy
exten => h,1,Hangup
 
Zuletzt bearbeitet:
Hey Tin,
klappt grandios, vielen Dank!
Ciao
Stefan
 
Gerne, freut mich, dass es läuft! :)
 
Hallo Tin, ich wieder mal hier. :)

Die Channel-Zeile im callfile enthält bei mir einen : zur Trennung, im obigen Beispiel ist es ein @ . Was ist der Unterschied?


Code:
Channel: Capi/25:010290162xxxxxxx

Vielen Dank.
 
Hallo Günter :)

Die Syntax zum channel/wählen über Capi (ISDN) und SIP ist ganz einfach unterschiedlich... Du hast ja z.B. keine Provider contexte bei Capi.

Gruß,
Tin
 
Hallo Tin;

gut, das mit der anderen Syntax habe ich verstanden. Also ist doch mein jetziges Callfile richtig.

Trotzdem geht mal wieder etwas nicht richtig. Ich hoffe, dass Du mir ähnlich umfangreich helfen kannst wie Stefan8. :)

Deshalb mal hier meine Auszüge:

Code:
; Auszug aus extensions.conf:

[external-ISDN_eingehend]
exten => 3312,1,Dial(ZAP/g1/25,45,r)
exten => 3312,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

exten => 50530/0162xxxxxxx,1,Wait(1)
exten => 50530/0162xxxxxxx,2,System(cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/)
exten => 50530/0162xxxxxxx,3,Wait(1)
exten => 50530/0162xxxxxxx,4,Hangup

[dialout]
exten => s,1,Answer
exten => s,2,DISA,no-password|dialout_now
exten => s,3, 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 => _.,3,Congestion


; callfile

Channel: Capi/25:010790162xxxxxxx
Callerid: 50530
Context: dialout
Extension: s 
MaxRetries: 3
SetVar: CALLERIDNUM=50530
Retrytime: 30
WaitTime: 30
Priority: 1

Ich will zunächst über ISDN mittels CallBack wieder raus; später, wenn alles läuft, will ich dann auch GMX versuchen.

Wenn ich jetzt vom Handy aus meine MSN 50530 anrufe, gibt Asterisk folgende Meldung aus:

Code:
fli4l*CLI> set verbose 3
Verbosity was 0 and is now 3
    -- Executing Wait("CAPI[contr1/50530]/3", "1") in new stack
    -- started pbx on channel (callgroup=0)!
  == Spawn extension (external-ISDN_eingehend, 50530, 1) exited non-zero on 'CAPI[contr1/50530]/3'
fli4l*CLI>

Was mache ich falsch?
 
laß in [external-ISDN_eingehend] auch mal die Wait(1) beide Male weg, also:

Code:
exten => 50530/0162xxxxxxx,1,System(cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/)
exten => 50530/0162xxxxxxx,2,Hangup

Wenn dann immer noch nichts passiert, poste nochmal den CLI output.

Welche Asterisk Version hast Du jetzt laufen? Das funktionierte doch schon mal alles bei Dir (nach viel größerer Hilfe als für Stefan ;))

Gruß,
Tin
 
Hallo Tin;
ich habe nach dem Kurs von betateilchen alles neu gemacht, und endlich ist die Mailbox usw. gelaufen.
Nun geht aber das Callback nicht mehr. :-(

Wenn im callfile steht: extension : 666

dann muss doch diese 666 in der extensions.conf wieder auftauchen! Oder sehe ich das falsch?

Mit der extension s kann mein Asterisk wahrscheinlich nichts anfangen... es ist aber immer noch der gleiche wie am Anfang dieses langen Threads.
 
Günter,

mach doch erstmal was ich geschrieben habe :)

Das callfile, [dialout] und [dialout_now] sind korrekt, dahin kommt er ja im Moment nur gar nicht bei Dir wie es aussieht, deswegen da auch nichts ändern. Das "s" sollte bleiben, das findet er auf jeden Fall, nämlich in [dialout].

Gruß,
Tin
 
Korrigiere, das callfile sollte so aussehen dass das SetVar VOR MaxRetries kommt:

Channel: Capi/25:010790162xxxxxxx
Callerid: 50530
Context: dialout
Extension: s
SetVar: CALLERIDNUM=50530
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1

Gruß,
Tin
 
Hallo Tin; :) :) :)

scheint alles zu funktionieren!

das callfile sieht jetzt so aus:

Code:
Channel: Capi/25:010290162xxxxxxx
Callerid: 50530
Context: dialout
Extension: s
SetVar: CALLERIDNUM=50530
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1

und in der extensions.conf habe ich das Folgende stehen:

Code:
[external-ISDN_eingehend]
exten => 3312,1,Dial(ZAP/g1/25,45,r)
exten => 3312,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

exten => 50530/0162xxxxxxx,1,System(cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/)
exten => 50530/0162xxxxxxx,2,Hangup

[dialout]
exten => s,1,Answer
exten => s,2,DISA,no-password|dialout_now
exten => s,3, 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 => _.,3,Congestion
exten => _.,102,Busy
exten => h,1,Hangup

Was meinst Du; wenn ich jetzt das Semikolon vor der Zeile mit dem GMX-Aufruf lösche und stattdessen vor den Capi-Aufruf mache, wird das auch funktionieren? Oder muss ich noch etwas anderes ändern...

btw. Ich hatte vorhin vergessen, die contexte dialout und dialout_now zu includieren... deshalb gings wohl nicht. Die Aufrufe sind ins default geschickt worden, hmmmm, kann nicht gehen.
 
ploieel schrieb:
Hallo Tin; :) :) :)

scheint alles zu funktionieren!

super :)

Was meinst Du; wenn ich jetzt das Semikolon vor der Zeile mit dem GMX-Aufruf lösche und stattdessen vor den Capi-Aufruf mache, wird das auch funktionieren? Oder muss ich noch etwas anderes ändern...

Keine Ahnung wie Dein gmx Eintrag in der sip.conf lautet über den Du normalerweise rauswählst, wenn er [gmx] heißt kannst Du das machen, ansonsten mußt Du das "@gmx" in der Zeile

exten => _.,2,Dial(SIP/${EXTEN}@gmx,60,tr)

ersetzen mit dem Namen des contextes von gmx in der sip.conf und außerdem muß dann noch ein SetCallerID(49xxxxxxxxx) davor statt SetCallerID(50534), wobei 49xxxxx Deine GMX Abgangsnummer ist.

Gut's Nächtle,
Tin
 
Mit GMX hat es auch funktioniert!!! :) Wenn ich es jetzt noch hinkriege (morgen) , über sipdiscount wieder rauszukommen, das wärs dann:

Danke für die Unterstützung! :)

EDIT:
hat auch mit sipdiscount funktioniert. :)

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?
 
Zuletzt bearbeitet:
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?
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.
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.
Gruß
Stefan
 
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.