XML-File via NOTIFY an snom pushen

M

mh166

Guest
Hi @llerseits,

ich versuch nun seit Tagen eine XML-Datei via NOTIFY an mein snom zu senden. Allerdings will das einfach nich funktionieren. Vllt. habt ihr ja ein paar Tipps für mich.

Code:
root@voip:~# sipsak -s "sip:[email protected]:5060" -vvv -f test.notify
fqdnhostname: 127.0.0.1  
our Via-Line: Via: SIP/2.0/UDP 127.0.0.1:37241;branch=z9hG4bK.550975de;rport;alias

New message with Via-Line:
NOTIFY sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:37241;branch=z9hG4bK.550975de;rport;alias
From: sip:[email protected];tag=as123
To: sip:[email protected]:5060
Contact: <sip:[email protected]>
Call-ID: [email protected]
CSeq: 1 NOTIFY
Content-Type: application/snomxml
Max-Forwards: 70
Event: xml
User-Agent: sipsak 0.9.6
Content-Length: 4

test


request:
NOTIFY sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:37241;branch=z9hG4bK.550975de;rport;alias
From: sip:[email protected];tag=as123
To: sip:[email protected]:5060
Contact: <sip:[email protected]>
Call-ID: [email protected]
CSeq: 1 NOTIFY
Content-Type: application/snomxml
Max-Forwards: 70
Event: xml
User-Agent: sipsak 0.9.6
Content-Length: 4

test

send to: UDP:127.0.0.1:5060

message received:
SIP/2.0 489 Bad event
Via: SIP/2.0/UDP 127.0.0.1:37241;branch=z9hG4bK.550975de;alias;received=127.0.0.1;rport=37241
From: sip:[email protected];tag=as123
To: sip:[email protected]:5060;tag=as65949603
Call-ID: [email protected]
CSeq: 1 NOTIFY
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Length: 0



** reply received after 0.037 ms **
   SIP/2.0 489 Bad event
   final received
root@voip:~#

Meine test.notify enthält folgenden Inhalt:
Code:
root@voip:~# cat test.notify 
NOTIFY sip:[email protected]:5060 SIP/2.0
From: sip:[email protected];tag=as123
To: sip:[email protected]:5060
Contact: <sip:[email protected]>
Call-ID: [email protected]
CSeq: 1 NOTIFY
Content-Type: application/snomxml
Max-Forwards: 70
Event: xml
User-Agent: sipsak 0.9.6
Content-Length: 4

test
root@voip:~#

Ich weiß ... "test" ist nicht grad xml. ;) Aber ich will ja erst mal nur die Nachricht überhaupt zum snom bekommen ...

Hat einer von euch ne Ahnung, wie ich den Schrott zum laufen bekomme? Wie ihr sicher seht steht der Asterisk-Server im Rechenzentrum und mein snom is hier lokal hinterm NAT, falls das noch von Relevanz sein sollte.

Mit sip show peer 12 hab ich die Richtigkeit des Ports auch schon überprüft. Forwarding ist auch eingerichtet (wobei telefonieren auch ohne ging...). Die Einstellungen am snom, die auf diversen Seiten empfohlen werden, habe ich auch alle vorgenommen.

Ich weiß echt nicht mehr weiter.

mfg, mh166
 
Ich bin wahrscheinlich nicht der Berufenste bei diesem Thema, aber ich kenne nur drei Alternativen:
  • Ich schicke per NOTIFY nur reinen Text an meine Telefone. Das klappt auch prima.
  • XML wird per Action-URL von (Snom-)Telefonen angefordert und dann geliefert.
  • Snom kennt noch den dialog-info+xml - für das Tastengeblinke und den Pickup. Das geht aber nur, wenn das Telefon die Nachrichten vom Asterisk auch abonniert hat (das richtige Wort ist hier subscribiert). Von "fremden" Servern nimmt das Snom-Telefon nach meinen jetzigen Erkenntnissen keine derartigen Nachrichten an (SIP 486 Subscribtion Does Not Exist)

Die Möglichkeit XML auf das Telefon zu pushen wäre mir neu, aber ich lerne gerne dazu.
 
Ich schicke per NOTIFY nur reinen Text an meine Telefone. Das klappt auch prima.
Und wie funktioniert das? Wär ja schon mal n Anfang. :D

XML wird per Action-URL von (Snom-)Telefonen angefordert und dann geliefert.
Per Action-URL hab ichs bis jetzt auch. Das Problem: ich hab auch ne Extension angelegt damit ich devstate setzen kann. Und nun wollt ichs so machen, dass das Snom beim Druck auf die Taste halt die Action-URL aufruft. Da das nich geht hab ich halt daran gedacht zumindest die erste XML-Seite per Notify ans snom zu pushen, wenn die Extension angewählt wird.

Falls du ne Idee hast wie man das anders lösen kann - immer her damit! :)


Snom kennt noch den dialog-info+xml - für das Tastengeblinke und den Pickup. Das geht aber nur, wenn das Telefon die Nachrichten vom Asterisk auch abonniert hat (das richtige Wort ist hier subscribiert). Von "fremden" Servern nimmt das Snom-Telefon nach meinen jetzigen Erkenntnissen keine derartigen Nachrichten an (SIP 486 Subscribtion Does Not Exist)
Kann man das dialog-info+xml vllt. dafür missbrauchen? Oder wozu kann man das so wirklich nutzen?

Die Möglichkeit XML auf das Telefon zu pushen wäre mir neu, aber ich lerne gerne dazu.
Hab nich überlegt, ob das möglich is ... habs einfach mal drauf angelegt. :D

mfg, mh166
 
Und wie funktioniert das? Wär ja schon mal n Anfang.

Hier ist ein Einstieg, sogar mit XML. Für Text läuft das bei mir so:

1. notify.txt sieht aus wie folgt:

Code:
NOTIFY sip:<extension>@<Telefon-IP>:<SIP-Port, an dem das Telefon lauscht> SIP/2.0
Via: SIP/2.0/UDP 192.168.1.51
From: <sip:sipsak@<IP der Maschine, wo sipsak läuft>:<SIP-Port von Asterisk>>
To: <sip:<extension>@<Telefon-IP>:<SIP-Port, an dem das Telefon lauscht>>
Contact: <sip:sipsak@<IP der Maschine, wo sipsak läuft>:<SIP-Port von Asterisk>>
Call-ID: 3c267017d009-n5mx55i2eg8g
CSeq: 1 NOTIFY
Content-Type: text/plain
Content-Length: 7

555>444
2.
Code:
/usr/bin/sipsak -L -i -vvv -f notify.txt -s sip:<extension>@<Telefon-IP>:<SIP-Port, an dem das Telefon lauscht> -H <IP der Maschine, wo sipsak läuft>

-L belaesst die Zeilenvorschuebe wie sie sind (notify.txt ist im DOS-Modus)
-i bedeutet, keine Via-Zeile einzufuegen

Im Produktivbetrieb mache ich es natürlich nicht mehr per sipsak.

Das Folgende habe ich nicht verstanden:
Das Problem: ich hab auch ne Extension angelegt damit ich devstate setzen kann. Und nun wollt ichs so machen, dass das Snom beim Druck auf die Taste halt die Action-URL aufruft. Da das nich geht hab ich halt daran gedacht zumindest die erste XML-Seite per Notify ans snom zu pushen, wenn die Extension angewählt wird.

Mir stellen sich spontan folgende Fragen: Wieso musst du eine Extension anlegen, um devstate zu setzen? Ist das eine weitere Extension auf dem Telefon? Da ist doch sicher eine. Oder meinst Du eine im Wählplan? Das hat dann aber nichts mit dem Telefon zu tun. Und was geht nicht beim Setzen einer Action-URL? Und was macht den Unterschied zwischen dem ersten Aufruf und den Folgeaufrufen? Entweder Du müsstest immer pushen oder nie - denke ich. Was willst Du eigentlich machen?

Kann man das dialog-info+xml vllt. dafür missbrauchen? Oder wozu kann man das so wirklich nutzen?

Ich bin mir nicht sicher. Die Telefone bei mir sind noch zickig was die Annahme von derartigen Nachrichten aus Fremdquellen angeht. Aber andererseits fand ich sie auch zickig, bis ich sie überredet hatte, Textnachrichten anzunehmen.

Hab nich überlegt, ob das möglich is ... habs einfach mal drauf angelegt.
Schade, denn es gibt schon einige Threads über dieses Thema im Unterforum Snom und auch in dessen Unterforum Snom->XML-Minibrowser. Mit denen habe ich mich auch dahin gewurschtelt, aber eben mit viel Überlegung um gröbste Fallen zu umgehen. Ich meine, dass dieser Thread dort besser aufgehoben wäre...?
 
Hier ist ein Einstieg, sogar mit XML. Für Text läuft das bei mir so:

Das Beispiel kenn ich schon ... hab ich genauso ausprobiert, aber funktioniert nich. Den genauen Fehler kann ich dir heut Nachmittag ja mal raussuchen, bin zur Zeit auf Arbeit, da gehts grad schlecht. ;)

1. notify.txt sieht aus wie folgt:
Werd ich auch mal ausprobieren. In der Zeile Via, die 192.168.1.51, das is die IP vom Asterisk-Server nehm ich an?

Im Produktivbetrieb mache ich es natürlich nicht mehr per sipsak.
Sondern? ^^

Und nun noch zu deinen Fragen: Ich hab mir im Dialplan ne Extension zabbix-12 angelegt. Diese Extension hab ich einer Funktionstaste aufm snom zugewiesen. Kommt jetzt von Zabbix (ne Monitoringsoftware) eine Meldung, dass ein Alarm ausgelöst wurde, dann setzt mein Script den devstate 6 für zabbix-12 und die Lampe blinkt am snom. Damit weiß ich dann sofort, dass irgendwas los ist.

Jetzt hab ich noch n zweites Script geschrieben, dass mir die Meldungen dann aufs Snom legt, über den XML-Browser, sodass ich die Buttons noch belegen kann wie ichs brauch.

Jetzt wollt ichs halt so machen, dass diese XML-Daten per Notify aufs snom gepusht werden, sobald man auf die Funktionstaste drückt. Und genau das ist mein Problem: ich kann nicht auf ein und die selbe Funktionstaste die Extension zabbix-12 legen, um den den Status zu sehen und gleichzeitig noch die Aktions-URL, damit beim Drücken der Taste die Seite aufgerufen wird.

Daher wollt ichs so machen, dass halt die Seite dann auf das snom gepusht wird, wenn man die Extension zabbix-12 anwählt. So könnte ich dann sowohl den Status sehen als auch das Menü bekommen - über ein und die selbe Funktionstaste. Das is der eigentliche Plan dabei. :)


Schade, denn es gibt schon einige Threads über dieses Thema im Unterforum Snom und auch in dessen Unterforum Snom->XML-Minibrowser.
Ich hoffe du denkst jetzt nich von mir, dass ich vorher nich gesucht hätte ... Aber alle Lösungen, die ich bis dato gefunden hab, funktionierten bei mir nicht wirklich - frag mich nich warum, wüsst ich auch gern. :D

Ich meine, dass dieser Thread dort besser aufgehoben wäre...?
Ich glaube nicht. Mein Problem ist ja nich das XML an sich, das funktioniert ja. Momentan scheitert es ja daran, dass ich das Notify nich fort bekomme. Und das liegt ja eher am Asterisk, der mir den Spaß da verdirbt.

mfg, mh166
 
In der Zeile Via, das is die IP vom Asterisk-Server nehm ich an?

Ja, habe ich übersehen. Sipsak habe ich nur zum Probieren genommen. Nun verschicke ich einfach UDP-Pakete. Ich nehme Perl für meine Skripte und mache das mit IO::Socket.

Und nun noch zu deinen Fragen: ... Das is der eigentliche Plan dabei.

Das klingt ja richtig nett. Wenn ich richtig verstanden habe, dann soll die Funktionstaste auf dem Snom sowohl der Extension zabbix zugeordnet sein, damit die LED blinkt, UND die Action-URL enthalten, die die den genauen Status von zabbix dann mittels XML-Datei in der Anzeigt bringt. OK, das wirft Fragen auf...

Ich kenne die Statusmeldungen von zabbix nicht, aber wenn sie nur kurz sind, dann lege doch in Deinem Dialplan einen Kontext für zabbix an, den die Funktionstaste dann "anruft". Dort wiederum wird ein AGI-Skript ausgelöst, das Dir die Meldung als Text auf die Anzeige bringt. Tipp: lösch die Anzeige wieder :)

Ich glaube nicht. Mein Problem ist ja nich das XML an sich, das funktioniert ja. Momentan scheitert es ja daran, dass ich das Notify nicht fort bekomme. Und das liegt ja eher am Asterisk, der mir den Spaß da verdirbt.

Ich meine nicht, dass das mit Asterisk zu tun hat, sondern mit Snom-Telefonen: an die kannst Du ohne Asterisk alles Mögliche schicken. Was kann Dein Asterisk dafür, dass die Snom-Funktionstaste nur einfach und nicht doppelt im obigen Sinne belegt werden kann?
 
Das klingt ja richtig nett. Wenn ich richtig verstanden habe, dann soll die Funktionstaste auf dem Snom sowohl der Extension zabbix zugeordnet sein, damit die LED blinkt, UND die Action-URL enthalten, die die den genauen Status von zabbix dann mittels XML-Datei in der Anzeigt bringt.
Genau das. :)

Dort wiederum wird ein AGI-Skript ausgelöst, das Dir die Meldung als Text auf die Anzeige bringt.
Genau so hatt ich das ja eigentlich geplant. Nur halt nich mit Text sondern als XML, damit kann ich dann schön noch Tasten weiter definieren un wird auch übersichtlicher.

Ich meine nicht, dass das mit Asterisk zu tun hat, sondern mit Snom-Telefonen: an die kannst Du ohne Asterisk alles Mögliche schicken. Was kann Dein Asterisk dafür, dass die Snom-Funktionstaste nur einfach und nicht doppelt im obigen Sinne belegt werden kann?
Mit dem Problem, dass ichs nich doppelt belegen kann habsch mich ja inzwischen abgefunden und will stattdessen, wie du auch vorgeschlagen hast, den Text aus dem Dialplan heraus ans Snom schicken. Und genau da is momentan mein Problem, dass der Asterisk-Server die Annahme/Weiterleitung mit Fehlern verweigert.

Geht also nur noch drum vom Asterisk aus das Notify zu verschicken, dann bin ich ja fast scho glücklich. ;)

mfg, mh166
 
... und will stattdessen, wie du auch vorgeschlagen hast, den Text aus dem Dialplan heraus ans Snom schicken. Und genau da is momentan mein Problem, dass der Asterisk-Server die Annahme/Weiterleitung mit Fehlern verweigert.

Geht also nur noch drum vom Asterisk aus das Notify zu verschicken, dann bin ich ja fast scho glücklich. ;)

Ich glaube wir haben's fast, aber in unserer Terminologie stimmt etwas nicht überein. Der Asterisk-Server, den Du meinst, ist in meinem Verständnis einfach der Rechner, auf dem das Asterisk-Programm läuft. Ein AGI-Skript ist ein (Skript-)Programm, das auch auf dem Asterisk-Rechner läuft (das muss nicht einmal so sein), wenn es vom Asterisk-Programm aus gestartet wird. Das Skript ist aber völlig unabhängig von Asterisk. Und Asterisk ist unabhängig von Deinem Skript. Eben deshalb hat Dein Skript und Deine Frage nichts mit Asterisk per se zu tun. Das ist aber jetzt schon fast ideologisch und beantwortet Deine Frage nicht. Versuch's mal mit dem reinen Textversand an Dein Telefon und dann sehen wir weiter, ok?
 
Der Asterisk-Server, den Du meinst, ist in meinem Verständnis einfach der Rechner, auf dem das Asterisk-Programm läuft.
Joar, seh ich auch so.

Ein AGI-Skript ist ein (Skript-)Programm, das auch auf dem Asterisk-Rechner läuft (das muss nicht einmal so sein), wenn es vom Asterisk-Programm aus gestartet wird.
Genau. Kann man ja im Dialplan z.B. mit System() starten. Oder halt direkt über son AGI-Aufruf...

Das Skript ist aber völlig unabhängig von Asterisk. Und Asterisk ist unabhängig von Deinem Skript.
Das ist mir klar. Aber zumindest hatte ich das so verstanden - mag sein, dass hier mein Denkfehler is - dass sipsak die Notify an den Asterisk-Server schickt und der die dann ans Snom weiterleitet. Is das etwa nich so? :confused:

Versuch's mal mit dem reinen Textversand an Dein Telefon und dann sehen wir weiter, ok?

Joar, werd ich heut nachmittag ma probieren und dir dann Bescheid geben :)

mfg, mh166
 
dass sipsak die Notify an den Asterisk-Server schickt und der die dann ans Snom weiterleitet. Is das etwa nich so?

Nein: sipsak schickt Pakete an Dein Telefon und "gaukelt dem Telefon vor", die Nachricht käme vom Asterisk-Server (mittels der Option -H). Dem Telefon ist es im Fall von Textnachrichten praktisch egal wo die Pakete herkommen.
 
Na dann versteh ich nu auch warum du meinst das gehört in n anderes Forum ... OK, dann war das also n Verständnisfehler von mir. Thx 4 info.

Wie gesagt, meld mich dann heut Nachmittag bei dir, obs denn nu geklappt hat oder nich. :)

mfg, mh166
 
Sooo... nu habschs ausprobiert. Aber tut leider nicht. :( Das Notify-file sieht jetzt so aus:

Code:
NOTIFY sip:[email protected]:5060 SIP/2.0
Via: SIP/2.0/UDP voip.a1a-server.de
From: <sip:[email protected]:5060>
To: <sip:[email protected]:5060>
Contact: <sip:[email protected]:5060>
Call-ID: 3c267017d009-n5mx55i2eg8g
CSeq: 1 NOTIFY
Content-Type: text/plain
Content-Length: 7

555>444

Losschick ich das damit:
Code:
sipsak -L -i -vvv -f test3.notify -s sip:[email protected]:5060 -H voip.a1a-server.de

Die Listener von Asterisk:
Code:
tcp        0      0 0.0.0.0:5038                0.0.0.0:*                   LISTEN      100        4457       1858/asterisk
udp        0      0 0.0.0.0:5060                0.0.0.0:*                               100        4476       1858/asterisk
udp        0      0 0.0.0.0:4569                0.0.0.0:*                               100        4460       1858/asterisk

Aber das einzige was ich immer erhalte ist ein Timeout sowie regelmäßig die Nachricht:
Code:
received ICMP message: ignoring (ICMP data is not a UDP packet)

Zu hause hab ich aber das Forwarding zum Snom aktiv:
Code:
root@zion:~# iptables-save | grep 5060
-A PREROUTING -i ppp0 -p udp -m udp --dport 5060 -j DNAT --to-destination 192.168.0.249 
root@zion:~#

Hab auch schon mal versucht die Namen der Kisten durch die IPs zu ersetzen ... gleiches deprimierendes Ergebnis. Woran kann denn das liegen?

mfg, mh166
 
Die ICMP-Pakete klingen mir sehr nach Merkwürdigkeiten in der Firewall. Klar ist, dass UDP-Pakete erwartet werden und ICMP ankommt. Klar ist auch, dass sipsak UDP schicken kann; sogar TCP, wenn ich mich nicht irre.

Versuch's doch mal ohne notwendige Firewall, also mit Snom und sipsak in einem LAN. Erst wenn das dann geht, dann zieh das Snom sonstwohin. Wenn sich in der Anzeige des Snom nichts tut, dann schaust Du schon ins SIP-Protokoll des Telefons, oder? Das lohnt sich m.E. aber erst, wenn Du Deine Firewallprobleme ausgeräumt hast, bei denen ich Dir aber nicht helfen kann.
 
Hier zwei links die Dir sicherlich auch etwas helfen können:

SipsakandSIPMESSAGE

SIPnotifyonfaxreceptionwithHylaFax

P.S.: Bist Du sicher dass dein SNOM auf port 5060 lauscht? Das ist nur der Fall wenn Du das manuell explizit so konfiguriert hast, denn sonst sucht das SNOM selbst einen non-standard port!
 
Zuletzt bearbeitet:
Ja, habe ich übersehen. Sipsak habe ich nur zum Probieren genommen. Nun verschicke ich einfach UDP-Pakete. Ich nehme Perl für meine Skripte und mache das mit IO::Socket.
Wer des PHPen mächtig ist bzw. in PHP skriptet kann anstelle der (unschönen) System-Calls für sipsack bzw. direkter Socket-Kommunikation die ziemlich nette und praktische Klasse php-sip (GPLv2) verwenden.
Die Umsetzung des Beispiels ist ziemlich "geradeaus", neben dem XML-Inhalt im Body sind ca. 7 bis 8 Zeilen nötig (plus ca. 4 bis 5 für das try/catch für die Exception), einfach beachten, dass es noch die Zeile
Code:
api->addHeader("Event: xml");
braucht und der content type "application/snomxml" sein sollte (muss?), damit der XML-Screen auch wirklich angezeigt wird!
 
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.