[Problem] Anrufweiterschaltung ohne Ton / wird nicht ausgeführt

xrated

Mitglied
Mitglied seit
2 Jul 2012
Beiträge
788
Punkte für Reaktionen
1
Punkte
18
rentier-s: abgetrennt von http://www.ip-phone-forum.de/showthread.php?t=252533

Wenn ich ein eingehendes Gespräch aufs Handy weiterleiten möchte weil an der internen Extension niemand rangeht, brauche ich dann auch eine Bridge?

Ich habs einfach probiert im Dialplan mit:
Code:
exten => 0xx92x98780,n,Dial(SIP/10&SIP/12,20,tT) ; ring on 2 extensions
exten => 0xx92x98780,n,Dial(SIP/01xx258xx71@arcor_outx98780)

Das Handy klingelt zwar dann aber das Gespräch wird nicht verbunden, man hat keinen Ton auf beiden Seiten.
 
Zuletzt bearbeitet von einem Moderator:
Das hat zwar jetzt nichts mit dem Thema zu tun, aber dein Dialplan sieht schon richtig aus. Zuerst klingeln die ersten zwei Telefone gleichzeitig 20 Sekunden lang und dann wird dein Handy über arcor angerufen. Bridge brauchst du da nicht. Das müsste so klappen. Keine Ahnung warum da kein Ton zustande kommt. Das müsste eine andere Ursache haben.
 
Jemand meinte man bräuchte dafür a) einen eigenen channel bzw. trunk und b) NAT

Habe aber beides probiert und brachte auch nichts. Wobei ich auch nur 2 Sip Accounts bei Arcor hab.
 
Wenn ich dich richtig verstanden habe, hast du auf dem Asterisk ein eingehendes Gespräch. Er landet doch zunächst auf der Extension 0xx92x98780. Dabei klingeln zwei Telefone (SIP/10 und SIP/12). Wenn innnerhalb von 20 Sekunden keiner ran geht, dann geht der Anruf über arcor an 01xx258xx71 raus.
Das müsste funktionieren. Das sieht alles richtig aus. Versuch das mal über einen anderen Provider als arcor. Verrate paar Details mehr (wo läuft der Asterisk, sip.conf, extensions.conf usw.)
 
Wenn ich dich richtig verstanden habe, hast du auf dem Asterisk ein eingehendes Gespräch. Er landet doch zunächst auf der Extension 0xx92x98780. Dabei klingeln zwei Telefone (SIP/10 und SIP/12). Wenn innnerhalb von 20 Sekunden keiner ran geht, dann geht der Anruf über arcor an 01xx258xx71 raus.

das ist korrekt

Das müsste funktionieren. Das sieht alles richtig aus. Versuch das mal über einen anderen Provider als arcor.

Ich hätte nur noch ein Konto bei sipgate. Aber mit dem Freeaccount wird man nicht viel anstellen können.
Was mir aber gerade einfällt, für NAT hatte ich die Ports am Router nicht geöffnet. Könnte es sein das man NAT braucht dafür?

Verrate paar Details mehr (wo läuft der Asterisk, sip.conf, extensions.conf usw.)

Also in der sip.conf habe ich 2 Nummern von Arcor als Trunk und 3 Extensions (alle im LAN). Den Port habe ich auf 8060 geändert.

Asterisk ist Version 1.6.2

Dialplan steht hier (noch ohne Forward): http://www.ip-phone-forum.de/showthread.php?t=253696&p=1866731&viewfull=1#post1866731
 
Wo steht dein Asterisk? Auf welchem Server läuft er? Hat er eine öffentliche IP (aus dem Internet erreichbar)? Poste die sip.conf, poste die jetzige extensions.conf (di e im Link scheint nicht die gleiche zu sein).
 
Wo steht dein Asterisk?

im LAN

Auf welchem Server läuft er?

Debian

Hat er eine öffentliche IP (aus dem Internet erreichbar)?

dynamische öffentliche IP. Erreichbar ist der SIP Port aus dem Internet allerdings nicht, deswegen die Frage ob ein extra NAT Setup überhaupt notwendig ist.
Auf dem Router sind die SIP Ports derzeit nicht forgewardet weil man das ja nicht braucht wenn alle Telefone im LAN sind.

Poste die sip.conf, poste die jetzige extensions.conf (di e im Link scheint nicht die gleiche zu sein).

Bei extensions.conf musst du dir nur die eine Zeile von oben dazu denken

;phone xx1
exten => 08192xx1,1,GotoIf(${BLACKLIST()}?spamtrap)
exten => 08192xx1,n,GoToIfTime(20:00-05:59,mon-sun,*,*,*?weasels,s,1)
exten => 08192xx1,n,System(/usr/local/bin/rtthrottle.sh 1 1)
;exten => 08192xx1,n,SET(GROUP()=trunkgroup1)
exten => 08192xx1,n,Dial(SIP/11,60,tT)
exten => 08192xx1,n,Dial(SIP/01xx258xx71@arcor_outx98780)
exten => 08192xx1,n,Hangup

sip.conf
Code:
[general]
language=de ;for voiceprompts
context=default                ; Default context for incoming calls
                                ; 'username' field from the authentication line
                                ; instead of the From: field.
allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)
udpbindaddr=0.0.0.0             ; IP address to bind UDP listen socket to (0.0.0.0 binds to all)
                                ; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)

alwaysauthreject=yes		;send always same error message, to avoid successfull scanning from hackers

registertimeout=70

port=8060

srvlookup=no			;arcor needs no?

disallow=all
allow=g729
allow=alaw
allow=ulaw
allow=gsm

localnet=192.168.2.0/24

directmedia=no		;same as canreinvite, force relaying
qualify=yes		;check if client is responsive, default no
allowguest=no

[arcor_in]
;context for incoming calls, this is needed and only once, so all calls are sorted in the correct context
;important: this context has to be before all dial out contexts
type=peer
fromdomain=0x192.sip.arcor.de
host=0x192.sip.arcor.de
context=incoming-arcor

[arcor_outx98780]
;context for dialing out
type=peer
username=0x192x98780
fromuser=0x192x98780
authuser=0x192x98780
host=0x192.sip.arcor.de
fromdomain=0x192.sip.arcor.de
secret=xxx
insecure=invite ;trust address without authentication
;insecure=invite,port ; equals to old very, port is to ignore port number
;context=incoming-arcor ;use only if no separate inbound trunk exists
deny=0.0.0.0/0.0.0.0
permit=xx.79.152.249/255.255.255.255

[arcor_outx099]
;context for dialing out
type=peer
username=0x192x099
fromuser=0x192x099
authuser=0x192x099
host=0x192.sip.arcor.de
fromdomain=0x192.sip.arcor.de
secret=xxx
insecure=invite ; dont require authentication
;insecure=invite,port ; equals to old very, port is to ignore port number
;context=incoming-arcor ;use only if no separate inbound trunk exists
deny=0.0.0.0/0.0.0.0
permit=xx.79.152.249/255.255.255.255

[10]
type=friend ; normaly peer should be used but geotek uses friend
host=dynamic ;allow all ip adresses 
;host=192.168.2.4
secret=xxx
context=phonesx98780 ;dialplan in extensions.conf
callerid=Thomas <10>
useragent=CSCO/7 ;when provider is blocking the default Asterisk PBX string, its just a vendor string
deny=0.0.0.0/0.0.0.0
permit=192.168.2.0/255.255.255.0 ;allow login only from this network

[11]
type=friend
host=dynamic
;host=192.168.2.4
secret=xxx
context=phonesx099
callerid=Monika <11>
useragent=CSCO/7
deny=0.0.0.0/0.0.0.0
permit=192.168.2.0/255.255.255.0

[12]
type=friend
host=dynamic
secret=xxx
context=phonesx98780
callerid=Thomas Mobil <12>
useragent=CSCO/7
deny=0.0.0.0/0.0.0.0
permit=192.168.2.0/255.255.255.0
 
Zuletzt bearbeitet:
Auf dem Router sind die SIP Ports derzeit nicht forgewardet weil man das ja nicht braucht wenn alle Telefone im LAN sind.
Sobald du externe Peers einbindest (z.B. SIP-Provider) wirst du darüber noch mal nachdenken müssen.
 
Mal von NAT abgesehen, dass habe ich noch nicht weiter getestet.

Aber ist dieses Beispiel überhaupt lauffähig?
http://das-asterisk-buch.de/1.6/section-callforwarding.html#einfaches-callforwarding

Ich habs fast 1:1 so und ${DB(CF/${EXTEN})}) wird bei mir als leer angezeigt in der CLI.

In der Asterisk DB steht das in der Art drin (10 wäre die interne Extension):
/CF/10 : forwardnummer

Müsste da nicht die volle Rufnummer rein?
 
Zuletzt bearbeitet:
Wenn Du ${DB(CF/${EXTEN})}) verwenden willst und ${EXTEN} 08192xx1 ist, musst Du in der AstDB natürlich einen Eintrag /CF/08192xx1 haben.

Zu dem fehlenden Ton, rmh hat Dich bereits darauf hingewiesen, dass Du für die Anbindung eines SIP-Providers Portforwarding brauchen wirst. Außerdem fehlen Dir externhost/externrefresh bzw. externip.

Bist Du Dir mit dem port=8060 sicher, oder meintest Du bindport?
 
Also den incoming port habe ich eben mit port=8060 entsprechend abgeändert.

Ist das dann überhaupt möglich wenn man z.B. mit dem Telefon 95forwardnr wählt, dass man dann im Dialplan entsprechend einen Forwarder auf die richtige Nummer (wenn man mehrere Nummern hat) setzen kann? Weil CALLERID(num) ist ja nur die interne Extension.

So macht das ja nicht recht viel Sinn:
Code:
[extCFenable]
exten => _95X.,1,Answer()
exten => _95X.,n,Set(DB(CF/${CALLERID(num)})=${EXTEN:2})
exten => _95X.,n,Playback(/usr/local/share/asterisk/sounds/call-forwarding)
exten => _95X.,n,Playback(/usr/local/share/asterisk/sounds/for)
exten => _95X.,n,SayDigits(${EXTEN:2})
exten => _95X.,n,Playback(/usr/local/share/asterisk/sounds/activated)
exten => _95X.,n,Hangup

Jedes Telefon sollte nur da was setzen, wessen Trunk auch benutzt wird.
 
Das Beispiel geht von einem Aufbau mit Durchwahlen aus, da ist die gewählte Nummer gleich der Nebenstelle. Für Deinen Zweck musst Du ein Mapping Rufnummer<->Nebenstelle einbauen, entweder beim setzen der Umleitung oder beim Auswerten.

http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf schrieb:
port = <portno> : Default SIP port of peer. (this is not the port for Asterisk to listen. See bindport).
 
ok, danke mit dem bindport. Ich hatte ja port=8060 und es ging trotzdem, vielleicht ist da ein Failback auf 5060 mit drin.

Wegen dem Mapping wüsste ich jetzt nur mit einer Variable in Globals (aber wie verbindet man das mit der Nebenstelle) oder gibts da noch andere Möglichkeiten?
Wenn das zu kompliziert wird, kann ichs auch rauslassen und nur via Web (asterisk -rx) steuern.
 
Zuletzt bearbeitet:
Du hast ja für ankommende Gespräche sowie die jeweilige Nebenstelle im Dial definiert.
Dementsprechend darfst Du nicht
exten => 08192xx1,n,GotoIf($[foo${DB(CF/${EXTEN})} != foo]?normal:forward)
verwenden, sondern musst ${EXTEN} durch die jeweilige Nebenstelle ersetzen.

Zum Beispiel
exten => 08192xx1,n,GotoIf($[foo${DB(CF/123)} != foo]?normal:forward)
exten => 08192xx1,n(normal),Dial(SIP/123)

Wenn es mehr Nebenstellen werden, empfielt sich das Mapping sowieso über eine Datenbank (AstDB oder eine externe). Dann brauchst Du die Zuordnung nur an einer Stelle pflegen und kannst sie für ankommend, abgehend und eben Funktionen wie AWS verwenden.
Der Idealfall ist es natürlich, als Nebenstellennummern grundsätzlich die letzten zB. 2 Stellen der MSNs zu verwenden. Dann lässt sich alles wie bei Anlagenanschlüssen mit Durchwahl einfach 1:1 umsetzen.
 
Code:
exten => 0x1921xx80,n,Set(PHONEEXT=${DB(CF/${EXTEN})})
exten => 0x1921xx80,n,GotoIf(${PHONEEXT}=0?normal:forward)
exten => 0x1921xx80,n(normal),Dial(SIP/10,30,tTM(throttleon)) 
exten => 0x1921xx80,n(forward),Set(FWDNR=${DB(CF/${PHONEEXT})})
exten => 0x1921xx80,n(forward),NoOp(Call for ${EXTEN} on EXT ${PHONEEXT} will be forwarded to ${FWDNR})
exten => 0x1921xx80,n(forward),Dial(SIP/${FWDNR}@arcor_out1xx80,30,tTM(throttleon))

würde das so gehen und wenn die Zeile normal ausgeführt wird, würde dann mit forward weitergemacht werden wenn keiner abhebt oder wird das ausgelassen?

Edit: Ne das obere macht ja auch wieder keinen Sinn, wenn ein User über Telefon bzw. Dialplan den Forwarder ein/ausschalten möchte dann bekomme ich ja nicht raus wie dem seine volle Nummer ist, sondern nur seine interne Extension über CALLERID(num).
Und die volle Nummer fest im Dialplan eintragen, bringts auch nicht.
Das sinnvollste und nicht zu komplizierteste wird wohl sein wenn man über Web die Zuordnung Rufnummer zu Forwardnr einträgt.
 
Zuletzt bearbeitet:
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.