mehrere ankommende Rufnummer unterscheiden

cmohr

Neuer User
Mitglied seit
9 Sep 2005
Beiträge
49
Punkte für Reaktionen
0
Punkte
0
Hi,

ich habe diesen Thread auch unter "Asterisk Rufnummernplan" eingetragen, aber da ist er thematisch glaub ich falsch...
Deswegen hier noch mal:


Über einen SIP-Account kommen verschiedene Rufnummern an, diese möchte ich unterscheiden und verschiedene Aktionen ausführen (zum korrekten Gerät weiterleiten, Voicemail, Rufweiterleitung etc.)

Wie kann ich dies realisieren?

Meine Konfig-Dateien sehen bislang wie folgt aus.
Im speziellen landen momentan zwei Nummern auf der 1004. Ich müsste aber die Rufnummer xxx14 weiterleiten. Das klappt aber so nicht

sip.conf
Code:
register => user:[email protected]

[toplink-voice.de]              ; Anmeldung am Toplink-Server
type=peer
host=toplink-voice.de
username=user
fromuser=user
fromdomain=toplink-voice.de
secret=pw
nat=yes
context=sip

[sip]                           ; für ankommende Gespräche
type=friend
username=user
host=toplink-voice.de
fromuser=user
fromdomain=toplink-voice.de
nat=no
context=default
canreinvite=no


[1002]                         
type=friend
host=dynamic
defaultip=192.168.1.101
dtmfmode=rfc2833
context=sip
callerid="..." <1002>

[1003]                          
type=friend
host=dynamic
defaultip=192.168.1.102
dtmfmode=rfc2833
context=sip
callerid="..." <1003>

[1001]                         
type=friend
host=dynamic
defaultip=192.168.1.103
dtmfmode=rfc2833
context=sip
callerid="..." <1001>

[1004]                         
type=friend
host=dynamic
username=1004
secret=...
defaultip=192.168.1.104
disallow=all
allow=ulaw
allow=alaw
allow=gsm
canreinvite=yes
dtmfmode=rfc2833
context=sip
callerid="..." <1004>


extensions.conf

Code:
[default]
exten => 1004,1,Dial(SIP/1004,60)
exten => 1004,2,Congestion
exten => 1004,102,Busy
exten => xxx14,1,Answer
exten => xxx14,2,Dial(SIP/[email protected])     ; Rufnummer xxx14 wird an andere Rufnummer weitergeleitet


[sip]
include => default
exten => 1002,1,Dial(SIP/1002,20)                
exten => 1003,1,Dial(SIP/1003,20)               
exten => 1001,1,Dial(SIP/1001,20)               
exten => 1004,1,Dial(SIP/1004,20)               
exten => _0X.,1,Dial(SIP/${EXTEN:1}@toplink-voice.de)     ; Extension für externe Verbindungen bei 0


noch mal zur erläuterung: auf einen Account beim Anbieter "Toplink" kommen mehrere Rufnummern an.
Diese will ich auswerten und jede für sich einzeln einen Dialplan zuweisen (01 geht zum Gerät 1, 02 zum Gerät 2, 03 ist ein Fax usw.)

Ich habe was von Trunks und DIDs gelesen. Könnte mir dies weiterhelfen?

Danke im Voraus!
 
@cmohr

zunächst benenne mal das "[sip] ; für ankommende Gespräche " um.
Der Name verwirrt, da es auch einen sip context in der extensions.conf gibt.

So wie ich das verstanden habe willst Du nach Anrufer unterscheiden und nicht nach der angerufenen Nummer, das geht am besten so:

exten => _X./102,1,Action

Hier werden alle anrufe vom Caller mit der CallerID 102 behandelt.

Gruß
britzelfix
 
ich will schon die angerufene Nummer (meine) auswerten

1234567 -> Telefon 1
3456789 -> Telefon 2

Diese Nummern laufen aber alle auf einem SIP-Account auf, werden aber an Asterisk übermittelt.

Ich weiss nur nicht, wie ich die Nummern auswerten kann, wäre das dann so:

exten => _X./3456789,1,Dial(SIP/Tel1)

??
 
wie wäre es so?:


Code:
[sip]
exten => _X.,1,Goto(anruferauswertung, ${CALLERIDNUM}, 1)

[anruferauswertung]
exten => 1234567,1,Dial(${Telefon1})

exten => 3456789,1,Dial(${Telefon2})
 
@cmohr

nicht ganz, man muß schon unterscheiden, ob es sich
um ein ankommendes oder abgehendes Gespräch handelt.

In der sip.conf type gibt an ob es sich nur um ein rausgehendes gespräch handelt (peer) reinkommendes (user) oder raus/rein (friend) handelt.


hier also ein Beispiel:

1) Ein SIP-Phone ruft nach draußen über Toplink an,
dann ist es aus der asterisk Sicht ein über sip[1002] reinkommendes
und nach Toplink rausgehendes Gespräch.

2) Ein Gespräch kommt von Toplink an und alle SIP-Telefone sollen
Klingeln.


;sip.conf
register => user:p[email protected]/toplink

[toplink] ; Anmeldung am Toplink-Server
type=friend
host=toplink-voice.de
username=user
fromuser=user
fromdomain=toplink-voice.de
secret=pw
nat=yes
context=default

[1002]
type=friend
host=dynamic
defaultip=192.168.1.101
dtmfmode=rfc2833
context=1002
callerid=1002

;extensions.conf

....
[globals]
TOPLINK=123456

[default]

; von Toplink ankommend
exten => ${TOPLINK},1,Dial(SIP/1002&SIP/1003&SIP/1004, 60, Ttr)
exten => ${TOPLINK},2,Voicemail,u${TOPLINK}
exten => ${TOPLINK},102,Voicemail,b${TOPLINK}

[1002]

; von 1002 ankommend

exten => 1003, Dial(SIP/1003)
exten => _X,1, Dial(SIP/toplink/${EXTEN}, 60, Ttr)

[edit]
Eine kleine Korrektur:
Das Ganze ändert sich dann nach
exten => _X./3456789,1,Dial(SIP/toplink/${EXTEN}, 60, Ttr)
nur, wenn Du ein gemeinsamen Outgoing-Kontext
für alle Telfone haben willst und nur 3456789 Toplink anrufen darf.

Gruß
britzelfix
 
hi,

ich glaube es ist immer noch nicht ganz klar:

die von außen erreichbare Rufnummer 030123456 und 0303456789 geht über den Toplink-Account zum Asterisk.

Dieser soll auswerten welche Rufnummer von außen angerufen hat und es zu dem definierten internen Teilnehmer weiterleiten.

Aber wie definiere ich das?

Soll ich unter [GLOBALS] die verschiedenen Rufnummern anlegen und dann diesen einzeln einer Aktion im [default] zuweisen?

:doof:
 
@cmohr

Das geht so wie beschrieben habe.
Warum probierst Du es nicht aus?

Gruß
britzelfix
 
ich kriege es immer noch nicht hin. Beide ankommenden Nummern ...04 und ...14 klingeln auf dem gleichen Telefon und die ...14 wird nicht an eine externe Nummer weitergeleitet

Meine Dateien sehen jetzt so aus:

sip.conf

Code:
[general]
context=default                 ; Default context for incoming calls
register => ...

[toplink-voice.de]              ; Anmeldung am Toplink-Server
type=peer
host=toplink-voice.de
username=User
fromuser=User
fromdomain=toplink-voice.de
secret=PW
nat=yes
context=sip

[incoming]                           ; für ankommende Gespräche
type=friend
username=User
host=toplink-voice.de
fromuser=User
fromdomain=toplink-voice.de
nat=no
context=default
canreinvite=no

[1002]                          
type=friend
host=dynamic
defaultip=192.168.1.101
dtmfmode=rfc2833
context=sip
callerid="..." <1002>

[1003]                        
type=friend
host=dynamic
defaultip=192.168.1.102
dtmfmode=rfc2833
context=sip
callerid="..." <1003>

[1001]                        
type=friend
host=dynamic
defaultip=192.168.1.103
dtmfmode=rfc2833
context=sip
callerid="..." <1001>

[1004]                        
type=friend
host=dynamic
username=1004
secret=...
defaultip=192.168.1.104
disallow=all
allow=ulaw
allow=alaw
allow=gsm
canreinvite=yes
dtmfmode=rfc2833
context=sip


extensions.conf

Code:
[GLOBALS]
FAXNUMMER=SIP/[email protected]
TOPLINK1=20180204
TOPLINK2=20180214

[default]                               ;incoming
exten => ${TOPLINK1},1,Dial(SIP/1004,60)
exten => ${TOPLINK1},2,Congestion
exten => ${TOPLINK1},102,Busy
exten => ${TOPLINK2},1,Dial(${FAXNUMMER})               ; Rufnummer ...14 wird an Web.de Faxnummer (s.o.) weitergeleitet


[sip]
include => default           
exten => _0X.,1,Dial(SIP/${EXTEN}@toplink-voice.de)     
exten => _X.,1,Goto(anruferauswertung, ${CALLERIDNUM},1)

[anruferauswertung]
exten => ${TOPLINK1},1,Dial(SIP/1004)
exten => ${TOPLINK2},1,Dial(${FAXNUMMER})


Oder ist das Format falsch in dem ich die eingehende Rufnummer angebe?

:(
 
@cmohr

ich kriege es immer noch nicht hin. Beide ankommenden Nummern ...04 und ...14 klingeln auf dem gleichen Telefon und die ...14 wird nicht an eine externe Nummer weitergeleitet

Das habe ich nicht genau verstanden. Man muß erläutern welches Telefon (SIP oder Provider) wohin anruft. Ich würde folgende Fälle unterscheiden:
1) Ein Anruf kommt von Toplink an und SIP/1004 soll den Anruf entgegen nehmen.
2) Jedes SIP-Telefon kann sowohl ein anderes SIP-Telefon, als auch über Toplink rauswählen können.

Willst Du so etwas haben? Oder anders?


Ok, erstmal finde ich das Goto recht Interessant. Ich sehe auch was noch
unklar ist:

1) Outgoing-Context (Asterisk ruft an):

Die Zeile "exten => _X.,1,Dial(SIP/${EXTEN}@provider,60,Ttr)"
gibt an, daß die Rufnummer zuerst als regexp (_X) ausgewertet wird und dann als ${EXTEN} rausgewählt wird.

2) Incoming-Context (Asterisk wird angerufen):

Die Zeile "exten => ${TOPLINK},1,Dial(SIP/1004,60,Ttr)" gibt an,
daß der Anrufer, der sich mit der Rufnummer ${TOPLINK} identifiziert!
an SIP/1004 weitergeleitet wird. Die Nummer des Anrufers ist dann ${CALLERIDNUM}.

Ein Problem entsteht, wenn die ausgehende Rufnummer, die Du über Toplink rauswählst mit einer 1 beginnt. Das unterscheidet man am besten mit:
; outgoing
exten => _100X,1,Dial(SIP/${EXTEN},60,Ttr)
exten => _X.,1,Dial(SIP/${EXTEN}@toplink-voice.de)

Gruß
britzelfix
 
Die Zeile "exten => ${TOPLINK},1,Dial(SIP/1004,60,Ttr)" gibt an,
daß der Anrufer, der sich mit der Rufnummer ${TOPLINK} identifiziert!
an SIP/1004 weitergeleitet wird. Die Nummer des Anrufers ist dann ${CALLERIDNUM}.

Dementsprechend müsste doch die Zeile

exten => ${TOPLINK2},1,Dial(${FAXNUMMER})

bedeuten, dass die ...14 an eine andere Nummer weitergeleitet wird, diese klingelt aber trotzdem auf dem Gerät 1004. :?:


Grundsätzlich sollen alle Teilnehmer intern und extern telefonieren dürfen...
 
@cmohr

Sorry, da ist mir wohl in der Eile ein Fehler unterlaufen.
Der Absatz sollte heißen:

Die Zeile "exten => ${TOPLINK},1,Dial(SIP/1004,60,Ttr)" gibt an,
daß der Anrufer, der die Rufnummer ${TOPLINK} anruft, an SIP/1004
weitergeleitet wird. Die Nummer des Anrufers ist dann ${CALLERIDNUM}.

Wenn man auch nach dem Anrufer unterscheiden will , dann kann
man das mit "exten => ${TOPLINK}/1004,1,Dial(SIP/1002,60,Ttr)" tun.

bedeuten, dass die ...14 an eine andere Nummer weitergeleitet wird, diese klingelt aber trotzdem auf dem Gerät 1004. Question

Hmm. Der Anruf kommt über das [incoming]-Kontext der sip.conf zum [default]-Kontext der extensions.conf und dort sollte auch SIP/1004
klingeln. Alles klar? ;)

Gruß
britzelfix
 
also wenn ich dich richtig verstehe müsste es doch so klappen wie ich es habe

ich habe die beiden Rufnummern als globale Variablen TOPLINK1 und TOPLINK2 definiert und möchte bei beiden den Ruf an verschiedene Geräte weiterleiten.

Es klingelt aber nach wie vor immer gleich das 1004

ich raff's nicht :cry:

wenn ich was falsch habe kannst du mir dann bitte den Code "richten"? Ich wäre dir sehr verbunden!
 
@cmohr

Merkwürdig, ich versuche es schon eine ganze Weile.
Definier doch erstmal genau was Du haben willst.

Gruß
britzelfix
 
wie meinst du das? Hab ich doch schon geschrieben ;)

ich habe mehrere ankommende rufnummern auf einem account, die an verschiedene Geräte geleitet werden sollen...

alle geräte sollen natürlich auch raustelefonieren können
 
@cmohr

Ok. Meinetwegen Du willst von 1001 nach 1004 anrufen, nicht?
Damit jeder/jeden anrufen kann, kannst Du im [default]-Kontext folgendes eintragen:

exten => 1001, Dial(SIP/1001)
exten => 1002, Dial(SIP/1002)
exten => 1003, Dial(SIP/1003)
exten => 1004, Dial(SIP/1004)

Ganz einfach, man muß wissen woher das Gespräch kommt, wo es in der extensions.conf landet und wohin es weitergehen soll.

Gruß
britzelfix
 
ja, das hab ich auch schon so, nur hier noch nicht mit rüberkopiert.

es geht ja um die nicht funktionierenden, von außen ankommenden Telefonate...
 
@cmohr

Wieso? Du hast doch nur 2 externe Rufnummern. Was sollte passieren
wenn jemand einer der externen anruft?

Gruß
britzelfix
 
momentan sind es nur 2 externe, es werden aber ca. 8

jede Nummer soll zu einem anderen Gerät geleitet werden
 
@cmohr

Ok, ich versuche das mal zu definieren.
Du hast 4-8 SIP-Telefone die an Asterisk
angeschlossen sind. Jetzt gibt es 2 externe
Nummern bei Toplink, später werden es 8 sein.
Du willst nun, daß jedes SIP-Telefon von
extern Gespräche annehmen kann und
Gespräche nach extern führen kann.
Das gleiche gilt von und nach SIP-intern.
Stimmts?

Zugegeben, es wird viel mit 8-SIP-Telefonen und 8 Rufnummern.
Da Du zuerst einmal etwas lauffähiges haben willst, solltest Du Dir
die Arbeit so einfach wie möglich machen um auch später da
durchsteigen zu können. D.h. keine includes benutzen und für jedes
ankommende Gespräch sowohl von SIP als auch von extern den
[default]-Kontext in der extensions.conf benutzen. Jedes SIP-Telefon
sollte ein eigenen Kontext haben. Diesen definierst Du mit contex=sip4
in der sip.conf. Du solltest aber auch nur mit 2-SIP Telefonen
anfangen. Wenn alles läuft, dann kannst Du die anderen umkopieren.


Das ist zwar etwas mehr Arbeit, aber es wird laufen.
Später kannst Du es nach und nach optimieren.

Gruß
britzelfix
 
cmohr schrieb:
Wie kann ich dies realisieren?


Beispielsweise indem Du Dir mit der Funktion SIPGetHeader den To-Header holst, da steht die gerufene Nummer drin. Die Funktion ist in 1.2 schon drinne, ebenso im CVS, als Patch gegen 1.0.8 habe ich es da hin gelegt. Der Patch geht so auch gegen 1.0.9. Lies auch mal hier nach, da steht noch mehr dazu.
 
Kostenlos!

Statistik des Forums

Themen
248,869
Beiträge
2,303,429
Mitglieder
378,531
Neuestes Mitglied
margaux