- Mitglied seit
- 18 Dez 2005
- Beiträge
- 2,539
- Punkte für Reaktionen
- 10
- Punkte
- 38
Bezugnehmend auf diesen Post würde ich gerne folgendes realisieren:
Ist so was in Asterisk überhaupt realisierbar?
So. Habe mich etwas eingelesen. Realisierbar in Asterisk ist es. Mit Pickup oder mit Bridge.
Wenn ein Anruf rein kommt, kann man den mit Bridge(channel) an den ganz am Anfang geöffneten channel problemlos übergeben (wenn man den Namen des channels weiß).
Nur eine Sache verstehe ich nicht: wie sage ich der App. "bridge", dass der Anruf eben an diesen bestimmten channel übergeben werden soll und nicht an einen anderen?
Nachtrag: Das müsste mit ${CHANNEL} irgendwie gehen.
Nachtrag2: Habe es folgendermaßen realisiert: asterisl.tar.bz2 hier abgelegt und lade es mit der debug.cfg nach:
So funzt es wunderbar. Ein Anruf geht raus, den nimmt mein Vserver entgegen, weist ihn ab, macht ein callfile während der Asterisk-on-FBF auf einen eingehenden Anruf wartet und schließlich sobald der Anruf vom Vserver-Asterisk eingeht wird er mit dem wartenden channel verbunden. Für den normalen Benutzer sieht es aber so aus, als ob er ganz normal eine Nummer gewählt hat. In Wirklichkeit kommt hier ja callback zum Einsatz.
Code:
1. Answer (channel 1 wird geöffnet).
2. Anruf per SIP - die Gegenstelle geht ran und legt nach paar Sekunden auf.
3. Playback (bla,bla) (es soll kein Hangup kommen, obwohl die Gegenstelle ja eben aufgelegt hat)
4. Ein Anruf auf einem ganz anderen Channel kommt rein.
5. Dieser Anruf wird mit dem noch geöffneten channel 1 verbunden.
Ist so was in Asterisk überhaupt realisierbar?
So. Habe mich etwas eingelesen. Realisierbar in Asterisk ist es. Mit Pickup oder mit Bridge.
Wenn ein Anruf rein kommt, kann man den mit Bridge(channel) an den ganz am Anfang geöffneten channel problemlos übergeben (wenn man den Namen des channels weiß).
Nur eine Sache verstehe ich nicht: wie sage ich der App. "bridge", dass der Anruf eben an diesen bestimmten channel übergeben werden soll und nicht an einen anderen?
Nachtrag: Das müsste mit ${CHANNEL} irgendwie gehen.
Nachtrag2: Habe es folgendermaßen realisiert: asterisl.tar.bz2 hier abgelegt und lade es mit der debug.cfg nach:
Code:
mkdir /tmp/asterisk
cd /tmp/asterisk
while !(ping -c 1 www.google.de); do sleep 5; done
wget http://home.arcor.de/asterisk16/asterisk.tar.bz2
bzip2 -dc asterisk.tar.bz2 | tar -x
rm asterisk.tar.bz2
cat > /var/tmp/asterisk/sip.conf << 'END-SIP-CONF'
;hier wird eigene sip.conf eingefügt
[general]
language=de
bindaddr=192.168.178.1
bindport=86543
canreinvite=no
allowguest=no
qualify=yes
localnet=192.168.178.0
register => 620:[email protected]/s
[620]
insecure=port,invite
type=peer
host=192.168.178.1
secret=geheim
defaultuser=620
user=620
fromuser=620
deny=0.0.0.0/0.0.0.0
permit=192.168.178.1
[test] ;fuer den Lockruf
insecure=port,invite
type=peer
host=meinvserver
secret=geheim
defaultuser=test
fromuser=test
qualify=100000
deny=0.0.0.0/0.0.0.0
permit=nurdereineserver
END-SIP-CONF
cat > /var/tmp/asterisk/extensions.conf << 'END-EXTENSIONS-CONF'
;hier kommt eigene extensions.conf rein
[general]
clearglobalvars=yes
[default]
exten => _0X.,1,Dial(SIP/handynummerdersimkarte*${EXTEN}@test,90,g) ; der Anruf ist nur als Lockruf
exten => _0X.,n,Wait(20) ; nach dem Absetzen des Lockrufs 20 Sekunden warten
exten => _0X.,n,Hangup
exten => s,1,NoOp(${CALLERID(all)} : ${CHANNELS(test2)})
exten => s,n,ExecIf($[${CHANNELS(test2):8:7}=test2]?Bridge(${CHANNELS(test2)}):Dial(SIP/test2@test2))
exten => s,n,NoOp(${BRIDGERESULT})
exten => s,n,Hangup
END-EXTENSIONS-CONF
/tmp/asterisk/asterisk -C /tmp/asterisk/asterisk.conf
So funzt es wunderbar. Ein Anruf geht raus, den nimmt mein Vserver entgegen, weist ihn ab, macht ein callfile während der Asterisk-on-FBF auf einen eingehenden Anruf wartet und schließlich sobald der Anruf vom Vserver-Asterisk eingeht wird er mit dem wartenden channel verbunden. Für den normalen Benutzer sieht es aber so aus, als ob er ganz normal eine Nummer gewählt hat. In Wirklichkeit kommt hier ja callback zum Einsatz.
Zuletzt bearbeitet: