channel originate: lokaler Anrufer "Anonymous"

Jarod42

Neuer User
Mitglied seit
18 Dez 2013
Beiträge
7
Punkte für Reaktionen
0
Punkte
1
Hi,

seit ein paar Tagen betreibe ich erfolgreich ein paar Cisco Telefone an einem Asterisk 16.3.0 Server hinter einer Fritzbox.
Die meisten Konfigschnipsel habe ich mir aus Beispielen zusammengesucht und ein wenig angepasst, nachdem ich mich durch einen Teil der Asterisk-Doku gekämpft hatte.
Jetzt möchte ich gern die Möglichkeit haben Remote-Dial einzurichten. Ich möchte mein Telefon eine Nummer wählen lassen, ohne dass ich diese auf dem Nummernblock des Telefons eingeben muss.
Das Ganze funktioniert im CLI mittels channel originate Local/302@extensions extension 0106919725@outboundauch ohne Probleme.
Leider steht auf dem VoIP Telefon dann "Anonymous" als Anrufender.
Kann mir vielleicht jemand sagen, was ich tun muss, damit dort die zu wählende Rufnummer angezeigt wird?

Vielen Dank im Voraus
Jarod


Hier meine Konfig:

sip.conf:
INI:
[general]
localnet=10.x.xx.0/24

rtpstart=10000
rtpend=20000

sendrpid=pai
allowguest=no
allwaysauthreject=yes
context=default                  ; Default context for incoming calls. Defaults to 'default'

allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)
udpbindaddr=10.x.xx.42             ; 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)

tcpenable=yes                    ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=10.x.xx.42             ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)

transport=udp                   ; Set the default transports.  The order determines the primary default transport.
                                ; If tcpenable=no and the transport set is tcp, we will fallback to UDP.

srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
language=de                     ; Default language setting for all users/peers
                                ; This may also be set for individual users/peers
tonezone=de                     ; Default tonezone for all users/peers
                                                               ; retry rules.

tlscipher=AES128-SHA:AES128-SHA256:AES256-SHA:AES256-SHA256:NULL

register => Leitung1:[email protected]:5060/620
;register => Leitung2:[email protected]:5060/621

[authentication]


[extension](!)
description=Asterisk Server
type=friend
context=extensions
nat=no
trustrpid=no
sendrpid=rpid
rpid_update=yes
rpid_immediate=yes
parkinglot=default
allowsubscribe=yes
notifyhold=no
callcounter=yes
videosupport=no
disallow=all
;allow=ulaw,alaw,g722
insecure=invite
call-limit=15
host=dynamic
canreinvite=yes
directmedia = no
qualify=yes ;Asterisk will periodically check the availability of the phone
dtmfmode=rfc2833

[gateway](!)
description=Fritz!Box Registrar
context=inbound
call-limit=15
;type=friend
type=peer
;insecure=port,invite
insecure=invite
nat=force_rport,comedia
;nat=no
fromdomain=fritz.box
secret=passwd
qualify=yes
host=1xx.xxx.xxx.xxx
canreinvite=yes
directmedia=no
dtmfmode=rfc2833
allow=!all,g722,alaw,ulaw

[fbfgateway0](gateway)
defaultuser=Leitung1
fromuser=Leitung1

[fbfgateway1](gateway)
defaultuser=Leitung2
fromuser=Leitung2

[cisco-usecallmanager](!,extension)
transport=tcp
cisco_usecallmanager=yes
cisco_pickupnotify_alert=from,to
cisco_pickupnotify_timer=5
cisco_keep_conference=no
cisco_multiadmin_conference=yes
dndbusy=yes
huntgroup_default=no

[insecure-mode](!)
transport=tcp

[authenticated-mode](!)
transport=tls

[encrypted-mode](!)
transport=tls
; The res_srtp module needs to be loaded. encryption_taglen is set per-model below
encryption=yes

[cisco-9971](!,cisco-usecallmanager)
busylevel=5
call-limit=6
; <videoCapability> also needs to be enabled in SEPMAC.cnf.xml
videosupport=yes
; Allow the video codec
allow=ulaw,alaw,g722,h264
;allow=h264
encryption_taglen=80

[cisco-7911](!,cisco-usecallmanager)
busylevel=2
call-limit=2
disallow=all
allow=alaw,ulaw
; <videoCapability> also needs to be enabled in SEPMAC.cnf.xml
videosupport=no
encryption_taglen=80

[301](cisco-9971,insecure-mode)
secret=mysecretpw
callerid="User1" <301>
description=User1
callgroup=1
pickupgroup=1
mailbox=301@default


[302](cisco-7911,insecure-mode)
secret=mysecretpw1
callerid="User2" <302>
description=User2
callgroup=1
pickupgroup=1
mailbox=302@default

extensions.conf:
INI:
[general]

static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp             ; Console interface for demo



[call-extension]
;see http://usecallmanager.nz

exten => _X.,1,Set(PEERNAME=${EXTEN})
; By manually checking for call-forwarding, the call can be forwarded even if the phone is unregistered
same => next,Set(CALLFORWARD=${SIPPEER(${PEERNAME},callforward)})
same => next,GotoIf($[${LEN(${CALLFORWARD})} != 0]?callforward,1)
same => next,Set(MAILBOX=${SIPPEER(${PEERNAME},mailbox)})
; Phones can be made to play a different ring using the Alert-Info header, see Ring Tones for examples
same => next,ExecIf($[${LEN(${ALERT_INFO})} != 0]?SIPAddHeader(Alert-Info: <${ALERT_INFO}>))
same => next,Dial(SIP/${PEERNAME},30)
same => next,Goto(${TOLOWER(${DIALSTATUS})},1)

; Cisco SIP phones support displaying diversion information
exten => callforward,1,SIPAddHeader(Diversion: "${SIPPEER(${PEERNAME},callerid_name)}" <sip:${SIPPEER(${PEERNAME},callerid_num)}@localhost>\;screen=yes\;privacy=off)
same => next,Goto(extensions,${CALLFORWARD},1)

; If ${MAILBOX} is empty send congestion, otherwise go to voicemail extension below
exten => congestion,1,ExecIf($[${LEN(${MAILBOX})} = 0]?Congestion(10))
same => next,Set(GREETING=u)
same => next,Goto(voicemail,1)

; If ${MAILBOX} is empty send busy, otherwise go to voicemail extension below
exten => busy,1,ExecIf($[${LEN(${MAILBOX})} = 0]?Busy(10))
same => next,Set(GREETING=b)
same => next,Goto(voicemail,1)

exten => noanswer,1,Goto(congestion,1)
exten => chanunavail,1,Goto(congestion,1)

exten => voicemail,1,Answer()
same => next,Wait(0.5)
same => next,VoiceMail(${MAILBOX},${GREETING})
same => next,Hangup(normal_clearing)

[outbound]
; dial out via Fritzbox
;;test... we need to dial 01 for an outside line so we need to strip that off again
exten => _01X.,1,Dial(SIP/${EXTEN:2}@fbfgateway1,120)
;;route emergency calls to outside
exten => _11X.,1,Dial(SIP/${EXTEN}@fbfgateway1,120)

;access special extensions on the Fritz!Box e.g. Voicebox
exten => _**6X.,1,Dial(SIP/${EXTEN}@fbfgateway1,120)

;enable calls with leading country code "+" (+49 Germany only )
exten => _+49X.,1,Dial(SIP/${EXTEN}@fbfgateway1,120)



[extensions]

;see http://usecallmanager.nz

include => parked-calls

exten => 301,1,Goto(call-extension,${EXTEN},1)
; Note the duplication of the hint peername
same => hint,SIP/301,SIP/301
exten => 302,1,Goto(call-extension,${EXTEN},1)
same => hint,SIP/302,SIP/302

; probaly needed in order to make conf calls
exten => _[x]-cisco-serviceuri-.,1,Goto(${EXTEN:19},1)

; Enable call-forwarding
exten => _cfwdall-.,1,Answer()
same => next,Set(SIPPEER(${CHANNEL(peername)},callforward)=${EXTEN:8})
same => next,Hangup(normal_clearing)

; Disable call-forwarding
exten => cfwdall,1,Answer()
same => next,Set(SIPPEER(${CHANNEL(peername)},callforward)=)
same => next,Hangup(normal_clearing)

include => outbound

[inbound]
exten => s,1(strange),NoOp(Nummer unbekannt oder nicht abgefangener Fehler)
same  => n(nomatch),Answer()
same  => n(wait),Wait(1)
same  => n,Goto(exit)
same  => n(NOANSWER),NoOp(NOANSWER or TIMEOUT reached)
same  => n,VoiceMail(301@default,su)
same  => n,Goto(exit)
same  => n(BUSY),NoOp(Is BUSY or has CANCELED)
same  => n(voicemail),VoiceMail(301@default,sb)
same  => n,Goto(exit)
same  => n(CHANUNAVAIL),NoOp(CHANUNAVAIL or PEER NOT REGISTERED)
same  => n,VoiceMail(301@default,su)
same  => n(exit),Hangup()

exten => _62.,1(start),NoOp("${CALLERID(num)}" "-->" "${EXTEN}")
same => n(snom_ringtone),SipAddHeader(Alert-Info: <http://osmc/ctu.wav>)
same => n,GotoIf($["${EXTEN}" = "620"]?dialall)
same => n,GotoIf($["${EXTEN}" = "621"]?dial2)
same => n(nomatch),Hangup()
same => n(dialall),Dial(SIP/301&SIP/302)
same => n,Goto(exit)
same => n(dial2),Dial(SIP/302)
same => n,Goto(exit)
same => n(exit),Goto(s,${DIALSTATUS})

res_parking.conf:
INI:
[general]

[default]                       ; Default Parking Lot
; If you never dial the parkext from the keypad you can just use 'park'
parkext=park
; 10 parking extension slots
parkpos=380-389
findslot=first
context=parked-calls
comebackcontext=parked-calls-timeout
parkinghints=yes
parkingtime=60
; Used by the Park Monitor feature on the 7800 series, 8800 series, 8961 and 9900 series models
remindertime=50
comebackdialtime=15
comebacktoorigin=yes
findslot => next
 
Also... ich habe herausgefunden, wie man die CallerID setzen kann. Was so ungefähr dem entspricht, was ich gern möchte.
Fügt man in der /etc/asterisk/extensions.conf direkt hinter:

INI:
[call-extension]
exten => _X.,1,Set(PEERNAME=${EXTEN})

Folgendes ein:
INI:
same => n,GotoIf($["${EXTEN:0:1}" != "3"]?setcallerid)
same => n(setcallerid),Set(CALLERID(name)=Asterisk Server)

Dann bekommen alle Anrufer, die zwar lokalen Urspungs sind, aber von keinem der Telefone kommen den Namen "Asterisk Server".
Zur Erklärung: Meine beiden Telefone haben die Extension 301 und 302. Somit ist ${EXTEN:0:1} immer 3, wenn ich von einem der Telefone aus wähle. Wenn es nicht 3 ist, soll CALLERID(name) auf einen neuen Wert gesetzt werden.

Nur ist das leider erst die halbe Miete.
Ich möchte ja gern die Zielnummer des "originate" Aufrufs angezeigt bekommen. Leider hab ich in der ganzen Doku keine Variable identifizieren können, die diese Nummer enthält.

Hat jemand vielleicht eine Idee, wie man das erreichen kann?

Danke schon mal und schöne Grüße.
Jarod
 
Moinsen


Unabhängig von der Extension und mit einer Rückruf fähigen Nummer geht das auch unter Verwendung von globalen Variablen.
extensions.conf
Code:
[globals]
ORIG1=''
ORIG2=''
...und CALLERID(all) im originate Kontext wo die nach Abhängigkeit gelesen oder/und gesetzt...
Code:
[originate]
exten => _X.,1(originate),Verbose(1,Originating call to ${EXTEN})
exten => _X.,2(if_one),ExecIF($[GLOBAL(ORIG1)='']?Set(GLOBAL(ORIG1)=${EXTEN}):Set(GLOBAL(ORIG2)=''))
exten => _X.,3(if_two),ExecIF($[GLOBAL(ORIG2)='']?Set(GLOBAL(ORIG2)=${EXTEN}):Set(GLOBAL(ORIG1)=''))
exten => _X.,4(mkcid),ExecIF($[GLOBAL(ORIG1)=GLOBAL(ORIG2)]?Set(CALLERID(all)=Asterisk PiBX<100>):Verbose(1,Second Call goes to ${EXTEN}))
exten => _X.,5(dial),Dial(SIP/${EXTEN},${DSRING},${DFLAGS})

exten => h,1,Verbose(1,Last CID: ${CALLERID(all)} NUM: ${CALLERID(num)})
exten => h,2,ExecIF($[GLOBAL(ORIG1)=${CALLERID(num)}]?Set(GLOBAL(ORIG1)=''))
exten => h,3,ExecIF($[GLOBAL(ORIG2)=${CALLERID(num)}]?Set(GLOBAL(ORIG2)=''))
...werden.
Der/Die Trick/Logik dabei ist, dass nur der erste Anruf die CALLERID(all) setzt.
...besonders dann wenn das Ziel auch im originate Kontext liegt.

PS: Bei einem ordentlichen IP-Telefon, wie ein SNOM 320, sieht man das Ziel (Name oder Nummer)
...es kommt also auch auf das Endgerät an.
 
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.