Erkennen und Melden wenn gerät Angeschlossen

schnibli89

Neuer User
Mitglied seit
27 Jun 2014
Beiträge
54
Punkte für Reaktionen
0
Punkte
6
Hallo zusammen,
Ich habe folgendes vor:
Meine Geräte:
1 x Snom 300
1 x Softphone (C-sip-sipmle)
1 x Handy auf dem auch das c-sip läuft.

Was ich bereits habe:
Wenn ein Anruf ankommt, klingelt das Softphone und das Snom300 gleichzeitig.

Mein vorhaben:
Falls Mein Softphone (2004) angemeldet ist soll Asterisk einen befehl an einen TCP Server senden, Falls sich dies erneut Anmeldet soll wieder einen Befehl gesendet werden.
(Ist dies möglich?)
Falls ein Anruf ankommt, soll dieser bei Soft und Hard Phone klingeln (Sofern das Softphone Online ist)
Falls ein Anruf ankommt und das Soft Phone nicht Angemeldet ist soll der Anruf auf das Normale Handynetzt weitergeleitet werden.

Warum:
Zurzeit habe ich das Problem das ich in meinem Snom Interface die Umleitzeit auf 5 Sekunden gestellt habe (dies wird im Interface geregelt, sodass jeder Benutzer seine Zeit einstellen kann.
Nun nach diesen 5 Sekunden Leitet mein Snom den Anruf auf das Handy-Netz auf dem auch das Softphone installiert ist. Falls dieses Soft-Phone Angemeldet ist, klingeln da 2 Anrufe ( 1 x Handynetz & 1 x Softphone) und dies möchte ich umgehen.

Ich hoffe ich konnte es verständlich erklären.
 
Dazu musst Du Dir einen AMI Daemon basteln, der die entsprechenden Events auswertet.

Ich würde das grundsätzlich anders angehen. Wenn ich Dich richtig verstanden habe, möchtest Du, dass das Snom die Umleitung aufs Handy nur dann ausführt, wenn das Softphone nicht angemeldet ist.
Die Umleitung wird wohl mittels 302 Header ausgeführt, das Snom gibt Asterisk also ein neues Ziel für den Anruf.

Wenn man den ankommenden Anruf mit einer vererbbaren Channel-Variable als solchen kennzeichnet, kann man diese bei der späteren abgehenden Verbindung zum Handy abfragen. Je nach DEVICE_STATE des Softphones kann man den Anruf zB. auf eine dummy-exten mit Wait leiten oder anderweitig verwerfen.

Alternativ könnte man, wiederum abhängig vom DEVICE_STATE des Softphones, das initiale Dial mit dem Flag i versehen. Dann sollte die Umleitung gleich gar nicht greifen.
 
Ja du hast mich genau richtig verstanden :)
Ich werde mich heute nachmittag mal damit befassen, ich denke es wird noch di eine oder andere frage auftauchen.

Vielen Dank

[Beitrag 2:]

Sorry, ich habe leider nichts genaures über deine Aussage gefunden.
Das es gar nicht auf das Handy Umleitet falls das Softphone aktiv ist, dies währe gut :s
 
Zuletzt bearbeitet von einem Moderator:
Dann füttere mal eine Suchmaschine Deiner Wahl mit den Begriffen asterisk und device_state, dial options, set, if, execif und gotoif.
 
Kann es sein das dies so gelöst werden kann (Das erkennen der Geräte

Code:
exten => _202,1,Log(NOTICE,Dial Status of ${EXTEN}: ${SIPPEER(${EXTEN},status)})
exten => _202,n,GotoIf($["${SIPPEER(${EXTEN},status):0:3}"="OK "]?ok1:forward)
exten => _202,n(ok1),Log(NOTICE,Calling number is available)
exten => _202,n,Dial(SIP/${EXTEN},50,wW)
exten => _202,n,Hangup()
exten => _202,n(forward),Log(NOTICE,Calling forward number)
exten => _202,n,Dial(SIP/201,50,wW)
exten => _202,n,Hangup()

so wie ich das sehe wird je nach Device-State eine Nummer gewählt ist dies korrekt?

Die Einfachste und sicherste lösung währe bei mir:
Wenn sich das Peer 2001 Anmelden soll:
Code:
my $url = 'https://2001/1234
aber ich weis nicht wie ich das Realisieren kann.
aufgerufen werden
 
Zuletzt bearbeitet:
Dazu musst Du Dir einen AMI Daemon basteln, der die entsprechenden Events auswertet.

Zu Deinem Code: SIPPEER(status) funktioniert nur, wenn qualify an ist. DEVICE_STATE ist davon unabhängig. Grundsätzlich wäre das so aber anwendbar.

Weil heute so schönes Wetter ist
Code:
exten => 202,n,Set(ignoreforward=${IF($[${DEVICE_STATE(softphone_am_handy)}=NOT_INUSE]?i:)})
exten => 202,n,Dial(SIP/${EXTEN},,${ignoreforward})
würde abhängig vom Status des Softphones das Flag i setzen, wodurch Weiterleitungsversuche des Snom ignoriert werden sollten.
 
Ich habe nun alles angepsst:
Code:
exten => 2002,n,Set(ignoreforward=${IF($[${DEVICE_STATE(2003)}=NOT_INUSE]?i:)})
exten => 2002,n,Dial(SIP/${EXTEN},,${ignoreforward})

2002 ist das Snom Endgerät und 2003 ist das Softphone.
Ich weis nicht ob ich es richtig verstanden habe.

Folgendes erscheint im cmd:
Code:
[Aug 11 07:05:58] WARNING[3632]: app_dial.c:1409 wait_for_answer: Unable to write frametype: 2
Gruss schnibli
 
Nein, es Leitet dennoch auf das Handynetz um.
 
Magst Du bitte ein CLI Log eines Anrufs mit verbose=3 (asterisk -rvvv) posten.
 
Logo kann ich das :)

Code:
Verbosity is at least 3
  == Using SIP RTP CoS mark 5
    -- Executing [4144xxxxxxx@incomming:1] Dial("SIP/roger-sip-account-00000088", "SIP/2002&SIP/2003") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/2002
  == Using SIP RTP CoS mark 5
    -- Called SIP/2003
    -- SIP/2002-00000089 is ringing
    -- SIP/2003-0000008a is ringing
    -- SIP/2002-00000089 is ringing
    -- SIP/2002-00000089 is ringing
    -- SIP/2002-00000089 is ringing
    -- Got SIP response 302 "Moved Temporarily" back from 192.168.61.21:5060
    -- Now forwarding SIP/roger-sip-account-00000088 to 'Local/076xxxxxxx@roger-telefon' (thanks to SIP/2002-00000089)
[Aug 12 14:15:38] NOTICE[2905]: app_dial.c:889 do_forward: Not accepting call completion offers from call-forward recipient Local/076xxxxxxx@roger-telefon-a42b;1
    -- Executing [076xxxxxxx@roger-telefon:1] Dial("Local/076xxxxxxx@roger-telefon-a42b;2", "SIP/076xxxxxxx@roger-sip-account") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/076xxxxxxx@roger-sip-account
    -- SIP/roger-sip-account-0000008b is ringing
    -- SIP/roger-sip-account-0000008b is making progress passing it to Local/076xxxxxxx@roger-telefon-a42b;2
    -- Local/076xxxxxxx@roger-telefon-a42b;1 is ringing
    -- Local/076xxxxxxx@roger-telefon-a42b;1 is making progress passing it to SIP/roger-sip-account-00000088
  == Spawn extension (incomming, 4144xxxxxxx, 1) exited non-zero on 'SIP/roger-sip-account-00000088'
  == Spawn extension (roger-telefon, 076xxxxxxx, 1) exited non-zero on 'Local/076xxxxxxx@roger-telefon-a42b;2'

Vieleicht liegt auch ein Fehler in der Extensions.conf for:
Code:
[roger-telefon]
exten => 2002,1,Dial(SIP/2002,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@roger-sip-account)
exten => 2002,n,Set(ignoreforward=${IF($[${DEVICE_STATE(2003)}=NOT_INUSE]?i:)})
exten => 2002,n,Dial(SIP/${EXTEN},,${ignoreforward})
include=>internal
 
Vieleicht liegt auch ein Fehler in der Extensions.conf vor:

Äh ja, weil der Teil, den Du gepostet hast, kann nicht der sein, der laut Log abgearbeitet wurde. Du musst das schon im incomming einbauen, wenn es dort gelten soll.

Das Prinzip der extensions.conf hast Du aber mittlerweile schon verstanden?! Wenn Du als erstes die 2002 anrufst, und danach das Softphone abfrägst, kann das sowieso nichts werden.

Den Aufbau Deines Dialplan hab ich ehrlich gesagt sowieso noch nie verstanden, was ankommend für die Nebenstelle im gleichen Context wie abgehend zu suchen hat. Aber das musst Du selber wissen.
 
Code:
[sonstige]

[an-telefon]
exten => 2000,1,Dial(SIP/2000,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@an-sip-account)
include=>internal

[ro-telefon]
exten => 2002,1,Dial(SIP/2002,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@ro-sip-account)

include=>internal

[ro-handy]
exten => 2003,1,Dial(SIP/2003,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@ro-sip-account)
include=>internal

[ma-telefon]
exten => 2001,1,Dial(SIP/2001,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@ma-sip-account)
include=>internal

[ma-handy]
exten => 2004,1,Dial(SIP/2004,60) 
exten => _0X.,1,Dial(SIP/${EXTEN}@ma-sip-account)
include=>internal

[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN})

[incomming]
exten => 2002,n,Set(ignoreforward=${IF($[${DEVICE_STATE(2003)}=NOT_INUSE]?i:)})
exten => 2002,n,Dial(SIP/${EXTEN},,${ignoreforward})
exten => 4144xxxxx8,1,Dial(SIP/2002&SIP/2003)
exten => 4144xxxxx7,1,Dial(SIP/2001&SIP/2004)
exten => 4144xxxxx5,1,Dial(SIP/2000)

Das ist nun meine extensions.conf.

Meinst du diese Zeile?
Code:
exten => 2000,1,Dial(SIP/2000,60)

Ich dachte es gehört zu den Ausgehenden Anrufen da das Snom erst nacht 5 oder 10 Sekunden Umleitet.
 
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.