.titleBar { margin-bottom: 5px!important; }

mehrere ankommende Rufnummer unterscheiden

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von cmohr, 13 Sep. 2005.

  1. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    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:pw@toplink-voice.de
    
    [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/1111111@toplink-voice.de)     ; 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!
     
  2. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @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
     
  3. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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)

    ??
     
  4. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    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})
    
     
  5. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @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.


    [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
     
  6. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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:
     
  7. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @cmohr

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

    Gruß
    britzelfix
     
  8. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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/12345678910@toplink-voice.de
    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?

    :(
     
  9. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @cmohr

    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
     
  10. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Dementsprechend müsste doch die Zeile

    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...
     
  11. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @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.

    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
     
  12. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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!
     
  13. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @cmohr

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

    Gruß
    britzelfix
     
  14. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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
     
  15. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @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
     
  16. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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...
     
  17. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @cmohr

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

    Gruß
    britzelfix
     
  18. cmohr

    cmohr Neuer User

    Registriert seit:
    9 Sep. 2005
    Beiträge:
    49
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    momentan sind es nur 2 externe, es werden aber ca. 8

    jede Nummer soll zu einem anderen Gerät geleitet werden
     
  19. britzelfix

    britzelfix Gesperrt

    Registriert seit:
    28 Mai 2004
    Beiträge:
    1,099
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Braunschweig
    @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
     
  20. hmilz

    hmilz Neuer User

    Registriert seit:
    3 Okt. 2005
    Beiträge:
    25
    Zustimmungen:
    0
    Punkte für Erfolge:
    0

    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.