sip callback.php

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

Ganz simple callback Lösung, im Beispiel ruft ein Handy (0179xxxxxxx, Nummer mit eigener ersetzen in allen Beispielen) auf einer Asterisk Sipgate Line 1 an (Beispiel hier 5555), es wird ein Rückruf via dieser sipgate line 1 intiiert und ein Freizeichen bereitgestellt (hier über eine zweite sipgate line) zur Weiterwahl:

1. Man erstellt ein callback file wie das nachfolgende und legt es in z.B. Verzeichnis /etc/Asterisk/call/ , Dateiname: callfile

(ACHTUNG, die Reihenfolge genau übernehmen !)

Channel: SIP/0179xxxxxxx@sipgate1
Callerid: sipgate1id
Context: dialout
Extension: 666
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1


2. In der extensions.conf im Context der Line (sipgate1), die man anruft um einen Rückruf zu initiieren:

Code:
exten => 5555/0179xxxxxxx,1,Wait(1)
exten => 5555/0179xxxxxxx,2,System(cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/)
exten => 5555/0179xxxxxxx,3,Wait(1)
exten => 5555/0179xxxxxxx,4,Hangup

Obiger System Befehl "cp" kopiert das callfile ins outgoing Verzeichnis, was ständig von Asterisk automatisch überprüft wird, wird ein callfile gefunden, wird es ausgeführt. Der Rückruf wird initiiert. (ACHTUNG, das Forum schreibt System und (cp ...) hier in 2 Zeilen, das gehört natürlich alles in EINE Zeile, kann den Umbruch in eine neue Zeile hier leider nicht verhinden)

3. In der extensions.conf zwei neue Contexte eintragen:

Code:
;wie im callfile angegeben lautet der Context:

[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]
;Zur Rauswahl benutzen wir jetzt hier im Beispiel eine zweite sipgate line:
exten => _.,1,SetCallerID(sipgate2ID)
exten => _.,2,Dial(SIP/${EXTEN}@sipgate2,60,tr)
exten => _.,3,Congestion
exten => _.,102,Busy
exten => h,1,Hangup

Jetzt kann man anfangen das Ganze zu verfeinern und statt der festgelegten Nummer mit Variablen arbeiten (auch im callfile ggf. ändern) oder sich das Ganze auf seine Wünsche anpassen, z.B. Rauswahl (Freizeichen) bereitstellen über die eigene ISDN-Line statt einer zweiten sipgate Line, usw.

Hoffe es hilft dem ein oder anderen ;)

Gruß,
Tin
 
Zuletzt bearbeitet:
Das ist für mich ausserordentlich interessant! Leider existieren die von Dir angeführten Ordner in meinem Fli4L nicht, und ich weiß nicht, wo da ein outgoing-Ordner ist, der vom Asterisk ständig überprüft wird. Kannst Du bitte noch einen Vorschlag machen, wie das Ganze für zwei ISDN-Lines zu modifizieren ist?
Biespiel: Handy ruft Asterisk an, der Ruf kommt über ISDN (Capi-Karte) rein. Asterisk erkennt die Handy-Nummer, nimmt jedoch nicht ab. Handy beendet Ruf. Asterisk ruft Handy zurück und stellt eine freie Leitung (Rufzeichen) bereit. Handy kann dann über Asterisk ins Festnetz telefonieren. So oder so ähnlich sollte es funktionieren.
Ich freue mich sehr über Antworten! :D
 
Hallo ploieel,

Verzeichnis /etc/asterisk/call/
habe ich selbst angelegt und die Datei "callfile" dort abgelegt. Wo sie liegt ist eigentlich egal, nur wenn Du sie woanders ablegst mußt Du natürlich den System aufruf mit cp... ändern, wo die Datei dann in:

/var/spool/asterisk/outgoing/
kopiert wird. Dies ist das wichtige Verzeichnis, wo Asterisk nachschaut, das sollte bei Dir auch existieren.

Um das Ganze auf ISDN umzumünzen, schreib den ersten Auszug mit der 5555, ... einfach in den Context der extensions.conf wo ISDN-Anrufe bei Dir landen (natürlich nicht mit 5555 vorneweg sondern was Du da sonst auch stehen hast als MSN oder einfach nur _./DeineHandyNummer ).

Im Callfile dann das SIP command mit ZAP und Deinem regulären Dialstring ersetzen.

[dialout_now] Context dann entweder so lassen und mit einem VoIP Provider raustelefonieren oder ebenfalls SIP mit ZAP ersetzen und über den 2. ISDN Kanal rauswählen.

Wie die Dial commands bei ISDN aussehen solltest Du ja schon wissen, wenn Du schon mit Asterisk arbeitest, oder ? Wenn nicht, da muß ich leider passen, weil ich keine ISDN Karte im Asterisk habe, mein Asterisk läuft als dedicated Server bei einem Provider und ich beackere damit nur VoIP calls ;)

Es dürfte aber ungefähr so aussehen (man möge mich korrigieren, wenn falsch):

Im callfile die erste Zeile ändern in:
Channel: ZAP/1/0179xxxxxxx

für den zweiten Kanal, im [dialout_now] context dann wahrscheinlich sowas wie:

exten => _.,1,Dial(ZAP/2/${EXTEN},60,tr)

einbauen, statt der Dial(SIP... ) Zeile

Gruß,
Tin
 
Danke TinTin für die Hinweise.
Ich habe nochmals nachgesehen, das Verzeichnis var gibt es , leide aber die weiteren Unterverzeichnisse spool usw. nicht.

Hier gibt es nur var/lib/asterisk und darin agi-bin, firmware, images, keys, mohmp3 udn sounds.

Kann ich das Verzeichnis var/spool/asterisk/outgoing auch selbst anlegen und wird das Ganze dann auch funktionieren?

Klar, ich könnte herumprobieren, aber eine reelle Chance möchte ich schon haben.

Grüße
Günter
 
Hallo Günter,

öffne mal die Datei /etc/asterisk/asterisk.conf , dort werden die Verzeichnisse bestimmt, die Asterisk benutzt. In einer Standard Installation sollte da folgender Eintrag vorhanden sein:

astspooldir => /var/spool/asterisk

Wenn ja, dann erzeuge einfach den Pfad /var/spool/asterisk/outgoing. Falls dort ein anderes Verzeichnis eingestellt ist, dann erzeuge dementsprechend dem Pfad dort das Unterverzeichnis /outgoing, wenn noch nicht vorhanden. Dann ändere den System (cp ... ) Aufruf auch dementsprechend.

Gruß,
Tin
 
Hallo TinTin; für Dich trifft die Bewertung "Experte" wirklich zu, für mich bei Weitem nicht.

In der asterisk.conf steht:
[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run
astlogdir => /var/log/asterisk

also kann ich jetzt den Pfad selbst erstellen und es wird dann (hoffentlich) funktionieren. Ich melde mich dazu dann nochmals.
Danke,
Günter
 
Hallo Günter,

ja, würde mich freuen von Dir zu hören, ob es denn auch klappt bei Dir :)
Oder wenn's noch nicht geht, frag ruhig weiter.

Ich bin weiß Gott auch kein Experte... würde diesen "Titel" auch gerne ablegen *lach*, aber ich glaube das ist nicht editierbar...

Gruß,
Tin
 
Hallo Tin,
so halb klappt die Sache schon.

Fehlermeldung:
*CLI> == Primary D-Channel on span 1 up for TEI 64
== Primary D-Channel on span 1 down for TEI 64
== Primary D-Channel on span 1 up for TEI 64
-- creating pipe for PLCI=0x101 msn = *
-- Executing Wait("CAPI[contr1/xxxxx]/0", "1") in new stack
-- started pbx on channel (callgroup=0)!
-- Executing System("CAPI[contr1/xxxxx]/0", "cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/") in new stack
-- Executing Wait("CAPI[contr1/xxxxx]/0", "1") in new stack
Apr 12 20:04:16 WARNING[15375]: pbx_spool.c:191 apply_outgoing: At least one of app or extension must be specified, along wite
Apr 12 20:04:16 WARNING[15375]: pbx_spool.c:301 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callfile,g
Apr 12 20:04:16 WARNING[15375]: pbx_spool.c:349 scan_thread: Failed to scan service '/var/spool/asterisk/outgoing/callfile'
-- Executing Hangup("CAPI[contr1/50530]/0", "") in new stack
== Spawn extension (external-ISDN_eingehend, xxxxx, 4) exited non-zero on 'CAPI[contr1/xxxxx]/0'
-- CAPI Hangingup
-- removed pipe for PLCI = 0x101
== Primary D-Channel on span 1 down for TEI 64

mal noch mein callfile, wobei ich mit dem Callerid noch so meine Probleme hab:

Channel: ZAP/1/0162xxxxxxx ;Nummer die zurückgerufen wird
; Callerid: sipgate1id
Context: dialout
MaxRetries: 3 ;Anzahl der Wahlversuche
Retrytime: 30
WaitTime: 30
Priority: 1

In die extensions.conf habe ich die zwei peers wie oben beschrieben includiert, wobei ich mit SetCallerID so meine Probleme habe, weil ISDN rein und raus. Diese beiden peers werden in meinen ISDN-ausgehend peer
vom Asterisk eingefügt; ich mache sicherlich hier viel falsch.

Hilf mir bitte noch einmal.
Grüße
Günter

Und mein GMX-SIP-Zugang ist unregistered.
 
Mist, GMX geht nicht mehr:

Apr 12 20:53:11 NOTICE[11275]: chan_sip.c:3922 sip_reg_timeout: Registration for 'xxxxxxxxxxxx@gmx' timed out, trying again
-- Got SIP response 478 "Unresolveable destination (478/TM)" back from 212.227.15.196
 
Hallo Günter,

Ich glaube Du mußt im callfile noch einen Extension: Eintrag machen, den hatte ich vergessen, das callfile mit Korrekturen sollte also so aussehen:

Channel: ZAP/1/0162xxxxxxx ;Nummer die zurückgerufen wird
Callerid: DeineISDNTelefonnummer
Context: dialout
MaxRetries: 3 ;Anzahl der Wahlversuche
Retrytime: 30
WaitTime: 30
Priority: 1
Extension: 666

Du kannst ruhig auch Extension=666 nehmen, es werden ja alle extensions ausgewertet im weiteren Verlauf (dialout), insofern ist die extension egal, deshalb dachte ich, ich könnte sie einfach weglassen ;) Bei CallerID trägst Du Deine ISDN Telefonnummer ein.

Was meinst Du mit Dein GMX-SIP ist unregistered, wolltest Du darüber weiterwählen in [dialout_now] oder über den zweiten ISDN Kanal? Wenn GMX-SIP unregistered ist, wirst Du noch einen Fehler in der sip.conf haben, wie sieht Dein Register Befehl aus in der sip.conf ? Wie der Eintrag für [GMX] ?

Übrigens, wenn Du einen ISDN Anschluß bei der Telekom hast, dann solltest Du natürlich über eine call-by-call Nummer auf Deinem Handy anrufen, das ist ja einiges billiger, z.B. 01079 (14,5c/min.), also dann im callfile in Zeile 1 :

Channel: ZAP/1/010790162xxxxxxx ;Nummer die zurückgerufen wird

Aktuelle call-by-call Tarife findet man immer schnell via http://www.teltarif.de ("Tarifabfrage" rechts auf der Seite)

Gruß,
Tin
 
Hallo Tin,

ich habe, bevor ich mit dem callback angefangen habe, meine extensions.conf gesichert, um sie bei Bedarf zurückschreiben zu können. Da ging mein GMX-Account noch.

Dann habe ich alles so geändert, die Du vorgeschlagen hast, und nun geht mein GMX-Account nicht mehr. die sip.conf war ja im Zusammenhang mit callback nicht zu ändern.
Ansonsten mache ich mal so wie Du hier geschrieben hast, weiter.
 
Lief GMX bei Dir denn sonst schon ok? Vielleicht gerade nur ein temporäres Problem was bei GMX liegt und nicht bei Dir... funktionieren "normale" GMX calls ? Wenn sie vorher liefen, liegt's bestimmt grad an GMX, wir haben daran ja nichts geändert.

Gruß,
Tin
 
Ja, es lief vorher schon richtig. Was meinst Du mit "normale GMX-Calls?" Ich habe hier bisher nur GMX ins Festnetz gerufen, die haben funktioniert.
 
O.K. lassen wir d<s jetzt mal mit dem GMX. Weiter im Text mit Callback.
Habe das Callfile geändert, wie Du vorgeschlagen hast.

Fehlermeldung:

-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
-- started pbx on channel (callgroup=0)!
-- Executing System("CAPI[contr1/50530]/0", "cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/") in new stack
-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
Apr 12 21:31:51 WARNING[15375]: pbx_spool.c:191 apply_outgoing: At least one of app or extension must be specified, along wite
Apr 12 21:31:51 WARNING[15375]: pbx_spool.c:301 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callfile,g
Apr 12 21:31:51 WARNING[15375]: pbx_spool.c:349 scan_thread: Failed to scan service '/var/spool/asterisk/outgoing/callfile'
-- Executing Hangup("CAPI[contr1/50530]/0", "") in new stack
== Spawn extension (external-ISDN_eingehend, 50530, 4) exited non-zero on 'CAPI[contr1/50530]/0'
-- CAPI Hangingup
-- removed pipe for PLCI = 0x101
== Primary D-Channel on span 1 down for TEI 64
wobei 50530 meine MSN ist, die die Telekom mir vergeben hat. Sollte vielleicht irgendwo eine interne MSN stehen?
 
Hallo Tin,
ich glaube fast sicher, das in meiner extensions.conf einige Fehler sind. Bitte sieh mir nach, dass ich einen Auszug hier so poste, ich habe es noch nicht gefunden, wie man hier den Code einfügt.

[external-ISDN_ausgehend]
exten => _X.,1,Dial(CAPI/25:${EXTEN},,Tt)
exten => _X.,2,Congestion
exten => _X.,3,Hangup

[external-ISDN_eingehend]
exten => 3312,1,Dial(ZAP/g1/25,45,r)
exten => 50459,1,Dial(ZAP/g1/25,45,r)
exten => 50523,1,Dial(ZAP/g1/25,45,r)

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

[dialout]
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]
exten => _.,1,SetCallerID(50530)
exten => _.,2,Dial(ZAP/2/25:${EXTEN},,Tt)
exten => _.,3,Congestion
.
.
.
[ausgehend]
include => external-ISDN_ausgehend
include => external-BLUESIP_ausgehend
include => external-SIPGATE_ausgehend
include => external-GMX_ausgehend
include => dialout
include => dialout_now

[default]
include => vmailbox
include => internal
include => external-ISDN_eingehend
include => external-BLUESIP_eingehend
include => external-SIPGATE_eingehend
include => external-GMX_eingehend
 
Hmm, das ist merkwürdig... Du bekommst die selbe Fehlermeldung wie vorher:

Apr 12 21:31:51 WARNING[15375]: pbx_spool.c:191 apply_outgoing: At least one of app or extension must be specified, along wite

Dazu 2 Fragen: Geht die Fehlerzeile noch weiter? Der Satz ist ja nicht beendet... , "along wite" ?? Hast Du im Callfile jetzt unten noch Extension: 666 hinzugefügt? Weil er mosert genau das an, dass Extension fehlt... vielleicht vertippt? Vielleicht kein Leerzeichen zwischen Extension: und 666?

Die nächste Fehlermeldung ist auch merkwürdig, auch sie scheint "abgeschnitten" :

Apr 12 21:31:51 WARNING[15375]: pbx_spool.c:301 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callfile,g

Nimm mal die auskommentierten Sachen raus, vielleicht darf man in callfile nicht kommentieren, also alles mit " ; " raus aus dem callfile, nur was wirklich reingehört:

Channel: ZAP/1/0162xxxxxxx
Callerid: DeineISDNNummer
Context: dialout
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1
Extension: 666
 
Leerzeichen ist:
Channel: ZAP/1/010790162xxxxxxx ;Nummer die zurückgerufen wird
Callerid: 50530
Context: dialout
MaxRetries: 3 ;Anzahl der Wahlversuche
Retrytime: 30
WaitTime: 30
Priority: 1
Extension: 666

putty macht einfach keine längeren Zeilen; wie komme ich an eine komplette Fehlermeldung?
 
Nimm erstmal die beiden Sachen raus:

";Nummer die zurückgerufen wird" und ";Anzahl der Wahlversuche" dann nochmal probieren anzurufen. Deine extensions.conf sieht gut aus und er springt ja auch schon in die richtige Zeile. Allein ob der Dial command in [dialout_now] so richtig ist, kann ich nicht beurteilen, weiß nicht was die 25: da im Dial soll ?, aber ich arbeite ja auch nicht mit einer ISDN Line
 
Bitte entschuldige, ich bin einfach zu blöd.
Ich werde das jetzt mal so machen, wie Du vorgeschlagern hast. Trotzdem poste ich Dir jetzt nochmals die Fehlermeldungen von Putty Asterisk (kleinere Schriftart gewählt; jetzt sollten die Zeilen vollständig sein:

-- creating pipe for PLCI=0x101 msn = *
-- started pbx on channel (callgroup=0)!
-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
-- Executing System("CAPI[contr1/50530]/0", "cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/") in new stack
-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
Apr 12 22:09:31 WARNING[15375]: pbx_spool.c:191 apply_outgoing: At least one of app or extension must be specified, along with tech and dest in file /var/spool/asterisk/outgoing/callfile
Apr 12 22:09:31 WARNING[15375]: pbx_spool.c:301 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callfile, deleting
Apr 12 22:09:31 WARNING[15375]: pbx_spool.c:349 scan_thread: Failed to scan service '/var/spool/asterisk/outgoing/callfile'
-- Executing Hangup("CAPI[contr1/50530]/0", "") in new stack
== Spawn extension (external-ISDN_eingehend, 50530, 4) exited non-zero on 'CAPI[contr1/50530]/0'
-- CAPI Hangingup
-- removed pipe for PLCI = 0x101
== Primary D-Channel on span 1 down for TEI 64
 
Habe jetzt das ;und die folgenden Zeichen im callfile entfernt; trotzdem die gleichen Fehlermeldungen:

-- creating pipe for PLCI=0x101 msn = *
-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
-- started pbx on channel (callgroup=0)!
-- Executing System("CAPI[contr1/50530]/0", "cp /etc/asterisk/call/callfile /var/spool/asterisk/outgoing/") in new stack
-- Executing Wait("CAPI[contr1/50530]/0", "1") in new stack
Apr 12 22:19:46 WARNING[15375]: pbx_spool.c:191 apply_outgoing: At least one of app or extension must be specified, along with tech and dest in file /var/spool/asterisk/outgoing/callfile
Apr 12 22:19:46 WARNING[15375]: pbx_spool.c:301 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callfile, deleting
Apr 12 22:19:46 WARNING[15375]: pbx_spool.c:349 scan_thread: Failed to scan service '/var/spool/asterisk/outgoing/callfile'
== Primary D-Channel on span 1 down for TEI 64
-- Executing Hangup("CAPI[contr1/50530]/0", "") in new stack
== Spawn extension (external-ISDN_eingehend, 50530, 4) exited non-zero on 'CAPI[contr1/50530]/0'
-- CAPI Hangingup

Das kann doch nur noch eine ganze Kleinigkeit sein, die da in das callfile eingetragen werden muss, Wenn heute nicht mehr, dann eben morgen.
 
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.