Asterisk + MySQL + zentrales Telefonbuch

S.R.

Neuer User
Mitglied seit
22 Mai 2009
Beiträge
53
Punkte für Reaktionen
0
Punkte
0
Hallo,

bin im Thema VoIP noch relativ unerfahren und möchte mich daher in den nächsten Wochen mit diesem Thema etwas intensiver beschäftigen. Bin auf der Suche nach grundsätzlichen Anfängerfragen schon auf sehr gute Beiträge hier gestoßen. Hier nun aber nun mein Verständnisproblem:

In einer zentralen MySQL-Datenbank stehen bei uns alle internen Rufnummern drin, aber ebenso alle Kundendaten. Ich plane einen Asterisk Server und daran (erst Mal) zwei SIP-Telefone (Testsystem).

Wenn ich das jetzt richtig verstanden haben, dann kann ich Asterisk sagen, dass er bei einem eingehenden Anruf in der MySQL Datenbank nachschaut, wem die Nummer zugewiesen ist und kann diese Information (Telefonnummer, Vorname, Nachname, Firma) dann an das SIP-Telefon weiterleiten. Empfängt jedes SIP-fähige Telefon diese Informationen oder muss das Telefon dafür etwas besonderes können?

Wie ist dies bei zu wählenden Nummern? Idee: Ich tippe die ersten Buchstaben und das Telefon fragt an Asterisk an, welche Namen dazu passen könnten, Asterisk schaut dann in der Datenbank nach und schickt die Daten wieder an das Teleon. Muss hierfür das Telefon auch etwas können oder ist dies auch Standard?

Idee des ganzen: ein zentrales Telefonbuch in einer MySQL-Datenbank, welches für ein- und ausgehende Anrufe zentral von Asterisk verwendet wird und wo keine spezifischen Einstellungen an jedem Telefon vorgenommen werden muss.

Vielen Dank für eure Mühen! Vermutlich reichen auch schon ein paar genaue Stichworte, nach denen ich Suchen muss oder Links - bin wie gesagt noch am Anfang meiner Asterisk-Erfahrung und daher mit den ganzen fachlich korrekten Suchbegriffen noch nicht so weit wie in anderen Bereichen :-)

Dankend

Stefan
 
Herzlich Willkommen im Forum!

Bevor Du das Rad erneut erfinden musst: die meisten Asterisk-Lösungen mit WebGUI verwalten ein zentrales (internes, persönliches, externes) Telefonbuch in einer MySQL-Tabelle. Nutzt Du passende Endgeräte, die einen Lookup machen bzw. wo Du das Telefonbuch "browsen" kannst so hast Du die gewünschte Funktionalität. Einfach (auch aus Gründen der Geschwindigkeit des call routings) Deine relevanten Daten in der MySQL-Tabelle cachen.
 
foschi hat schon ein paar entscheidende Hinweise gegeben. Ich möchte nur nochmal ein paar Stichworte in der Raum werfen, falls es ein Asterisk ohne spezielle WebGUI sein soll.

Variante 1 (mindestens für Snom-Telefone):
OK, alle Rufnummern sind in einer MySQL-Datenbank. Lookup (Suche Name zur Nummer) bei eingehenden Anrufen habe ich über ein AGI-Skript, das im Wählplan aufgerufen wird, realisiert. Bei ausgehenden Anrufen verwende ich bei unseren Snom-Telefonen ein angepasstes PHP-Skript (Suche Nummer zu Name, was genau wie gefordert sich bei der Suche die zu suchende Zeichenkette zusammensetzt) von ... jetzt finde ich die Quelle nicht mehr ... Ich füge mal die von mir damals heruntergeladene Datei an. Falls jemand den richtigen Link findet oder eine neue, bessere Version, mag er sie bitte diesem Thread hinzufügen. Dieses Skript wird als Action-URL auf den Directory-Button der Snom-Telefone gelegt. Ich habe die Skripts so umgebaut, dass sie die Kennung des Telefons, wo gerade der Knopf gedrückt wird, mitliefert, damit das passende persönliche Telefonbuch, das auch in der Datenbank liegt, berücksichtigt wird. Diese Auflösung erfolgt dann auch wieder über MySQL-Tabellen (wem gehört denn die das aktuelle Telefon), die über wieder andere Skripte periodisch aktualisiert werden.

Das Thema wurde für Snom-Telefone schonmal hier diskutiert.

Variante 2: (mindestens für Snom-Telefone)
Du knüpfst einen LDAP-Server an Deine Datenbank und die Telefone machen eine LDAP-Abfrage. Dazu weiß ich aber nichts weiter.

Einfacher ist auf jeden Fall, etwas Fertiges zu nehmen.
 

Anhänge

Hi,

vielen Dank für eure Ansätze - und ja, ich möchte das Rad neu erfinden :-)

Habe schon von diesen "fertigen Bausätzen" gehört. Allerdings möchte ich mich intensiver mit VoIP beschäftigen und daher sehe ich es als durchaus sinnvoll an, es von der Basis auf zu lernen.

Werde den Task hier in zwei kleinere teilen:
1) eingehende Anrufe mit korrektem Namen anzeigen
2) ausgehende Anrufe mit Telefonbuch verknüpfen

zu 1)
Hier werde ich auf MySQL zugreifen - der Ansatz mit LDAP kommt hier leider nicht in Frage, da ereits alle Kontakte in MySQL vorliegen und ich hier nicht erst noch eine Portierung in LDAP umsetzen möchte - wäre zwar durchaus denkbar, aber nicht vorgesehen.

Kannst du mir das AGI-Script und die Einbindung in den Wählplan mal schicken - das wäre super. Allerdings hatte ich gehoff, dass hier kein extra Script gestartet werden muss, da Asterisk ja auch direkt auf MySQL zugreifen kann (für die Sip-Telefone, die ich hier zum testen hbae, funktioniert dies z.B. für die Authentifizierung schon recht brauchbar). Gibt es also hierfür auch eine direkte MySQL-Anbindung ohne Script?


zu 2)
Bisher habe ich nur so billigste Test-Telefone. Die Snom-Telefone sind schon bestellt und sollten in Kürze eintreffen. Dann werde ich das mit dem Telefonbuch genauer nach gehen können - ohne Testen macht dies keinen Sinn.

Vielen Dank für eure Hilfe

Stefan
 
Hi,

vielen Dank für eure Ansätze - und ja, ich möchte das Rad neu erfinden :-)

Habe schon von diesen "fertigen Bausätzen" gehört. Allerdings möchte ich mich intensiver mit VoIP beschäftigen und daher sehe ich es als durchaus sinnvoll an, es von der Basis auf zu lernen.

Dem widerspreche ich gar nicht; ich finde es auch sinnvoll das Thema von Grundauf zu beherrschen. Bis Du allerdings zu Lösungen kommst die entfernt den Funktionsumfang z.B. von Gemeinschaft abdecken hast Du entweder eine sehr steile Lernkurve oder ausreichend (> 6 Mon) Zeit.
 
foschi hat da völlig recht. Hinzufügen möchte ich, dass Du betontest, dass Du Dich mit VOIP intensiver beschäftigen möchtest und mein oben beschriebener "Heimbausatz" ist reine Skriptschreiberei (Sprache nach Wahl: Shell, Perl, PHP etc.) mit Datenbankanbindung. Du lernst auch viel mit Fertiglösungen.

Aber gut, sei's drum. Hier mein Ausschnitt aus der extensions.conf, wo der Name zur Nummer gesucht wird, dann wird die entspr. Asterisk-Variable belegt:

Code:
exten => s,n,AGI(localreverse.agi|${CALLERID(num)}|${CALLED})
exten => s,n,Set(CALLERID(name)=${LONGNAME})

Die Variable LONGNAME wird im Skript localreverse.agi gesetzt. Dies sieht wie folgt aus:

Code:
#!/bin/sh
#

NAME=`/var/lib/asterisk/agi-bin/get_name_from_number.pl $1 $2`

NAME=`echo $NAME | iconv -f ISO-8859-1 -t UTF-8`
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
echo 'SET VARIABLE LONGNUMBER '"\"$1\"" >/dev/stdout

exit 0

Das Perl-Skript get_name_from_number.pl macht genau was es sagt: grast die Tabelle(n) mit Telefonnummern ab und liefert einen Namen oder "unbekannt" (falls Rufnummer unterdrückt) oder die Nummer (falls nicht in den Tabellen gespeichert). Dort werden auch die Inputparameter überprüft (nur 0-9 und + sind zulässig). Da das reine Datenbankarbeit in Perl ist, erspare ich mir das. (Sieht auch nicht "schön" aus.)

Die umgekehrte Richtung, aus einem Namen eine Nummer zu "machen", erledigt die php-Skriptsammlung, die ich in diesem Thread oben schonmal angehängt habe.
 
Hi,

vielen Dank für eure ehrliche Meinung. Ich teile diese auch und denke, dass 6 Monate n' gute Schätzung sind. Trotzdem hoffe ich natürlich "eine sehr steile Lernkurve" zu haben, aber ob das dann zutrifft, werden wir dann sehen :-)

zu 1)
Ich bin zwar ein großer Fan von Scripten unter Linux, allerdings nur dann, wenn der direkte Weg nicht unterstützt wird und der wäre hier, direkt auf die DB zuzugreifen.
Mit dieser Idee im Hinterkopf, habe ich folgendes Thema bei euch gefunden:
http://www.ip-phone-forum.de/showthread.php?p=1334155
Allerdings kam ich mit der dortigen Konfention erst nicht klar, vermutlich auch Kombiniert mit einer Inkompatibilität zwischen 1.4 und 1.6 (vermute ich, kann ich net bestätigen, da ich mit 1.4 überhaupt keine Erfahrung hab).
Das Problem scheint jetzt aber gelöst zu sein :-) Im Post steht der direkte MySQL-Code direkt dabei - für die Zukunft aufbewahrt...

zu 2)
Hier bin ich noch nicht zu gekommen, allerdings n' allgemeine Frage dazu: sehe ich das richtig, dass das Telefon dann direkt auf MySQL zugreift (oder auf eine Webseite mit php-Script)? Weil mein Problem ist folgendes:
Es soll auch mal externe Telefone geben. Diese sollen dann einfach nur bei Freunden eingesteckt werden und dann so laufen, als würden diese bei mir stehen.
Bisher wird SIP über TLS abgesichert. Wenn dann das Telefonbuch nicht über SIP kommuniziert, dann muss dafür auch noch eine sichere Verbindung hergestellt werden. Geht also eher um das grobe Konzept, als um die genaue Umsetzung...

Schönen Abend und bis bald

Stefan
 
zu 1)
Ich bin zwar ein großer Fan von Scripten unter Linux, allerdings nur dann, wenn der direkte Weg nicht unterstützt wird und der wäre hier, direkt auf die DB zuzugreifen.
Das klingt in der Tat verlockend. Der Grund, dass ich diesen Weg nicht gegangen bin liegt wohl eher darin, dass ich den direkten Zugriff einfach nicht kannte (gibt's den auch unter Asterisk 1.2?). Außerdem bin ich so nicht abhängig von diesem Modul und die AGI-Schnittstelle wird sicher bleiben. Schließlich (auch nicht zu verachten!) kann ich dieselben Skripts für andere Zwecke einsetzen.

Trotzdem Danke für die Quelle.
zu 2)
Hier bin ich noch nicht zu gekommen, allerdings n' allgemeine Frage dazu: sehe ich das richtig, dass das Telefon dann direkt auf MySQL zugreift (oder auf eine Webseite mit php-Script)?
Das ist aber ein enormer Unterschied. Zur Frage: Die PHP-Skripts liegen auf einem Webserver. Sie erzeugen keinen HTML-Code, sondern XML-Code (vom Typ SnomIPPhoneDirectory)
Weil mein Problem ist folgendes:
Es soll auch mal externe Telefone geben. Diese sollen dann einfach nur bei Freunden eingesteckt werden und dann so laufen, als würden diese bei mir stehen.
Bisher wird SIP über TLS abgesichert. Wenn dann das Telefonbuch nicht über SIP kommuniziert, dann muss dafür auch noch eine sichere Verbindung hergestellt werden. Geht also eher um das grobe Konzept, als um die genaue Umsetzung...
HTTPS?
 
Kostenlos!

Statistik des Forums

Themen
248,887
Beiträge
2,303,985
Mitglieder
378,567
Neuestes Mitglied
MacOS