[Frage] Anrufname im Display mit MySQL - Anbindung

msa1989

Neuer User
Mitglied seit
3 Aug 2011
Beiträge
6
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich habe zum testen ein snom 710 gekauft um mich in Sachen IP-Telefonie ein wenig weiter zu bilden.
Im ersten Schritt wollte ich gerne den Namen des Kunden anzeigen der gerade anruft. Diese Funktion wollte ich mit Hilfe dem integrierten XML-Minibrowser umsetzen. Unser Warenwirtschaftssystem basiert auf einer MS-SQL Datenbank. Für diesen Test habe ich die Kunden-Tabelle in eine MySQL-Datenbank auf einem lokalen XAMPP-Server kopiert. Die Tabelle hab ich um 2 Spalten erweitert: "query_number1" und "query_number2". Diese Spalten werden automatisch mit den "bereinigten" Telefonnummern gefüllt (alle in dem Format: 00491234567890).

Im snom 710 hab ich die IP des lokalen XAMPP-Servers als Action URL eingetragen:
Code:
http://192.168.100.9/incoming_call.php?remote=$remote

Im Anhang wäre die Datei "incoming_call.php" falls es jemand benötigt. (Ich habe versucht alles detailliert zu kommentieren).
Falls die Rufnummer erkannt wird, wird ein XML-Objekt mit den gewünschten Informationen ausgegeben.

Das Telefon zeigt mittlerweile wie gewünscht die Kundennamen an. Ich habe in meiner aktuellen Version noch ein paar weitere Informationen eingefügt wie den Kundenstatus, oder wenn vorhanden eine offene Auftragsnummer. Mich würde interessieren was ihr zu diesem Vorgehen sagt? Gibt es für diesen Anwendungsfall eine schlauere Lösung die ich noch nicht weiß?

Vorteilhaft finde ich bei diesem Verfahren, dass die Informationen die ich übergebe nicht im Telefonbuch des snom gespeichert werden. Soweit ich Informiert bin kann ich im internen Telefonbuch lediglich 1000 Nummern speichern, was zu wenig für meine Kundendatenbank wäre. Deswegen habe ich mir dann dieses Verfahren überlegt.

Ich freue mich über jeden Kommentar sowie Anregungen zu anderen eventuell besseren Verfahren.

Viele Grüße
Michi

Edit: Hab die aktualisierte Version hochgeladen falls es jemand braucht
Anhang anzeigen skript.zip
 
Zuletzt bearbeitet:
Die Vorgehensweise ist in Ordnung, ich habe das sehr ähnlich umgesetzt. Der Vorteil ist auch, dass Du in Deinem Abfrageskript bei Bedarf auch auf alles mögliche reagieren kannst, zum Beispiel wenn die Nummer von einem Provider mal anders gesendet wird als erwartet, kannst du problemlos "+" durch "00" ersetzen etc. bevor Du auf die Datenbank los gehst. Du bleibst also flexibel wenn sich mal was ändert am Setup. Zusätzlich lassen sich so auch recht leicht weitere Datenquellen einbauen. In meinem Fall gehe ich zum Beispiel (wenn ich in meiner Datenbank keinen Treffer habe) auf die online Rückwärtssuche von einer Telefonbuchanbieter Website los und schaue ob ich die Nummer dort finde.

In weiterer Folge kannst Du dann auch mal direkt auf die MS-SQL Datenbank losgehen.

Was ich Dir schonmal voraussagen kann ist, dass diese Methode (ich hab sie ja schon seit 6-7 Jahren im Einsatz) leider immer wieder mal Probleme mit neueren Firmware Versionen macht. Ich musste hier im Laufe der Jahre immer wieder mal Anpassungen vornehmen, um unerwünschten Verhalten nach Firmware Updates auszuweichen.
Aktuell zum Beispiel kämpfe ich bei der Firmware 8.7.5.15 wieder mit dem Problem, dass ein Telefon unter gewissen Umständen hängen bleibt an dem Punkt wo es die Daten am Display anzeigt. Siehe dazu zb. diesen Thread, das letzte Posting ist von mir, leider wie so oft keine Reaktion von SNOM bisher. https://forum.snom.com/index.php?showtopic=10027
 
Zuletzt bearbeitet:
@IEEE
vielen dank für die Infos. Bringt mich schon wieder auf neue Ideen. Ich lasse jetzt die Telefonnummer über meine komplette Formattierung laufen. Die hab ich so geschrieben, dass jedes mir vorstellbare Telefonnummernformat mit dem Format "004912736278346" rauskommt. Diese Funktion hab ich auch zum kopieren der Rufnummer in die anderen Spalten meiner Tabelle verwendet. Nimmst du für den Telefonbuchvergleich die API vom TVG Verlag?

Bei dem XML-Minibrowser in dem verlinkten Thread ist mir gleich etwas aufgefallen. Meine Datei spuckt momentan ein "SnomIPPhoneDirectory" Objekt aus:
Code:
<SnomIPPhoneDirectory>
  <Title>Menu</Title>
  <Prompt>Prompt</Prompt>
  <DirectoryEntry>
  	<Name>Michael Bauer</Name>
  	<Telephone>01234567890</Telephone>
  </DirectoryEntry>
</SnomIPPhoneDirectory>

In dem von dir verlinkten Thread wird ein "SnomIPPhoneText" Objekt gesendet:
Code:
<SnomIPPhoneText state="relevant">
<Title>Eingehender Anruf</Title>
<Text>
Michael</Text>
</SnomIPPhoneText>

Anscheindend funktioniert beides. Logischer für den Anwendungsfall erscheint mir das zweite. Denn ich möchte ja nur einen Text ausgeben. Jetzt hat bei mir halt gleich der erste Versuch funktioniert. Soll ich das besser ändern?

Viele Grüße
Michi
 
Ich würds ändern. Weil das Phonedirectory Objekt eigentlich nicht für sowas gedacht ist IMHO. Läufst sonst Gefahr dass es eines Tages nach einem Update zu unerwünschtem Verhalten kommt.
 
Abend

Das ist ja IP-Telefon basiertes Datenbanking. ;)

Alternativ, oder zusätzlich kann auch über das SIP Protokoll eine Nachricht veschickt werden.
Damit mein ich direkt aufs Display vom SNOM.
Es wird nicht unmittelbar angezeigt, sondern nur auf dem Ruhebildschirm.
...bis es durch einen anderen Text esetzt wird.

Benötigtes Tool: sipsak
Beispielaufruf:
Code:
sipsak -i -vvv -M -B "Max Mustermann" -s sip:benutzername@snom-ip-oder-hostname
In PHP könnte der Aufruf also über...
PHP:
$erg = shell_exec('sipsak -i -M -B '.$DB_NAME.' -s '.$SNOM);
...realisiert werden.

Das war: ip-telefonisch :mrgreen:
 
Zuletzt bearbeitet:
@koyaanisqatsi
Dazu müsste ich folglich das sipsak auf meinem lokalen Server installieren und meine incoming_call.php müsste dann mittels shell_exec das Tool aufrufen und an die entsprechende SIP-ID eine Nachricht schicken? Hört sich echt interessant an, ist mir jetzt aber entschieden zu viel Aufwand.

Bin erstmal froh dass das andere soweit so gut läuft. Hab den aktualisierten Code hochgeladen. Eventuell kann es ja irgendjemand für seine Projekte verwenden.
Sollte der oder die einen MS-SQL Server für seine Kundendaten einsetzen, so müssen halt ein paar Zeilen angepasst werden. Außerdem sollte man generell überprüfen ob die sql-Anfrage auf die eigene Datenbank passt ;)
 
Moin

Schade, es ist nur eine winzigkleine Binary die "installiert" werden muss.
...und du würdest mehr über das SIP Protokoll lernen.

Ich persönlich stehe mehr auf das serverlose SQL: SQLite3
Zum Vergleich...
Dein Datenbanköffner...
PHP:
define("DB_HOST", "localhost");
define("DB_NAME", "test");
define("DB_USER", "root");
define("DB_PASS", "root");
$MainDB = new MySQLi(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if($MainDB->connect_errno > 0){
    die('Unable to connect to database ['.$MainDB->connect_errno.']');
}
...würde ich in SQLite3 so gestalten...
db.php
PHP:
<?php
date_default_timezone_set('Europe/Berlin');
$strDatenbank = 'sqlite:test.db3';
$dbh = new PDO($strDatenbank);
?>
...mit ein paar Anpassungen krieg ich dein PHP damit bestimmt auch zum Laufen. ;)

ActionURLs und XML Browser ist doch nur: HTTP
... mit sipsak lässt sich die XML auch direkt übers SIP-Protokoll verschicken.
Siehe: SIP Notify SNOM-WiKi

Im Prinzip dasselbe was du machst, nur eben ip-telefonisch übers SIP Protokoll.
...eigentlich müsste PHP langsam mal eigene Funktionen dafür bereitstellen. :mrgreen:
Vielleicht gibt es die ja schon, nur mitgekriegt hab ich davon noch nichts.

PS: Wäre nett, wenn du die Struktur der Tabelle noch angeben könntest.
Am Besten als CREATE, dann sieht man sie ja auf einen Blick. ;)
(Bei SQLite3 schaut man dafür einfach in der sqlite_master nach, da stehen alle CREATE SQLs für die Tabellen drin)
 
Zuletzt bearbeitet:
...eigentlich müsste PHP langsam mal eigene Funktionen dafür bereitstellen. :mrgreen:
Vielleicht gibt es die ja schon, nur mitgekriegt hab ich davon noch nichts.

https://code.google.com/p/php-sip/


Allerdings verstehe ich nicht, was der Einsatz von SIP Nachrichten im konkreten Fall bringen soll. Das Telefon ruft ja sowieso die URL ab und zeigt den Output an, wozu noch eine SIP Nachricht hin ballern?
 
Zuletzt bearbeitet:
Nun, eine SIP Message bleibt dir erhalten, auch nach dem Anruf.
(Stört nicht weiter, und man sieht sofort wer zuletzt angerufen hat)

Die XML drückst du weg. Kommt erst wieder bei Anruf.

Danke für den Link, so wäre sipsak nicht nötig und wäre kompatibler mit anderen SIP Klienten.
...auch Softphones wie: PhonerLite

Allerdings senden die keine: ActionURL

Aber die PHP könnte es an bekannte SIP Klienten senden, so als: Extension Monitoring (Nebenstellenüberwachung)
(Wenn ein Anruf am SNOM ankommt, und dieses via ActionURL der PHP signalisiert)
 
Zuletzt bearbeitet:
Code:
sipsak-0.9.6-1_mipsel_static -i -vvv -M -B "Max Mustermann" -s sip:[email protected]
geht bei mir nicht. Ich bekomme immer: 404 Not Found
Code:
FB7170# sipsak-0.9.6-1_mipsel_static -i -vvv -M -B "Max Mustermann" -s sip:[email protected]
fqdnhostname: 192.168.3.1
our Via-Line: Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.48381774;rport;alias

New message with Via-Line:
MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.48381774;rport;alias
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Type: text/plain
Max-Forwards: 70
User-Agent: sipsak 0.9.6
From: sip:[email protected]:2058;tag=23c1c001
Content-Length: 14

Max Mustermann
sending message ...

request:
MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.48381774;rport;alias
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Type: text/plain
Max-Forwards: 70
User-Agent: sipsak 0.9.6
From: sip:[email protected]:2058;tag=23c1c001
Content-Length: 14

Max Mustermann
send to: UDP:192.168.3.34:5060
:
received:
SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.48381774;rport=2058;alias
From: sip:[email protected]:2058;tag=23c1c001
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Length: 0


error: did not received 200 for the MESSAGE (see above)
FB7170#
Was mach ich falsch? Kannst du mir bitte helfen.

Was genau meinst du hier mit benutzername?
-s sip:benutzername@snom-ip-oder-hostname
Ist das im SNOM die Nutzerkennung in der Identität?
Die 620 habe ich da ja bei mehreren Identitäten bei verschiedenen FB's.
 
Zuletzt bearbeitet:
Moins

Schau mal im SNOM SIP Trace nach, eventuell musst du es noch im SNOM Webinterface erlauben.
Desweiteren braucht es nur für Standard IP/Hostnamen auch den festeingestellten SIP Port: 5060
...sonst mit angeben bei der SIP URI.
...siehe: SIP Notify SNOM-WiKi

SIP URIs gehen nur mit dem Benutzernamen, bei der Fritz!Box: 620 - 629
...dabei rufst du aber nicht die IP der Fritz!Box auf, sondern die des SNOMs.
Das SNOM ist nur an einem [email protected] registriert, also gültig und erreichbar.
Die Verbindung geht selber komplett an der Fritz!Box vorbei.
 
Zuletzt bearbeitet:
Der SIP Trace im SNOM sieht eigentlich genau so aus wie in der FB:
Code:
Received from udp:192.168.3.1:2058 at 5/3/2015 05:46:22:334 (339 bytes):

MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.1894d633;rport;alias
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Type: text/plain
Max-Forwards: 70
User-Agent: sipsak 0.9.6
From: sip:[email protected]:2058;tag=54c55e40
Content-Length: 14

Max Mustermann

----------------------------------------------------------------------------

Sent to udp:192.168.3.1:2058 at 5/3/2015 05:46:22:406 (244 bytes):

SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 192.168.3.1:2058;branch=z9hG4bK.1894d633;rport=2058;alias
From: sip:[email protected]:2058;tag=54c55e40
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Length: 0
Die 4 Bedingungen aus dem Link habe ich auch überprüft
XML NOTIFY Support --> "On"
Filter packets from Registrar --> "Off"
Network identity (Port) --> 5060
Offer GRUU --> "Off"
Nur die letzte stimmte nicht, da nicht default. Ändern und reboot hat aber auch nicht geholfen.
 
Zuletzt bearbeitet:
Nunja, ankommen tut sie.
Nur die Identität wird wohl nicht erkannt.
Ist die (620) Aktiv und Registriert im SNOM?
...das kommt dann im SNOM so an...
Code:
Received from udp:192.168.178.1:35494 at Mar 5 15:10:27 (321 bytes):

MESSAGE sip:621@snom1 SIP/2.0
Via: SIP/2.0/UDP 192.168.178.1:35494;branch=z9hG4bK.104fa36a;rport;alias
To: sip:621@snom1
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Type: text/plain
Max-Forwards: 70
User-Agent: sipsak 0.9.6
From: sip:[email protected]:35494;tag=1d849dcb
Content-Length: 4

Kurt

Sent to udp:192.168.178.1:35494 at Mar 5 15:10:27 (270 bytes):

SIP/2.0 200 Ok
Via: SIP/2.0/UDP 192.168.178.1:35494;branch=z9hG4bK.104fa36a;rport=35494;alias
From: sip:[email protected]:35494;tag=1d849dcb
To: <sip:621@snom1>
Call-ID: [email protected]
CSeq: 1 MESSAGE
User-Agent: snom320/8.7.5.13
Content-Length: 0
Aktualisierte Screenshots von den Displays: snom_sip_message_01.jpg
...zeigen abwechselnd Ruhebildschirm und Message an.
 
Zuletzt bearbeitet:
Ist die (620) Aktiv und Registriert im SNOM?
Jo, ist sie:
SIP Identitätsstatus:
Identität 1 Status: [email protected]: OK

Ich hatte es auch erst mit der FB7270 probiert, aber die hängt über WAN in dem Netz und da hat sipsak doch immer irgendwie die LAN-IP (192.168.7.1) mitgesendet. Nachdem ich aber den Befehl um "-H 192.168.3.7" ergänzt habe, sah der Trace gut aus, ging aber auch nicht:
Code:
Received from udp:192.168.3.7:54894 at 5/3/2015 06:32:46:079 (341 bytes):

MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 192.168.3.7:54894;branch=z9hG4bK.7d2aded9;rport;alias
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Type: text/plain
Max-Forwards: 70
User-Agent: sipsak 0.9.6
From: sip:[email protected]:54894;tag=6b021fa8
Content-Length: 14

Max Mustermann

------------------------------------------------------------------------------

Sent to udp:192.168.3.7:54894 at 5/3/2015 06:32:46:154 (247 bytes):

SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 192.168.3.7:54894;branch=z9hG4bK.7d2aded9;rport=54894;alias
From: sip:[email protected]:54894;tag=6b021fa8
To: sip:[email protected]
Call-ID: [email protected]
CSeq: 1 MESSAGE
Content-Length: 0
Obwohl auch registriert:
 
Zuletzt bearbeitet:
Ist das ein Kuddelmuddel. ;)

Da fällt mir am End nur noch ein:
Erweitert/SIP/RTP, runterscrollen...

SIP Settings erlauben: An (o)

Minibrowser:
XML NOTIFY unterstützen: An (o)

:confused:
SIP Identitätsstatus:
Identität 1 Status: [email protected]: OK

und


Identität 7 Status: [email protected]: OK




Watt denn nun?
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
@koyaanisqatsi
Die Struktur der Tabelle kommt von unserem Warenwirtschaftsprogramm. Wie man sqlite mit PHP verwendet ist mir schon klar. Wollte nur erstmal testen, deswegen hab ich die Tabelle mit den Kundendaten auf einen MySQL-Server kopiert (einfach XAMPP-Testumgebung um mit dem Telefon ein wenig spielen zu können). Das einzige was ich gemach hab war das hinzufügen von zwei Spalten in die ich die formatierten Telefonnummern (Festnetznummer + Handynummer) kopiert hab, um meine DB-Abfrage zu erleichtern.
Mit einem Cronjob mach ich jetzt das ganze mit dem MS-SQL Server. Ich hab die Tabelle unseres Warenwirtschaftssystem um 2 Spalten erweitert und mein Skript schaut 1 mal am Tag (in der Nacht) nach Veränderungen und füllt die 2 Spalten, je nach Verfügbarkeit aus. Die Tabelle hat 77 Spalten (wofür auch immer die alle sind???). Also ich bleibe auf jeden Fall bei der Verbindung PHP und MS-SQL.

@IEEE & @koyaanisqatsi
Die PHP Klasse schau ich mir mal genauer an. Dachte auch nicht dass das sipsak doch so "einfach" umzusetzen ist. Aber das verschiebe ich jetzt mal auf das Wochenende.


Eine Frage hab ich jetzt allerdings schon wenn ich den gesamten Thread durchlese. Ich hab meine sipgate Rufnummer nicht in der Fritzbox registriert sondern direkt im snom Telefon.
Wenn ich jetzt z.B. eine sip-ID habe und diese in zwei Telefonen eingebe und anschließend einen code wie diesen ausführe:
Code:
sipsak -i -vvv -M -B "Max Mustermann" -s sip:[email protected]
dann würde in beiden Telefonen "Max Mustermann" stehen. Folglich braucht jedes Telefon eine eigene SIP-ID, wenn ich ein bestimmtes Telefon ansprechen will.
Oder aber ich hab eine SIP-ID in der Fritzbox und die Telefone haben dann z.B.: [email protected] und [email protected], dann könnte ich sie trotzdem aus dem lokalen Netz ansprechen:

Code:
sipsak -i -vvv -M -B "Max Mustermann" -s sip:[email protected]
sipsak -i -vvv -M -B "Susanne Musterfrau" -s sip:[email protected]
 
OK, hab auch grad mal eine zweite 620 aktiviert.
Beide bekommen die Nachricht.
Gegencheck: Nachricht löschen mit leeren String...
Nur die Angezeigte Identität bekommt die Nachricht, nicht alle 620er.



PhpSIP.class.php
Musste ich etwas korrigieren für die MESSAGE...
Zeile 1126 ändern in...
PHP:
$this->content_type = 'text/plain; charset=utf-8';
...ist: text/html und führt zu Fehler: 489

Dann funktioniert auch sowas...
snom1_message.php
PHP:
<?php
header('Content-Type: text/plain;Charset="UTF-8"');
require_once('PhpSIP.class.php');
try {
$api = new PhpSIP('192.168.178.1'); // IP we will bind to
$api->setMethod('MESSAGE');
$api->setFrom('sip:620@snom2');
$api->setUri('sip:621@snom1');
$api->setBody($_GET[message]);
$res = $api->send();
echo "res1: $res\n";
}
catch (Exception $e) {
echo $e->getMessage()."\n";
}
?>
Aufruf im Browser: snom1_message.php?message=Textmessage
Rückmeldung bei Erfolg: res1: 200
 
Zuletzt bearbeitet:
sipsak .... @sipgate.de
Geht nicht, du mußt es schon an die Telefone schicken, und die haben ja unterschiedliche IP's.

Wahrscheinlich mußt du dann noch "-H sipgate.de" ergänzen.
 
Zuletzt bearbeitet:
Hallo zusammen,

als Anregung will ich mal meinen Weg skizzieren:

Die Snoms sind für Namensraussuchen und -anzeigen ja schon vorbereitet, bloß dass sie die Daten in einem Verzeichnis erwarten (LDAP) statt in einer SQL-DB. Also setzt man einen OpenLDAP-Server auf (Microsofts AD tut's vielleicht auch) und repliziert Namen und Nummern aus der Datenbank dorthin. Die LDAP-Zugangsdaten lassen sich im Web-UI des Telefons eintragen und auch alle LDAP-Attribute zur Suche und Anzeige können dort elegant konfiguriert werden.

So ganz nebenbei ist das dann auch gleich ein zentrales Telefonbuch, das direkt vom Telefon aufgerufen werden kann. Modellen ohne dedizierte Taste muss man dazu noch eine Funktionstaste des Typs "Tastenereignis" mit dem Wert "LDAP-Telefonbuch" spendieren.

Ich könnte mir vorstellen, dass diese Lösung robuster als die Minibrowservariante ist. Falls das hier wen interessiert, erzähle ich gern, wie das bei uns gebaut und konfiguriert ist.
 
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.