Spezielle Wahlregel für einzelne Nebenstelle

ciscllc

Neuer User
Mitglied seit
19 Aug 2008
Beiträge
32
Punkte für Reaktionen
0
Punkte
6
Hallo!

Ich würde gerne einer einzelnen Nebenstelle eine spezielle Wahlregel für ausgehende Anrufe geben.
Diese soll dann die angerufene Nummer + Anrufzeit + Dauer als CSV Datei abspeichern und eine eigene Nummer anzeigen (also nicht Hauptnummer + Durchwahl). Mein VOIP Provider erlaubt CLIP.

Wie soll ich das angehen? Würde gerne ohne einer speziellen Vorwahl für ausgehende Anrufe arbeiten.

Danke!
 
Moinsen


Das geht im Dialplan mit:
Rich (BBCode):
exten => 0/_100[0-9],1,answer(250)
exten => 0/_100[0-9],2,waitexten(7200,m)
Übersetzung: Nur die Peers 1000 bis 1009 kommen mit Wahl von 0 ins Menü
 
Hey,

das versteh ich leider jetzt nicht.
Ich will ja nicht in ein Menü sondern nach draußen wählen. Und es sollen alle nach draußen wählen können, nur eine Nebenstelle soll geloggt werden und eine andere CallerID angezeigt bekommen.

Derzeit mache ich folgendes:

Code:
exten => _XXX.,1,Log(NOTICE, Dialing out from ${CALLERID(all)} to ${EXTEN} through Provider)
exten => _XXX.,n,GotoIf($["${CALLERID(num)}" = "335"]?dial2)
exten => _XXX.,n,GotoIf($["${CALLERID(num)}" != "335"]?dial1)
exten => _XXX.,n(dial1),Dial(SIP/${EXTEN}@9123456789)
exten => _XXX.,n,Goto(ende)
exten => _XXX.,n(dial2),Set(CALLERID(all)="Name" <43123456789>)
exten => _XXX.,n,Dial(SIP/${EXTEN}@9123456789)
exten => _XXX.,n(ende),Hangup()

Aber da wird es noch nicht geloggt, bzw. wird die Durchwahl 335 in dem Fall, nicht korrekt erkannt und die CallerID nicht gesetzt.

LG
 
Das Menü ( waitexten() ) ist doch nur ein Beispiel um das Beispiel kurz zu halten.
Es geht erstmal ums filtern, dass nur gewisse Peers das machen dürfen.

Eine CSV hast du wahrscheinlich schon, siehe...
/var/log/asterisk/cdr-csv
/var/log/asterisk/cdr-custom
...die passenden Einträge können z.B. mit "grep" ausgelesen und abgespeichert zur Verfügung gestellt werden.
Das kann innerhalb des Dialplans mit system() gemacht werden.

Wenn du die CallerID änderst wäre es nicht von Vorteil einen zusätzlichen Header zu haben, der P-Asserted-Identity setzt?
Denn wenn du dann vor dem Dial() die ${CALLERID(all)} änderst, änderst du auch automatisch den P-Asserted-Identity Header.

Ich weiss aber nicht ob du chan_pjsip oder chan_sip nutzt.
Für chan_sip werden dafür Einträge in der sip.conf benötigt...
Code:
[general]
; Aktiviere
trustrpid=yes
; Nimm P-Asserted-Identity dafür
sendrpid=pai
rpid_update=yes
Danach kann gesetzt werden und als Resultat wird auch P-Asserted-Identity geändert...
Code:
exten => 999,1,verbose(1,${CALLERID(all)})                
exten => 999,2,set(CALLERID(all)=EIERKOPF<1005>)          
exten => 999,3,verbose(1,${CALLERID(all)})                
exten => 999,4,goto(whitelist,${EXTEN},1)
Hier noch das Ziel...
Bildschirmfoto vom 2020-08-20 13-05-49.png
Und last but not least, das INVITE dazu aus den Support Daten der FRITZ!Box...
Code:
2020-08-20 12:55:13.314 - IN: my=192.168.188.1%12:5060 peer=192.168.188.9 port=5060 UDP, sipiface=none:
INVITE sip:[email protected];uniq=<hash> 2.0
Via: SIP/2.0/UDP 192.168.188.9:5060;branch=<hash>
From: "EIERKOPF" <sip:[email protected]>;tag=<hash>
To: <sip:[email protected];uniq=<hash>>
Call-ID: <hash>@192.168.188.9:5060
CSeq: 102 INVITE
Contact: <sip:[email protected]:5060>
Max-Forwards: 70
User-Agent: PiBX
Date: Thu, 20 Aug 2020 10:55:13 GMT
Supported: replaces
Supported: timer
P-Asserted-Identity: "EIERKOPF" <sip:[email protected]>
Allow: INVITE,  ACK,  CANCEL,  OPTIONS,  BYE,  REFER,  SUBSCRIBE,  NOTIFY,  INFO,  PUBLISH,  MESSAGE
Content-Type: application/sdp
Content-Length:   286

v=0
o=root 1439618647 1439618647 IN IP4 192.168.188.9
s=PiBX
c=IN IP4 192.168.188.9
t=0 0
m=audio 50020 RTP/AVP 9 8 0 101
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=maxptime:150
a=sendrecv
Bevor ich es vergesse, hier noch das "grep"...
Code:
grep "EIERKOPF" Master.csv | tail -n1
"""EIERKOPF"" <1005>","1005","999","whitelist","SIP/1003-00000000","SIP/1002-00000001","Dial","SIP/1002,120,md","2020-08-20 12:55:13","","2020-08-20 12:55:21","8.258951","0.000000","BUSY","DOCUMENTATION","","1597920913.0","",0
( Holt den letzten/aktuellsten Eintrag ( tail -n1 ) aus der CSV )
...ich schätze, dass das "grep" mit system('grep "EIERKOPF" /var/log/asterisk/cdr-custom/Master.csv | tail -n1') im Dialplan nach dem Hangup() erfolgen muss.
Dafür würde sich die h Extension anbieten.
Wenn das gut klappt ( Darf der "asterisk" User in /var/log/asterisk lesen? )* eine Umleitung einbauen.
;) ( system('grep "EIERKOPF" /var/log/asterisk/cdr-custom/Master.csv | tail -n1 >>/pfad/zur/eierkopf.csv') )

Impression
Bildschirmfoto vom 2020-08-20 14-17-27.png

*
Code:
osmc*CLI> !whoami
asterisk
osmc*CLI> !ls /var/log/asterisk/cdr-custom
Master.csv  Simple.csv
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ciscllc
Danke!

Ich werde es einmal mit der Grundlage versuchen!
 
Einen Schönheitsfehler hat es aber noch ;)
Die h-Extension sollte schon ( mit ExecIf() ) auf ${CALLERID(name)} oder ${CALLERID(num)} prüfen ob "EIERKOPF" den Call getätigt hat.
Sonst hagelt es natürlich mehrfache Duplikate in eierkopf.csv wenn das nicht passiert.
Das könnte dann so aussehen...
Rich (BBCode):
exten => h,n,execif($["${CALLERID(name)}"="EIERKOPF"]?system('grep "EIERKOPF" /var/log/asterisk/cdr-custom/Master.csv | tail -n1 >>/etc/asterisk/eierkopf.csv'):verbose(1,'Kein EIERKOPF gefunden'))
( Nach dem Fragezeichen: True (1) und nach dem Doppelpunkt: False (0) )
Dann wird nach Hangup() nur das verbose() ...
Code:
[Aug 20 14:47:43]  'Kein EIERKOPF gefunden!'
...ausgegeben, wenns nicht der EIERKOPF war.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ciscllc
Sehr fein!
Danke!
Muss mich noch etwas mit den CDR Einstellungen spielen, dann wird das schon was.
 
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.